diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-05-02 19:06:39 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-05-02 19:06:39 +0300 |
commit | 1fc6228436311da0d70f14176fe47f3e37f6faa6 (patch) | |
tree | 9434c90ab44ac55200daa199f524fa11f3168678 /src/elogin | |
parent | 00d1b8bf9fc3648730904b6f86696417f4445037 (diff) | |
download | plugin-1fc6228436311da0d70f14176fe47f3e37f6faa6.tar.gz plugin-1fc6228436311da0d70f14176fe47f3e37f6faa6.tar.bz2 plugin-1fc6228436311da0d70f14176fe47f3e37f6faa6.tar.xz plugin-1fc6228436311da0d70f14176fe47f3e37f6faa6.zip |
Update function hook prototypes for support new hercules.
Diffstat (limited to 'src/elogin')
-rw-r--r-- | src/elogin/init.c | 16 | ||||
-rw-r--r-- | src/elogin/login.c | 11 | ||||
-rw-r--r-- | src/elogin/login.h | 5 | ||||
-rw-r--r-- | src/elogin/parse.c | 28 | ||||
-rw-r--r-- | src/elogin/parse.h | 10 |
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 |