summaryrefslogtreecommitdiff
path: root/src/elogin
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-05-02 19:06:39 +0300
committerAndrei Karas <akaras@inbox.ru>2016-05-02 19:06:39 +0300
commit1fc6228436311da0d70f14176fe47f3e37f6faa6 (patch)
tree9434c90ab44ac55200daa199f524fa11f3168678 /src/elogin
parent00d1b8bf9fc3648730904b6f86696417f4445037 (diff)
downloadevol-hercules-1fc6228436311da0d70f14176fe47f3e37f6faa6.tar.gz
evol-hercules-1fc6228436311da0d70f14176fe47f3e37f6faa6.tar.bz2
evol-hercules-1fc6228436311da0d70f14176fe47f3e37f6faa6.tar.xz
evol-hercules-1fc6228436311da0d70f14176fe47f3e37f6faa6.zip
Update function hook prototypes for support new hercules.
Diffstat (limited to 'src/elogin')
-rw-r--r--src/elogin/init.c16
-rw-r--r--src/elogin/login.c11
-rw-r--r--src/elogin/login.h5
-rw-r--r--src/elogin/parse.c28
-rw-r--r--src/elogin/parse.h10
5 files changed, 45 insertions, 25 deletions
diff --git a/src/elogin/init.c b/src/elogin/init.c
index 4246ffd..d420cba 100644
--- a/src/elogin/init.c
+++ b/src/elogin/init.c
@@ -15,6 +15,7 @@
#include "common/timer.h"
#include "common/mapindex.h"
#include "login/lclif.h"
+#include "login/lclif.p.h"
#include "login/login.h"
#include "ecommon/init.h"
@@ -33,6 +34,11 @@ HPExport struct hplugin_info pinfo =
HPM_VERSION
};
+#define addHookPrePriv(ifname, type, funcname, hook) ( \
+ (void)((HPMHOOK_pre_ ## type ## _ ## funcname)0 == (hook)), \
+ HPMi->hooking->AddHook(HOOK_TYPE_PRE, #ifname "->" #funcname, (hook), HPMi->pid) \
+ )
+
HPExport void plugin_init (void)
{
interfaces_init_common();
@@ -40,10 +46,12 @@ HPExport void plugin_init (void)
addPacket(0x7530, 22, login_parse_version, hpParse_Login);
addPacket(0x027c, 91, elogin_parse_client_login2, hpParse_Login);
addPacket(0x5000, 54, elogin_parse_change_paassword, hpParse_FromChar);
- addHookPre("login->client_login", elogin_client_login_pre);
- addHookPre("login->check_password", elogin_check_password);
- addHookPre("lclif->p->parse_CA_CONNECT_INFO_CHANGED", elogin_parse_ping);
- addHookPost("login->client_login", elogin_client_login_post);
+
+ addHookPre(login, client_login, elogin_client_login_pre);
+ addHookPre(login, check_password, elogin_check_password_pre);
+ addHookPrePriv(lclif->p, PRIV__lclif, parse_CA_CONNECT_INFO_CHANGED, elogin_parse_ping_pre);
+
+ addHookPost(login, client_login, elogin_client_login_post);
}
HPExport void server_preinit (void)
diff --git a/src/elogin/login.c b/src/elogin/login.c
index 0075f4b..854ba97 100644
--- a/src/elogin/login.c
+++ b/src/elogin/login.c
@@ -18,12 +18,13 @@
#include "elogin/md5calc.h"
-bool elogin_check_password(const char* md5key __attribute__ ((unused)),
- int *passwdenc __attribute__ ((unused)),
- const char* passwd,
- const char* refpass)
+bool elogin_check_password_pre(const char **md5key __attribute__ ((unused)),
+ int *passwdenc __attribute__ ((unused)),
+ const char **passwdPtr,
+ const char **refpassPtr)
{
- if (!strcmp(passwd, refpass) || pass_ok(passwd, refpass))
+ if (!strcmp(*passwdPtr, *refpassPtr) ||
+ pass_ok(*passwdPtr, *refpassPtr))
{
hookStop();
return 1;
diff --git a/src/elogin/login.h b/src/elogin/login.h
index 2e76e53..4f2f8c1 100644
--- a/src/elogin/login.h
+++ b/src/elogin/login.h
@@ -4,6 +4,9 @@
#ifndef EVOL_LOGIN_LOGIN
#define EVOL_LOGIN_LOGIN
-bool elogin_check_password(const char* md5key, int *passwdenc, const char* passwd, const char* refpass);
+bool elogin_check_password_pre(const char **md5key,
+ int *passwdenc,
+ const char **passwdPtr,
+ const char **refpassPtr);
#endif // EVOL_LOGIN_SEND
diff --git a/src/elogin/parse.c b/src/elogin/parse.c
index d17e325..3d8a326 100644
--- a/src/elogin/parse.c
+++ b/src/elogin/parse.c
@@ -44,8 +44,8 @@ void login_parse_version(int fd)
send_server_version(fd);
}
-int elogin_client_login_pre(int *fdPtr,
- struct login_session_data* sd __attribute__ ((unused)))
+bool elogin_client_login_pre(int *fdPtr,
+ struct login_session_data **sdPtr __attribute__ ((unused)))
{
int fd = *fdPtr;
uint16 command = RFIFOW(fd,0);
@@ -53,7 +53,7 @@ int elogin_client_login_pre(int *fdPtr,
{
lclif->login_error(fd, 3);
hookStop();
- return 1;
+ return true;
}
char username[NAME_LENGTH];
safestrncpy(username, RFIFOP(fd, 6), NAME_LENGTH);
@@ -62,25 +62,26 @@ int elogin_client_login_pre(int *fdPtr,
{
lclif->login_error(fd, 5);
hookStop();
- return 1;
+ return true;
}
else if (len >= 2 && username[len - 2] == '_' && memchr("FfMm", username[len - 1], 4))
{
lclif->login_error(fd, 3);
hookStop();
- return 1;
+ return true;
}
short *ptr = (short*)RFIFOP(fd, 2);
if (*ptr == 20)
*ptr = clientVersion;
- return 0;
+ return false;
}
-int elogin_client_login_post(int retVal, int *fdPtr,
- struct login_session_data* sd)
+bool elogin_client_login_post(bool retVal,
+ int fd,
+ struct login_session_data* sd)
{
- sd = (struct login_session_data*)sockt->session[*fdPtr]->session_data;
+ sd = (struct login_session_data*)sockt->session[fd]->session_data;
if (sd)
sd->version = clientVersion;
return retVal;
@@ -156,19 +157,21 @@ void elogin_parse_client_login2(int fd)
return;
}
-void elogin_parse_ping(int *fd, struct login_session_data* sd)
+enum parsefunc_rcode elogin_parse_ping_pre(int *fd,
+ struct login_session_data **sdPtr)
{
+ struct login_session_data *sd = *sdPtr;
RFIFOSKIP(*fd, 26);
if (!sd)
{
hookStop();
- return;
+ return PACKET_VALID;
}
struct online_login_data* data = (struct online_login_data*)idb_get(login->online_db, sd->account_id);
if (data == NULL)
{
hookStop();
- return;
+ return PACKET_VALID;
}
if (data->waiting_disconnect != INVALID_TIMER)
{
@@ -176,6 +179,7 @@ void elogin_parse_ping(int *fd, struct login_session_data* sd)
data->waiting_disconnect = timer->add(timer->gettick() + 30000, login->waiting_disconnect_timer, sd->account_id, 0);
}
hookStop();
+ return PACKET_VALID;
}
void elogin_parse_change_paassword(int fd)
diff --git a/src/elogin/parse.h b/src/elogin/parse.h
index 97f66d4..07d2a3d 100644
--- a/src/elogin/parse.h
+++ b/src/elogin/parse.h
@@ -5,10 +5,14 @@
#define EVOL_LOGIN_PARSE
void login_parse_version(int fd);
-int elogin_client_login_pre(int *fd, struct login_session_data* sd);
-int elogin_client_login_post(int retVal, int *fd, struct login_session_data* sd);
+bool elogin_client_login_pre(int *fd,
+ struct login_session_data **sdPtr);
+bool elogin_client_login_post(bool retVal,
+ int fd,
+ struct login_session_data *sd);
void elogin_parse_client_login2(int fd);
-void elogin_parse_ping(int *fd, struct login_session_data* sd);
+enum parsefunc_rcode elogin_parse_ping_pre(int *fd,
+ struct login_session_data **sdPtr);
void elogin_parse_change_paassword(int fd);
#endif // EVOL_LOGIN_PARSE