From 12f444137f5000c76f4a46ac7689ae8edc30d626 Mon Sep 17 00:00:00 2001 From: skotlex Date: Tue, 27 Jun 2006 17:02:59 +0000 Subject: - Cleaned up the IP sync code to... - Use charif_sendallwos rather than manually altering the buffers of each server. - Use the id variable for identifying current char-server instead of scanning the connected servers for it (it's doing the same work twice) - Added config setting sync_ip_interval to specify how long to go before updating ip. Defaults to 0 (disabled) - Sending ip update packets will only be done when the ip changed now. - Removed dns_str variables, and now char_ip_str/login_ip_str/map_ip_str will hold the unresolved dns address (as these variables have no use otherwise) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@7360 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/chrif.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'src/map/chrif.c') diff --git a/src/map/chrif.c b/src/map/chrif.c index be0b2a25f..34279bb52 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -30,7 +30,6 @@ //Free Packets: F->2af8 struct dbt *auth_db; -char *map_server_dns = NULL; static const int packet_len_table[0x3d] = { 60, 3,-1,27,10,-1, 6,-1, // 2af8-2aff: U->2af8, U->2af9, U->2afa, U->2afb, U->2afc, U->2afd, U->2afe, U->2aff @@ -88,8 +87,8 @@ static const int packet_len_table[0x3d] = { int chrif_connected; int char_fd = 0; //Using 0 instead of -1 is safer against crashes. [Skotlex] int srvinfo; -static char char_ip_str[16]; -static int char_ip; +static char char_ip_str[128]; +static in_addr_t char_ip= 0; static int char_port = 6121; static char userid[NAME_LENGTH], passwd[NAME_LENGTH]; static int chrif_state = 0; @@ -145,13 +144,15 @@ void chrif_checkdefaultlogin(void) */ int chrif_setip(char *ip) { - char_ip = resolve_hostbyname(ip,NULL,char_ip_str); + char ip_str[16]; + char_ip = resolve_hostbyname(ip,NULL,ip_str); if (!char_ip) { ShowWarning("Failed to Resolve Char Server Address! (%s)\n", ip); return 0; } - ShowInfo("Char Server IP Address : '"CL_WHITE"%s"CL_RESET"' -> '"CL_WHITE"%s"CL_RESET"'.\n", ip, char_ip_str); + strncpy(char_ip_str, ip, sizeof(char_ip_str)); + ShowInfo("Char Server IP Address : '"CL_WHITE"%s"CL_RESET"' -> '"CL_WHITE"%s"CL_RESET"'.\n", ip, ip_str); return 1; } @@ -1411,16 +1412,17 @@ int chrif_disconnect(int fd) { } void chrif_update_ip(int fd){ - char ip[4]; - if (map_server_dns && resolve_hostbyname(map_server_dns, ip, NULL)) { - ShowInfo("IP Sync [%s] in progress...\n",map_server_dns); - WFIFOW(fd, 0) = 0x2736; - WFIFOB(fd, 2) = ip[0]; - WFIFOB(fd, 3) = ip[1]; - WFIFOB(fd, 4) = ip[2]; - WFIFOB(fd, 5) = ip[3]; - WFIFOSET(fd, 6); - } + unsigned long new_ip; + + new_ip = resolve_hostbyname(char_ip_str, NULL, NULL); + if (new_ip && new_ip != char_ip) + char_ip = new_ip; //Update char_ip + + new_ip = clif_refresh_ip(); + if (!new_ip) return; //No change + WFIFOW(fd, 0) = 0x2736; + WFIFOL(fd, 2) = new_ip; + WFIFOSET(fd, 6); } /*========================================== -- cgit v1.2.3-70-g09d2