* [Added]:

- DNS (WAN) sync for those pesky disconnections (dynamic ip renewal). 

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@7275 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
Lance
2006-06-21 10:55:26 +00:00
parent 0f5b497967
commit 59d0fde84a
9 changed files with 152 additions and 2 deletions

View File

@@ -104,6 +104,8 @@ int char_per_account = 0; //Maximum charas per account (default unlimited) [Siri
int log_char = 1; // loggin char or not [devil]
int log_inter = 1; // loggin inter or not [devil]
char *char_server_dns = NULL;
// Advanced subnet check [LuzZza]
struct _subnet {
long subnet;
@@ -1782,6 +1784,7 @@ int mmo_char_send006b(int fd, struct char_session_data *sd) {
int parse_tologin(int fd) {
int i;
struct char_session_data *sd;
struct hostent *h;
// only login-server can have an access to here.
// so, if it isn't the login-server, we disconnect the session.
@@ -2178,6 +2181,26 @@ int parse_tologin(int fd) {
}
break;
case 0x2735:
ShowInfo("IP Sync in progress...\n");
h = char_server_dns?gethostbyname(char_server_dns):NULL;
if(h){
WFIFOW(fd,0) = 0x2736;
WFIFOB(fd,2) = h->h_addr[0];
WFIFOB(fd,3) = h->h_addr[1];
WFIFOB(fd,4) = h->h_addr[2];
WFIFOB(fd,5) = h->h_addr[3];
WFIFOSET(fd, 6);
}
for(i = 0; i < MAX_MAP_SERVERS; i++){
if(server_fd[i] >= 0){
WFIFOW(server_fd[i], 0) = 0x2b1e;
WFIFOSET(server_fd[i], 2);
}
}
RFIFOSKIP(fd,2);
break;
default:
ShowError("Unknown packet 0x%04x from login server, disconnecting.\n", RFIFOW(fd, 0));
session[fd]->eof = 1;
@@ -2971,6 +2994,16 @@ int parse_frommap(int fd) {
break;
}
case 0x2736:
for(i = 0; i < MAX_MAP_SERVERS; i++){
if(server_fd[i] == fd){
ShowInfo("IP Sync (Server #%d) successful.\n",i);
server[i].ip = RFIFOL(fd, 2);
}
}
RFIFOSKIP(fd,6);
break;
default:
// inter server - packet
{
@@ -3928,6 +3961,8 @@ void do_final(void) {
char_db_->destroy(char_db_, NULL);
online_char_db->destroy(online_char_db, NULL);
if(char_server_dns) aFree(char_server_dns);
mysql_close(&mysql_handle);
if(char_gm_read)
mysql_close(&lmysql_handle);
@@ -4071,6 +4106,9 @@ int char_config_read(const char *cfgName) {
} else if (strcmpi(w1, "login_ip") == 0) {
login_ip_set_ = 1;
h = gethostbyname (w2);
if(char_server_dns)
aFree(char_server_dns);
char_server_dns = (char *)aCalloc(strlen(w2)+1, 1);
if (h != NULL) {
ShowStatus("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]);