summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/login/init.c3
-rw-r--r--src/login/parse.c21
-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 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