From 0a74f9ba775857aeb281266a6e8cc10052023774 Mon Sep 17 00:00:00 2001 From: Dennis Friis Date: Sat, 31 May 2008 12:59:35 +0000 Subject: Add optional update_host to loginserver so you can tell the client that an alternative update host is available. Based on patch by Sanga --- src/login/login.c | 28 ++++++++++++++++++++++++++++ src/map/clif.c | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/login/login.c b/src/login/login.c index 8d9818d..30c6152 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -41,6 +41,7 @@ int login_port = 6900; char lan_char_ip[16]; int subneti[4]; int subnetmaski[4]; +char update_host[128] = ""; char account_filename[1024] = "save/account.txt"; char GM_account_filename[1024] = "conf/GM_account.txt"; @@ -2706,6 +2707,7 @@ int parse_login(int fd) { int result, i, j; unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr; char ip[16]; + int host_len; sprintf(ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]); @@ -2788,6 +2790,29 @@ int parse_login(int fd) { printf("Connection of the GM (level:%d) account '%s' accepted.\n", gm_level, account.userid); else printf("Connection of the account '%s' accepted.\n", account.userid); + + /* + * Add a 0x0063 packet, which contains the name of the update host. The packet will only + * be sent if login_athena.conf contains a non-null entry for "update_host:" + * + * Because older clients cannot handle the 0x63 packet, we check the "version 2" value + * from the incoming 0x64 packet (the byte at offset 54). If bit 0 of this is set, + * then the client can safely accept the 0x63 packet. The "version 2" value is not + * otherwise used by eAthena. + */ + if ((RFIFOW(fd, 0) == 0x64) && (RFIFOB(fd, 54) & 0x01)) + { + host_len = (int)strlen(update_host); + if (host_len > 0) + { + WFIFOW(fd, 0) = 0x63; + WFIFOW(fd, 2) = 4 + host_len; + memcpy(WFIFOP(fd, 4), update_host, host_len); + WFIFOSET(fd, 4 + host_len); + } + } + + // Load list of char servers into outbound packet server_num = 0; for(i = 0; i < MAX_SERVERS; i++) { if (server_fd[i] >= 0) { @@ -3351,6 +3376,9 @@ int login_config_read(const char *cfgName) { ANTI_FREEZE_INTERVAL = 5; // minimum 5 seconds } else if (strcmpi(w1, "import") == 0) { login_config_read(w2); + } else if (strcmpi(w1, "update_host") == 0) { + strncpy(update_host, w2, sizeof(update_host)); + update_host[sizeof(update_host)-1] = '\0'; } } } diff --git a/src/map/clif.c b/src/map/clif.c index 04d6c4b..618e05a 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -58,7 +58,7 @@ static const int packet_len_table[0x220] = { //#0x0040 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 55, 17, 3, 37, 46, -1, 23, -1, 3,108, 3, 2, + 0, 0, 0, -1, 55, 17, 3, 37, 46, -1, 23, -1, 3,108, 3, 2, #if PACKETVER < 2 3, 28, 19, 11, 3, -1, 9, 5, 52, 51, 56, 58, 41, 2, 6, 6, #else // 78-7b 亀島以降 lv99エフェクト用 -- cgit v1.2.3-70-g09d2