summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-03-22 11:02:47 +0300
committerAndrei Karas <akaras@inbox.ru>2015-03-22 11:02:47 +0300
commitc89fd6fc22564b9d7ea491f2868453bf81b8c0cb (patch)
treeabb1d9a56efa669227d87c2aa2db665c623ac277 /src
parent56f50b3d7c653966b5bb38a6d3cfa3fef60ebcb8 (diff)
downloadevol-hercules-c89fd6fc22564b9d7ea491f2868453bf81b8c0cb.tar.gz
evol-hercules-c89fd6fc22564b9d7ea491f2868453bf81b8c0cb.tar.bz2
evol-hercules-c89fd6fc22564b9d7ea491f2868453bf81b8c0cb.tar.xz
evol-hercules-c89fd6fc22564b9d7ea491f2868453bf81b8c0cb.zip
login: reset timeout timer if receive ping packet.
Diffstat (limited to 'src')
-rw-r--r--src/login/init.c1
-rw-r--r--src/login/parse.c23
-rw-r--r--src/login/parse.h1
3 files changed, 25 insertions, 0 deletions
diff --git a/src/login/init.c b/src/login/init.c
index 0912ff8..18ac7e0 100644
--- a/src/login/init.c
+++ b/src/login/init.c
@@ -38,6 +38,7 @@ HPExport void plugin_init (void)
addHookPre("login->parse_client_login", elogin_parse_client_login_pre);
addHookPre("login->parse_request_connection", elogin_parse_request_connection);
addHookPre("login->check_password", elogin_check_password);
+ addHookPre("login->parse_ping", elogin_parse_ping);
}
HPExport void server_preinit (void)
diff --git a/src/login/parse.c b/src/login/parse.c
index 6cbc77b..f2e2592 100644
--- a/src/login/parse.c
+++ b/src/login/parse.c
@@ -10,6 +10,7 @@
#include "../../../common/mmo.h"
#include "../../../common/socket.h"
#include "../../../common/strlib.h"
+#include "../../../common/timer.h"
#include "../../../login/account.h"
#include "../../../login/login.h"
@@ -150,3 +151,25 @@ void elogin_parse_request_connection(int *fd, struct login_session_data* sd, con
ShowNotice("Connection of the char-server from ip %s REFUSED.\n", ip);
}
}
+
+void elogin_parse_ping(int *fd, struct login_session_data* sd)
+{
+ RFIFOSKIP(*fd, 26);
+ if (!sd)
+ {
+ hookStop();
+ return;
+ }
+ struct online_login_data* data = (struct online_login_data*)idb_get(login->online_db, sd->account_id);
+ if (data == NULL)
+ {
+ hookStop();
+ return;
+ }
+ if (data->waiting_disconnect != INVALID_TIMER)
+ {
+ timer->delete(data->waiting_disconnect, login->waiting_disconnect_timer);
+ data->waiting_disconnect = timer->add(timer->gettick() + 30000, login->waiting_disconnect_timer, sd->account_id, 0);
+ }
+ hookStop();
+}
diff --git a/src/login/parse.h b/src/login/parse.h
index 44cb1b1..31d0d0c 100644
--- a/src/login/parse.h
+++ b/src/login/parse.h
@@ -8,5 +8,6 @@ void login_parse_version(int fd);
int elogin_parse_client_login_pre(int *fd, struct login_session_data* sd, const char *const ip);
void elogin_parse_client_login2(int fd);
void elogin_parse_request_connection(int *fd, struct login_session_data* sd, const char *const ip);
+void elogin_parse_ping(int *fd, struct login_session_data* sd);
#endif // EVOL_LOGIN_PARSE