diff --git a/modules/mainmenu/entergame.lua b/modules/mainmenu/entergame.lua index 0ef57768..f85f8572 100644 --- a/modules/mainmenu/entergame.lua +++ b/modules/mainmenu/entergame.lua @@ -1,55 +1,36 @@ function EnterGame_connectToLoginServer() - -- create login protocol local protocolLogin = ProtocolLogin.create() - -- used to recreate enter game window local recreateEnterGame = function() - loadUI("/mainmenu/ui/entergamewindow.otui") + rootWidget:addChild(loadUI("/mainmenu/ui/entergamewindow.otui")) end - -- display loading message box local loadBox = displayCancelBox("Please wait", "Connecting..") - -- cancel loading callback loadBox.onCancel = function(msgbox) -- cancel protocol and reacreate enter game window - protocolLogin:cancel() + protocolLogin:cancelLogin() recreateEnterGame() end - -- error callback protocolLogin.onError = function(protocol, error) - -- destroy loading message box loadBox:destroy() - - -- display error message local errorBox = displayErrorBox("Login Error", error) - - -- cancel protocol and reacreate enter game window - protocol:cancel() errorBox.onOk = recreateEnterGame end - -- motd callback protocolLogin.onMotd = function(protocol, motd) - -- destroy loading message box loadBox:destroy() - - -- display motd local motdNumber = string.sub(motd, 0, string.find(motd, "\n")) local motdText = string.sub(motd, string.find(motd, "\n") + 1, string.len(motd)) - local motdBox = displayInfoBox("Message of the day", motdText) - - -- hide main menu + displayInfoBox("Message of the day", motdText) mainMenu.visible = false end - -- get account and password then login local enterGameWindow = rootWidget:getChild("enterGameWindow") local account = enterGameWindow:getChild("accountNameLineEdit").text local password = enterGameWindow:getChild("accountPasswordLineEdit").text protocolLogin:login(account, password) - -- destroy enter game window enterGameWindow:destroy() end diff --git a/src/framework/net/inputmessage.cpp b/src/framework/net/inputmessage.cpp index 87733b58..97362731 100644 --- a/src/framework/net/inputmessage.cpp +++ b/src/framework/net/inputmessage.cpp @@ -11,45 +11,45 @@ void InputMessage::reset() m_messageSize = 2; } -uint8 InputMessage::getU8(bool blockReadPos) +uint8 InputMessage::getU8(bool peek) { assert(canRead(1)); uint8 v = m_buffer[m_readPos]; - if(!blockReadPos) + if(!peek) m_readPos += 1; return v; } -uint16 InputMessage::getU16(bool blockReadPos) +uint16 InputMessage::getU16(bool peek) { assert(canRead(2)); uint16 v = *(uint16_t*)(m_buffer + m_readPos); - if(!blockReadPos) + if(!peek) m_readPos += 2; return v; } -uint32 InputMessage::getU32(bool blockReadPos) +uint32 InputMessage::getU32(bool peek) { assert(canRead(4)); uint32 v = *(uint32*)(m_buffer + m_readPos); - if(!blockReadPos) + if(!peek) m_readPos += 4; return v; } -uint64 InputMessage::getU64(bool blockReadPos) +uint64 InputMessage::getU64(bool peek) { assert(canRead(8)); uint64 v = *(uint64*)(m_buffer + m_readPos); - if(!blockReadPos) + if(!peek) m_readPos += 8; return v; diff --git a/src/framework/net/inputmessage.h b/src/framework/net/inputmessage.h index bb9eea20..82991e04 100644 --- a/src/framework/net/inputmessage.h +++ b/src/framework/net/inputmessage.h @@ -20,17 +20,17 @@ public: void reset(); - uint8 getU8(bool blockReadPos = false); - uint16 getU16(bool blockReadPos = false); - uint32 getU32(bool blockReadPos = false); - uint64 getU64(bool blockReadPos = false); + uint8 getU8(bool peek = false); + uint16 getU16(bool peek = false); + uint32 getU32(bool peek = false); + uint64 getU64(bool peek = false); std::string getString(); void skipBytes(uint16 bytes) { m_readPos += bytes; } uint8* getBuffer() { return m_buffer; } uint16 getMessageSize() { return m_messageSize; } void setMessageSize(uint16 messageSize) { m_messageSize = messageSize; } - bool end() { return m_readPos == m_messageSize; } + bool eof() { return m_readPos == m_messageSize; } private: bool canRead(int bytes); diff --git a/src/otclient/net/protocolgameparse.cpp b/src/otclient/net/protocolgameparse.cpp index 53515c2a..04a4a185 100644 --- a/src/otclient/net/protocolgameparse.cpp +++ b/src/otclient/net/protocolgameparse.cpp @@ -8,7 +8,7 @@ void ProtocolGame::parseMessage(InputMessage& msg) { - while(!msg.end()) { + while(!msg.eof()) { uint8 opt = msg.getU8(); switch(opt) { case 0x0A: diff --git a/src/otclient/net/protocolgamesend.cpp b/src/otclient/net/protocolgamesend.cpp index 8021536f..6b5e1a0e 100644 --- a/src/otclient/net/protocolgamesend.cpp +++ b/src/otclient/net/protocolgamesend.cpp @@ -26,7 +26,7 @@ void ProtocolGame::sendLoginPacket(uint32 timestamp, uint8 unknown) oMsg.addU32(timestamp); oMsg.addU8(unknown); - // fill the rest with zeros + // complete the 128 bytes for rsa encryption with zeros oMsg.addPaddingBytes(128 - (29 + m_accountName.length() + m_characterName.length() + m_accountPassword.length())); // encrypt with RSA diff --git a/src/otclient/net/protocollogin.cpp b/src/otclient/net/protocollogin.cpp index 59441fe3..2f40e69c 100644 --- a/src/otclient/net/protocollogin.cpp +++ b/src/otclient/net/protocollogin.cpp @@ -36,7 +36,7 @@ void ProtocolLogin::onConnect() void ProtocolLogin::onRecv(InputMessage& inputMessage) { - while(!inputMessage.end()) { + while(!inputMessage.eof()) { uint8 opt = inputMessage.getU8(); switch(opt) { case 0x0A: @@ -65,30 +65,29 @@ void ProtocolLogin::sendLoginPacket() { OutputMessage oMsg; - oMsg.addU8(0x01); // Protocol id - oMsg.addU16(0x02); // OS - oMsg.addU16(862); // Client version + oMsg.addU8(0x01); // protocol id + oMsg.addU16(0x02); // os + oMsg.addU16(862); // client version - oMsg.addU32(0x4E12DAFF); // Data Signature - oMsg.addU32(0x4E12DB27); // Sprite Signature - oMsg.addU32(0x4E119CBF); // Picture Signature + oMsg.addU32(0x4E12DAFF); // data signature + oMsg.addU32(0x4E12DB27); // sprite signature + oMsg.addU32(0x4E119CBF); // pic signature - oMsg.addU8(0); // First RSA byte must be 0x00 // 1 + oMsg.addU8(0); // first RSA byte must be 0 - // Add xtea key + // xtea key generateXteaKey(); - oMsg.addU32(m_xteaKey[0]); // 5 - oMsg.addU32(m_xteaKey[1]); // 9 - oMsg.addU32(m_xteaKey[2]); // 13 - oMsg.addU32(m_xteaKey[3]); // 17 + oMsg.addU32(m_xteaKey[0]); + oMsg.addU32(m_xteaKey[1]); + oMsg.addU32(m_xteaKey[2]); + oMsg.addU32(m_xteaKey[3]); - oMsg.addString(m_accountName); // Account Name // 19 - oMsg.addString(m_accountPassword); // Password // 21 + oMsg.addString(m_accountName); + oMsg.addString(m_accountPassword); - // Packet data must have since byte 0, start, 128 bytes + // complete the 128 bytes for rsa encryption with zeros oMsg.addPaddingBytes(128 - (21 + m_accountName.length() + m_accountPassword.length())); - // Encrypt msg with RSA if(!Rsa::encrypt((char*)oMsg.getBuffer() + 6 + oMsg.getMessageSize() - 128, 128, OTSERV_PUBLIC_RSA)) return;