Changed how IP Bindings are handled

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1045 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
(no author) 2005-02-05 19:25:36 +00:00
parent bf3ebabb8e
commit 3108e8fef2
10 changed files with 81 additions and 21 deletions

View File

@ -1,6 +1,11 @@
Date Added
02/05
* Changed interface binding to use a bind_ip instead of using
the login_ip, char_ip, or map_ip. This lets you still be
able to set your WAN IP seperate from what interface you
wish to bind to. Also, the default is back to binding to
all interfaces on the machine. [1045: MouseJstr]
* optimizing OnTouch event name generation [Shinomori]
* fixing Celests Sharp Shooting [Shinomori]
* Updated Sharp Shooting AoE code, thanks to Neodis / k-Athena [celest]

View File

@ -18,6 +18,10 @@ wisp_server_name: Server
//
// login_ip:127.0.0.1
// What interface should we bind to.. if you have multiple IP's on one
// machine, this lets you put multiple servers on the same ports
// bind_ip:127.0.0.1
// Login Server Port
login_port: 6900

View File

@ -8,6 +8,10 @@
// you need to specify the IP address you wish to export to the entire world.
//
//login_ip:127.0.0.1
// What interface should we bind to.. if you have multiple IP's on one
// machine, this lets you put multiple servers on the same ports
// bind_ip:127.0.0.1
// Login Server Port
login_port: 6900

View File

@ -30,6 +30,10 @@ passwd: p1
//
//char_ip:127.0.0.1
// What interface should we bind to.. if you have multiple IP's on one
// machine, this lets you put multiple servers on the same ports
// bind_ip:127.0.0.1
// Character Server Port
char_port: 6121

View File

@ -54,6 +54,8 @@ in_addr_t login_ip;
int login_port = 6900;
int char_ip_set_ = 0;
char char_ip_str[16];
int bind_ip_set_ = 0;
char bind_ip_str[16];
in_addr_t char_ip;
int char_port = 6121;
int char_maintenance;
@ -3219,6 +3221,14 @@ int char_config_read(const char *cfgName) {
sprintf(char_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
} else
memcpy(char_ip_str, w2, 16);
} else if (strcmpi(w1, "bind_ip") == 0) {
bind_ip_set_ = 1;
h = gethostbyname(w2);
if (h != NULL) {
printf("Character server binding IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
sprintf(bind_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
} else
memcpy(bind_ip_str, w2, 16);
} else if (strcmpi(w1, "char_port") == 0) {
char_port = atoi(w2);
} else if (strcmpi(w1, "char_maintenance") == 0) {
@ -3436,8 +3446,10 @@ int do_init(int argc, char **argv) {
set_termfunc(do_final);
set_defaultparse(parse_char);
//char_fd = make_listen_port(char_port);
char_fd = make_listen_bind(char_ip,char_port);
if (bind_ip_set_)
char_fd = make_listen_bind(inet_addr(bind_ip_str),char_port);
else
char_fd = make_listen_bind(INADDR_ANY,char_port);
add_timer_func_list(check_connect_login_server, "check_connect_login_server");
add_timer_func_list(send_users_tologin, "send_users_tologin");

View File

@ -93,6 +93,8 @@ in_addr_t login_ip;
int login_port = 6900;
int char_ip_set_ = 0;
char char_ip_str[128];
int bind_ip_set_ = 0;
char bind_ip_str[128];
in_addr_t char_ip;
int char_port = 6121;
int char_maintenance;
@ -3174,6 +3176,14 @@ int char_config_read(const char *cfgName) {
sprintf(char_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
} else
memcpy(char_ip_str, w2, 16);
} else if (strcmpi(w1, "bind_ip") == 0) {
bind_ip_set_ = 1;
h = gethostbyname (w2);
if(h != NULL) {
printf("Character server binding IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
sprintf(bind_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
} else
memcpy(bind_ip_str, w2, 16);
} else if (strcmpi(w1, "char_port") == 0) {
char_port = atoi(w2);
} else if (strcmpi(w1, "char_maintenance") == 0) {
@ -3330,7 +3340,10 @@ int do_init(int argc, char **argv){
printf("open port %d.....\n",char_port);
//char_fd = make_listen_port(char_port);
char_fd = make_listen_bind(char_ip,char_port);
if (bind_ip_set_)
char_fd = make_listen_bind(inet_addr(bind_ip_str),char_port);
else
char_fd = make_listen_bind(INADDR_ANY,char_port);
// send ALIVE PING to login server.
printf("add interval tic (check_connect_login_server)....\n");

View File

@ -55,8 +55,8 @@ void Gettimeofday(struct timeval *timenow)
int account_id_count = START_ACCOUNT_NUM;
int server_num;
int new_account_flag = 0;
char login_ip_str[16];
in_addr_t login_ip;
char bind_ip_str[16];
in_addr_t bind_ip;
int login_port = 6900;
char lan_char_ip[16];
int subneti[4];
@ -3367,6 +3367,8 @@ int login_config_read(const char *cfgName) {
FILE *fp;
struct hostent *h = NULL;
bind_ip_str[0] = '\0';
if ((fp = fopen(cfgName, "r")) == NULL) {
printf("Configuration file (%s) not found.\n", cfgName);
return 1;
@ -3421,14 +3423,14 @@ int login_config_read(const char *cfgName) {
level_new_gm = atoi(w2);
} else if (strcmpi(w1, "new_account") == 0) {
new_account_flag = config_switch(w2);
} else if (strcmpi(w1, "login_ip") == 0) {
//login_ip_set_ = 1;
} else if (strcmpi(w1, "bind_ip") == 0) {
//bind_ip_set_ = 1;
h = gethostbyname (w2);
if (h != NULL) {
printf("Login server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
sprintf(login_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
sprintf(bind_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
} else
memcpy(login_ip_str,w2,16);
memcpy(bind_ip_str,w2,16);
} else if (strcmpi(w1, "login_port") == 0) {
login_port = atoi(w2);
} else if (strcmpi(w1, "account_filename") == 0) {
@ -3955,9 +3957,14 @@ int do_init(int argc, char **argv) {
read_gm_account();
// set_termfunc(mmo_auth_sync);
set_defaultparse(parse_login);
login_ip = inet_addr(login_ip_str);
if (bind_ip_str[0] != '\0')
bind_ip = inet_addr(bind_ip_str);
else
bind_ip = INADDR_ANY;
//login_fd = make_listen_port(login_port);
login_fd = make_listen_bind(login_ip,login_port);
login_fd = make_listen_bind(bind_ip,login_port);
if(anti_freeze_enable > 0) {
add_timer_func_list(char_anti_freeze_system, "char_anti_freeze_system");

View File

@ -82,8 +82,8 @@ void Gettimeofday(struct timeval *timenow)
int account_id_count = START_ACCOUNT_NUM;
int server_num;
int new_account_flag = 0;
char login_ip_str[16];
in_addr_t login_ip;
char bind_ip_str[16];
in_addr_t bind_ip;
int login_port = 6900;
char lan_char_ip[128]; // Lan char ip added by kashy
int subnetmaski[4]; // Subnetmask added by kashy
@ -1580,6 +1580,8 @@ int login_config_read(const char *cfgName){
FILE *fp;
struct hostent *h = NULL;
bind_ip_str[0] = '\0';
fp=fopen(cfgName,"r");
if(fp==NULL){
@ -1594,15 +1596,14 @@ int login_config_read(const char *cfgName){
i=sscanf(line,"%[^:]: %[^\r\n]",w1,w2);
if(i!=2)
continue;
else if (strcmpi(w1, "login_ip") == 0) {
else if (strcmpi(w1, "bind_ip") == 0) {
//login_ip_set_ = 1;
h = gethostbyname (w2);
if (h != NULL) {
printf("Login server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
sprintf(login_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
sprintf(bind_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
} else
memcpy(login_ip_str,w2,16);
memcpy(bind_ip_str,w2,16);
} else if(strcmpi(w1,"login_port")==0){
login_port=atoi(w2);
printf ("set login_port : %s\n",w2);
@ -1816,10 +1817,13 @@ int do_init(int argc,char **argv){
printf ("set max servers complete\n");
//server port open & binding
login_ip = inet_addr(login_ip_str);
if (bind_ip_str[0] != '\0')
bind_ip = inet_addr(bind_ip_str);
else
bind_ip = INADDR_ANY;
//login_fd=make_listen_port(login_port);
login_fd=make_listen_bind(login_ip,login_port);
login_fd=make_listen_bind(bind_ip,login_port);
//Auth start
printf ("Running mmo_auth_sqldb_init()\n");

View File

@ -153,6 +153,7 @@ enum {
static char map_ip_str[16];
static in_addr_t map_ip;
static in_addr_t bind_ip = INADDR_ANY;
static int map_port = 5121;
int map_fd;
char talkie_mes[80];
@ -167,6 +168,11 @@ void clif_setip(char *ip)
map_ip = inet_addr(map_ip_str);
}
void clif_setbindip(char *ip)
{
bind_ip = inet_addr(ip);
}
/*==========================================
* mapŽIÌport<EFBFBD>Ýè
*------------------------------------------
@ -11357,14 +11363,14 @@ int do_init_clif(void) {
set_defaultparse(clif_parse);
#ifdef __WIN32
//if (!make_listen_port(map_port)) {
if (!make_listen_bind(map_ip,map_port)) {
if (!make_listen_bind(bind_ip,map_port)) {
printf("cant bind game port\n");
exit(1);
}
#else
for(i = 0; i < 10; i++) {
//if (make_listen_port(map_port))
if (make_listen_bind(map_ip,map_port))
if (make_listen_bind(bind_ip,map_port))
break;
sleep(20);
}

View File

@ -2132,6 +2132,7 @@ int map_delmap(char *mapname) {
}
static int map_ip_set_ = 0;
static int bind_ip_set_ = 0;
static int char_ip_set_ = 0;
/*==========================================