From 3d3f077e6ff51e5e9d388a16bd73a526310918ad Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 10 Nov 2014 19:04:27 +0300 Subject: disconnect in login server if client version < 2. --- src/login/init.c | 3 +++ src/login/parse.c | 21 +++++++++++++++++++++ src/login/parse.h | 1 + 3 files changed, 25 insertions(+) diff --git a/src/login/init.c b/src/login/init.c index 92b6af6..9aab37d 100644 --- a/src/login/init.c +++ b/src/login/init.c @@ -31,7 +31,10 @@ HPExport void plugin_init (void) session = GET_SYMBOL("session"); sockt = GET_SYMBOL("sockt"); + login = GET_SYMBOL("login"); + addPacket(0x7530, 22, login_parse_version, hpParse_Login); + addHookPre("login->parse_client_login", elogin_parse_client_login_pre); } HPExport void server_preinit (void) diff --git a/src/login/parse.c b/src/login/parse.c index b50f52e..7b6bb11 100644 --- a/src/login/parse.c +++ b/src/login/parse.c @@ -14,12 +14,22 @@ #include "login/parse.h" +int clientVersion = 0; + void login_parse_version(int fd) { struct login_session_data* sd = (struct login_session_data*)session[fd]->session_data; if (!sd) return; + clientVersion = RFIFOL(fd, 2); + + if (clientVersion < 2) + { + login->login_error(fd, 5); + return; + } + WFIFOHEAD(fd, 4 + 8); WFIFOW(fd, 0) = 0x7531; WFIFOW(fd, 2) = 4 + 8; @@ -27,3 +37,14 @@ void login_parse_version(int fd) WFIFOL(fd, 8) = 1; // server version WFIFOSET(fd, WFIFOW(fd,2)); } + +int elogin_parse_client_login_pre(int *fd, struct login_session_data* sd, const char *const ip) +{ + if (clientVersion < 2) + { + login->login_error(*fd, 5); + hookStop(); + return 1; + } + return 0; +} diff --git a/src/login/parse.h b/src/login/parse.h index 8595bd1..753e23c 100644 --- a/src/login/parse.h +++ b/src/login/parse.h @@ -5,5 +5,6 @@ #define EVOL_LOGIN_PARSE void login_parse_version(int fd); +int elogin_parse_client_login_pre(int *fd, struct login_session_data* sd, const char *const ip); #endif // EVOL_LOGIN_PARSE -- cgit v1.2.3-70-g09d2