diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-03-22 11:02:47 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-03-22 11:02:47 +0300 |
commit | c89fd6fc22564b9d7ea491f2868453bf81b8c0cb (patch) | |
tree | abb1d9a56efa669227d87c2aa2db665c623ac277 /src | |
parent | 56f50b3d7c653966b5bb38a6d3cfa3fef60ebcb8 (diff) | |
download | plugin-c89fd6fc22564b9d7ea491f2868453bf81b8c0cb.tar.gz plugin-c89fd6fc22564b9d7ea491f2868453bf81b8c0cb.tar.bz2 plugin-c89fd6fc22564b9d7ea491f2868453bf81b8c0cb.tar.xz plugin-c89fd6fc22564b9d7ea491f2868453bf81b8c0cb.zip |
login: reset timeout timer if receive ping packet.
Diffstat (limited to 'src')
-rw-r--r-- | src/login/init.c | 1 | ||||
-rw-r--r-- | src/login/parse.c | 23 | ||||
-rw-r--r-- | src/login/parse.h | 1 |
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 |