mirror of
https://github.com/edubart/otclient.git
synced 2025-10-14 11:34:54 +02:00
Merge branch 'master' of github.com:edubart/otclient
This commit is contained in:
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
void ProtocolGame::parseMessage(InputMessage& msg)
|
||||
{
|
||||
while(!msg.end()) {
|
||||
while(!msg.eof()) {
|
||||
uint8 opt = msg.getU8();
|
||||
switch(opt) {
|
||||
case 0x0A:
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user