static PacketHandlerState barrackHandlerLoginByPassport( Worker *self, Session *session, uint8_t *packet, size_t packetSize, zmsg_t *reply) { #pragma pack(push, 1) struct { ServerPacketHeader header; uint32_t unk1; uint8_t unk2; // 08 uint16_t unk3; // 0110 uint8_t passport[1011]; uint32_t unk4; uint16_t unk5; uint64_t clientId; uint32_t clientId2; } *clientPacket = (void *) packet; #pragma pack(pop) CHECK_CLIENT_PACKET_SIZE(*clientPacket, packetSize, CB_LOGIN_BY_PASSPORT); // authenticate here // TODO // authentication OK! session->socket.authenticated = true; // update the session // gives a random account session->socket.accountId = r1emuGenerateRandom64(&self->seed); accountSessionInit(&session->game.accountSession, session->game.accountSession.login, session->socket.sessionKey, ACCOUNT_SESSION_PRIVILEGES_ADMIN); snprintf(session->game.accountSession.login, sizeof(session->game.accountSession.login), "%llX", session->socket.accountId); // ================================== info("Account %s generated !", session->game.accountSession.login); barrackBuilderLoginOk( session->socket.accountId, session->game.accountSession.login, "*0FC621B82495C18DEC8D8D956C82297BEAAAA858", session->game.accountSession.privilege, reply ); return PACKET_HANDLER_UPDATE_SESSION; }
static PacketHandlerState barrackHandlerLogin( Worker *self, Session *session, uint8_t *packet, size_t packetSize, zmsg_t *reply) { #pragma pack(push, 1) struct { uint8_t login[ACCOUNT_SESSION_LOGIN_MAXSIZE]; uint8_t md5Password[17]; uint8_t unk1[5]; } *clientPacket = (void *) packet; #pragma pack(pop) CHECK_CLIENT_PACKET_SIZE(*clientPacket, packetSize, CB_LOGIN); // authenticate here // TODO // authentication OK! session->socket.authenticated = true; // update the session // gives a fake admin account session->socket.accountId = r1emuGenerateRandom64(&self->seed); accountSessionInit(&session->game.accountSession, clientPacket->login, session->socket.sessionKey, ACCOUNT_SESSION_PRIVILEGES_ADMIN); info("AccountID %llx generated !", session->socket.accountId); barrackBuilderLoginOk( session->socket.accountId, session->game.accountSession.login, "*0FC621B82495C18DEC8D8D956C82297BEAAAA858", session->game.accountSession.privilege, reply ); return PACKET_HANDLER_UPDATE_SESSION; }
static PacketHandlerState barrackHandlerLogin( Worker *self, Session *session, uint8_t *packet, size_t packetSize, zmsg_t *reply) { PacketHandlerState status = PACKET_HANDLER_ERROR; #pragma pack(push, 1) struct { uint8_t accountName[ACCOUNT_SESSION_ACCOUNT_NAME_MAXSIZE]; uint8_t md5Password[17]; uint8_t unk1[5]; // Game version? } *clientPacket = (void *) packet; #pragma pack(pop) CHECK_CLIENT_PACKET_SIZE(*clientPacket, packetSize, CB_LOGIN); // Get accountSession from database AccountSession accountSession; bool goodCredentials = false; if (!(mySqlGetAccountData( self->sqlConn, clientPacket->accountName, clientPacket->md5Password, &accountSession, &goodCredentials))) { error("Cannot get SQL account data."); goto cleanup; } // Check if user/pass incorrect if (!goodCredentials) { barrackBuilderMessage(BC_MESSAGE_USER_PASS_INCORRECT_1, "", reply); status = PACKET_HANDLER_OK; goto cleanup; } // Check if user is banned if (accountSession.isBanned) { barrackBuilderMessage(BC_MESSAGE_ACCOUNT_BLOCKED_2, "", reply); status = PACKET_HANDLER_OK; goto cleanup; } // Check if user is already logged-in // TODO // update the session session->socket.authenticated = true; session->socket.accountId = accountSession.accountId; session->game.accountSession = accountSession; info("AccountID %llx (%s) connected !", session->socket.accountId, session->game.accountSession.accountName); barrackBuilderLoginOk( session->socket.accountId, session->game.accountSession.accountName, "*0FC621B82495C18DEC8D8D956C82297BEAAAA858", session->game.accountSession.privilege, reply ); status = PACKET_HANDLER_UPDATE_SESSION; cleanup: return status; }