summaryrefslogtreecommitdiff
path: root/src/map/chrif.c
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-06-27 17:02:59 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-06-27 17:02:59 +0000
commit12f444137f5000c76f4a46ac7689ae8edc30d626 (patch)
tree0ddb63b1ea62a0c748b37d322638fe464135f0f4 /src/map/chrif.c
parent036bbfd9ae5a4a77031fb33a87264e58214c2ba0 (diff)
downloadhercules-12f444137f5000c76f4a46ac7689ae8edc30d626.tar.gz
hercules-12f444137f5000c76f4a46ac7689ae8edc30d626.tar.bz2
hercules-12f444137f5000c76f4a46ac7689ae8edc30d626.tar.xz
hercules-12f444137f5000c76f4a46ac7689ae8edc30d626.zip
- 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
Diffstat (limited to 'src/map/chrif.c')
-rw-r--r--src/map/chrif.c32
1 files changed, 17 insertions, 15 deletions
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);
}
/*==========================================