diff options
Diffstat (limited to 'src/char/pincode.c')
-rw-r--r-- | src/char/pincode.c | 106 |
1 files changed, 69 insertions, 37 deletions
diff --git a/src/char/pincode.c b/src/char/pincode.c index 2b59ec326..5a7eb1cab 100644 --- a/src/char/pincode.c +++ b/src/char/pincode.c @@ -37,10 +37,10 @@ #include <stdio.h> #include <stdlib.h> -struct pincode_interface pincode_s; +static struct pincode_interface pincode_s; struct pincode_interface *pincode; -void pincode_handle (int fd, struct char_session_data* sd) +static void pincode_handle(int fd, struct char_session_data *sd) { struct online_char_data* character; @@ -72,7 +72,7 @@ void pincode_handle (int fd, struct char_session_data* sd) character->pincode_enable = -1; } -void pincode_check(int fd, struct char_session_data* sd) +static void pincode_check(int fd, struct char_session_data *sd) { char pin[5] = "\0\0\0\0"; @@ -95,17 +95,21 @@ void pincode_check(int fd, struct char_session_data* sd) character->pincode_enable = pincode->charselect * 2; pincode->loginstate(fd, sd, PINCODE_LOGIN_OK); } else { +#if PACKETVER_MAIN_NUM >= 20180124 || PACKETVER_RE_NUM >= 20180124 || PACKETVER_ZERO_NUM >= 20180131 + pincode->loginstate2(fd, sd, PINCODE_LOGIN_WRONG, PINCODE_LOGIN_FLAG_WRONG); +#else pincode->loginstate(fd, sd, PINCODE_LOGIN_WRONG); +#endif } } /** -* Check if this pincode is blacklisted or not -* -* @param (const char *) pin The pin to be verified -* @return bool -*/ -bool pincode_isBlacklisted(const char *pin) + * Check if this pincode is blacklisted or not + * + * @param (const char *) pin The pin to be verified + * @return bool + */ +static bool pincode_isBlacklisted(const char *pin) { int i; @@ -120,7 +124,7 @@ bool pincode_isBlacklisted(const char *pin) return false; } -int pincode_compare(int fd, struct char_session_data* sd, char* pin) +static int pincode_compare(int fd, struct char_session_data *sd, char *pin) { nullpo_ret(sd); nullpo_ret(pin); @@ -138,7 +142,7 @@ int pincode_compare(int fd, struct char_session_data* sd, char* pin) } } -void pincode_change(int fd, struct char_session_data* sd) +static void pincode_change(int fd, struct char_session_data *sd) { char oldpin[5] = "\0\0\0\0", newpin[5] = "\0\0\0\0"; @@ -161,16 +165,16 @@ void pincode_change(int fd, struct char_session_data* sd) if (pincode->check_blacklist && pincode->isBlacklisted(newpin)) { pincode->editstate(fd, sd, PINCODE_EDIT_RESTRICT_PW); - } else { - pincode->update(sd->account_id, newpin); - safestrncpy(sd->pincode, newpin, sizeof(sd->pincode)); - pincode->editstate(fd, sd, PINCODE_EDIT_SUCCESS); + return; } + pincode->update(sd->account_id, newpin); + safestrncpy(sd->pincode, newpin, sizeof(sd->pincode)); + pincode->editstate(fd, sd, PINCODE_EDIT_SUCCESS); pincode->loginstate(fd, sd, PINCODE_LOGIN_ASK); } -void pincode_setnew(int fd, struct char_session_data* sd) +static void pincode_setnew(int fd, struct char_session_data *sd) { char newpin[5] = "\0\0\0\0"; @@ -190,16 +194,17 @@ void pincode_setnew(int fd, struct char_session_data* sd) pincode->update(sd->account_id, newpin); safestrncpy(sd->pincode, newpin, sizeof(sd->pincode)); pincode->makestate(fd, sd, PINCODE_MAKE_SUCCESS); + pincode->loginstate(fd, sd, PINCODE_LOGIN_ASK); } /** -* Send state of making new pincode -* -* @param[in] fd -* @param[in, out] sd Session Data -* @param[in] state Pincode Edit State -*/ -void pincode_makestate(int fd, struct char_session_data *sd, enum pincode_make_response state) + * Send state of making new pincode + * + * @param[in] fd + * @param[in, out] sd Session Data + * @param[in] state Pincode Edit State + */ +static void pincode_makestate(int fd, struct char_session_data *sd, enum pincode_make_response state) { nullpo_retv(sd); @@ -211,13 +216,13 @@ void pincode_makestate(int fd, struct char_session_data *sd, enum pincode_make_r } /** -* Send state of editing pincode -* -* @param[in] fd -* @param[in, out] sd Session Data -* @param[in] state Pincode Edit State -*/ -void pincode_editstate(int fd, struct char_session_data *sd, enum pincode_edit_response state) + * Send state of editing pincode + * + * @param[in] fd + * @param[in, out] sd Session Data + * @param[in] state Pincode Edit State + */ +static void pincode_editstate(int fd, struct char_session_data *sd, enum pincode_edit_response state) { nullpo_retv(sd); @@ -237,7 +242,7 @@ void pincode_editstate(int fd, struct char_session_data *sd, enum pincode_edit_r // 6 = client shows msgstr(1897) Unable to use your KSSN number // 7 = char select window shows a button - client sends 0x8c5 // 8 = pincode was incorrect -void pincode_loginstate(int fd, struct char_session_data* sd, enum pincode_login_response state) +static void pincode_loginstate(int fd, struct char_session_data *sd, enum pincode_login_response state) { nullpo_retv(sd); @@ -249,7 +254,33 @@ void pincode_loginstate(int fd, struct char_session_data* sd, enum pincode_login WFIFOSET(fd, 12); } -void pincode_notifyLoginPinUpdate(int account_id, char* pin) +// 0 = pin is correct +// 1 = ask for pin - client sends 0x8b8 +// 2 = create new pin - client sends 0x8ba +// 3 = pin must be changed - client 0x8be +// 4 = create new pin ?? - client sends 0x8ba +// 5 = client shows msgstr(1896) +// 6 = client shows msgstr(1897) Unable to use your KSSN number +// 7 = char select window shows a button - client sends 0x8c5 +// 8 = pincode was incorrect +// [4144] pincode_loginstate2 can replace pincode_loginstate, +// but kro using pincode_loginstate2 only for send wrong pin error or locked after 3 pins wrong +static void pincode_loginstate2(int fd, struct char_session_data *sd, enum pincode_login_response state, enum pincode_login_response2 flag) +{ +#if PACKETVER_MAIN_NUM >= 20180124 || PACKETVER_RE_NUM >= 20180124 || PACKETVER_ZERO_NUM >= 20180131 + nullpo_retv(sd); + + WFIFOHEAD(fd, 13); + WFIFOW(fd, 0) = 0xae9; + WFIFOL(fd, 2) = sd->pincode_seed = rnd() % 0xFFFF; + WFIFOL(fd, 6) = sd->account_id; + WFIFOW(fd, 10) = state; + WFIFOW(fd, 12) = flag; + WFIFOSET(fd, 13); +#endif +} + +static void pincode_notifyLoginPinUpdate(int account_id, char *pin) { nullpo_retv(pin); @@ -261,7 +292,7 @@ void pincode_notifyLoginPinUpdate(int account_id, char* pin) WFIFOSET(chr->login_fd, 11); } -void pincode_notifyLoginPinError(int account_id) +static void pincode_notifyLoginPinError(int account_id) { WFIFOHEAD(chr->login_fd, 6); WFIFOW(chr->login_fd, 0) = 0x2739; @@ -269,7 +300,7 @@ void pincode_notifyLoginPinError(int account_id) WFIFOSET(chr->login_fd, 6); } -void pincode_decrypt(unsigned int userSeed, char* pin) +static void pincode_decrypt(unsigned int userSeed, char *pin) { int i; char tab[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; @@ -306,7 +337,7 @@ void pincode_decrypt(unsigned int userSeed, char* pin) * * @retval false in case of error. */ -bool pincode_config_read(const char *filename, const struct config_t *config, bool imported) +static bool pincode_config_read(const char *filename, const struct config_t *config, bool imported) { const struct config_setting_t *setting = NULL; const struct config_setting_t *temp = NULL; @@ -395,12 +426,12 @@ bool pincode_config_read(const char *filename, const struct config_t *config, bo return true; } -void do_pincode_init(void) +static void do_pincode_init(void) { VECTOR_INIT(pincode->blacklist); } -void do_pincode_final(void) +static void do_pincode_final(void) { while (VECTOR_LENGTH(pincode->blacklist) > 0) { aFree(VECTOR_POP(pincode->blacklist)); @@ -430,6 +461,7 @@ void pincode_defaults(void) pincode->makestate = pincode_makestate; pincode->editstate = pincode_editstate; pincode->loginstate = pincode_loginstate; + pincode->loginstate2 = pincode_loginstate2; pincode->setnew = pincode_setnew; pincode->change = pincode_change; pincode->isBlacklisted = pincode_isBlacklisted; |