--- core/Sys/plUuid.cpp.orig +++ core/Sys/plUuid.cpp @@ -69,6 +69,9 @@ void plUuid::read(const unsigned char* buffer) { fData1 = *(unsigned int* )(buffer ); fData2 = *(unsigned short*)(buffer + 4); fData3 = *(unsigned short*)(buffer + 6); + fData1 = LESWAP32(fData1); + fData2 = LESWAP16(fData2); + fData3 = LESWAP16(fData3); memcpy(fData4, buffer + 8, 8); } @@ -80,9 +83,9 @@ void plUuid::write(hsStream* S) { } void plUuid::write(unsigned char* buffer) const { - *(unsigned int* )(buffer ) = fData1; - *(unsigned short*)(buffer + 4) = fData2; - *(unsigned short*)(buffer + 6) = fData3; + *(unsigned int* )(buffer ) = LESWAP32(fData1); + *(unsigned short*)(buffer + 4) = LESWAP16(fData2); + *(unsigned short*)(buffer + 6) = LESWAP16(fData3); memcpy(buffer + 8, fData4, 8); } --- net/auth/pnAuthClient.cpp.orig 2011-11-08 10:52:52.000000000 -0600 +++ net/auth/pnAuthClient.cpp 2011-11-08 10:52:52.000000000 -0600 @@ -64,6 +64,7 @@ uint16_t msgId; sock->recv(&msgId, sizeof(uint16_t)); + msgId = LESWAP16(msgId); const pnNetMsg* msgDesc = GET_Auth2Cli(msgId); if (msgDesc == NULL) { plDebug::Error("Got invalid message ID (%u)", msgId); @@ -383,13 +384,13 @@ uint8_t connectHeader[51]; // ConnectHeader + AuthConnectHeader /* Begin ConnectHeader */ *(uint8_t* )(connectHeader ) = kConnTypeCliToAuth; - *(uint16_t*)(connectHeader + 1) = 31; - *(uint32_t*)(connectHeader + 3) = fBuildId; - *(uint32_t*)(connectHeader + 7) = fBuildType; - *(uint32_t*)(connectHeader + 11) = fBranchId; + *(uint16_t*)(connectHeader + 1) = LESWAP16(31); + *(uint32_t*)(connectHeader + 3) = LESWAP32(fBuildId); + *(uint32_t*)(connectHeader + 7) = LESWAP32(fBuildType); + *(uint32_t*)(connectHeader + 11) = LESWAP32(fBranchId); fProductId.write(connectHeader + 15); /* Begin AuthConnectHeader */ - *(uint32_t*)(connectHeader + 31) = 20; + *(uint32_t*)(connectHeader + 31) = LESWAP32(20); memset(connectHeader + 35, 0, 16); fSock->send(connectHeader, 51); @@ -437,6 +438,7 @@ } else if (msg == kNetCliSrv2CliError) { uint32_t errorCode; fSock->recv(&errorCode, sizeof(uint32_t)); + errorCode = LESWAP32(errorCode); delete fSock; fSock = NULL; plDebug::Error("Error connecting to Auth server: %s", --- net/pnSocket.cpp.orig +++ net/pnSocket.cpp @@ -338,11 +338,11 @@ static void RecvBasic(pnSocket* sock, msgparm_t& data, } else if (size == 2) { uint16_t v; sock->recv(&v, sizeof(uint16_t)); - data.fUint = v; + data.fUint = LESWAP16(v); } else if (size == 4) { uint32_t v; sock->recv(&v, sizeof(uint32_t)); - data.fUint = v; + data.fUint = LESWAP32(v); } #ifdef COMMDEBUG @@ -385,10 +385,10 @@ static void SendBasic(unsigned char*& buf, const msgparm_t& data, *(uint8_t*)buf = (uint8_t)data.fUint; buf += sizeof(uint8_t); } else if (size == 2) { - *(uint16_t*)buf = (uint16_t)data.fUint; + *(uint16_t*)buf = (uint16_t)LESWAP16(data.fUint); buf += sizeof(uint16_t); } else if (size == 4) { - *(uint32_t*)buf = data.fUint; + *(uint32_t*)buf = LESWAP32(data.fUint); buf += sizeof(uint32_t); } @@ -439,7 +439,7 @@ bool pnSocket::sendMsg(const msgparm_t* data, const pnNetMsg* msg) size_t bufSize = sizeof(uint16_t) + NCMessageSize(data, msg); unsigned char* buffer = new unsigned char[bufSize]; unsigned char* bp = buffer; - *(uint16_t*)bp = msg->fMsgId; + *(uint16_t*)bp = LESWAP16(msg->fMsgId); bp += sizeof(uint16_t); unsigned int size = 0; @@ -454,9 +454,13 @@ bool pnSocket::sendMsg(const msgparm_t* data, const pnNetMsg* msg) case kFieldString: { uint16_t len = plwcslen(data[i].fString); - *(uint16_t*)bp = len; + *(uint16_t*)bp = LESWAP16(len); bp += sizeof(uint16_t); memcpy(bp, data[i].fString, len * sizeof(pl_wchar_t)); +#ifdef WORDS_BIGENDIAN + for (size_t j=0; j Str: %s", plString(data[i].fString, len).cstr()); @@ -466,7 +470,7 @@ bool pnSocket::sendMsg(const msgparm_t* data, const pnNetMsg* msg) case kFieldVarCount: size = field->fSize; count = data[i].fUint; - *(uint32_t*)bp = count; + *(uint32_t*)bp = LESWAP32(count); bp += sizeof(uint32_t); #ifdef COMMDEBUG plDebug::Debug(" -> Count: %d", count); @@ -540,8 +544,13 @@ msgparm_t* pnSocket::recvMsg(const pnNetMsg* msg) { uint16_t len; recv(&len, sizeof(uint16_t)); + len = LESWAP16(len); pl_wchar_t* str = new pl_wchar_t[len + 1]; recv(str, len * sizeof(pl_wchar_t)); +#ifdef WORDS_BIGENDIAN + for (size_t j=0; jfSize; recv(&count, sizeof(uint32_t)); - data[i].fUint = count; + data[i].fUint = LESWAP32(count); #ifdef COMMDEBUG plDebug::Debug(" <- Count: %d", count); #endif --- net/file/pnFileClient.cpp.orig 2011-11-08 10:52:52.000000000 -0600 +++ net/file/pnFileClient.cpp 2011-11-08 10:52:52.000000000 -0600 @@ -115,6 +115,8 @@ sock->recv(&header.fMsgSize, sizeof(header.fMsgSize)); sock->recv(&header.fMsgId, sizeof(header.fMsgId)); + header.fMsgSize = LESWAP32(header.fMsgSize); + header.fMsgId = LESWAP32(header.fMsgId); uint8_t* msgbuf = new uint8_t[header.fMsgSize - 8]; uint32_t read_data = 0; while (read_data < header.fMsgSize - 8) @@ -235,13 +237,13 @@ uint8_t connectHeader[43]; // ConnectHeader + FileConnectHeader /* Begin ConnectHeader */ *(uint8_t* )(connectHeader ) = kConnTypeCliToFile; - *(uint16_t*)(connectHeader + 1) = 31; + *(uint16_t*)(connectHeader + 1) = LESWAP16(31); *(uint32_t*)(connectHeader + 3) = 0; - *(uint32_t*)(connectHeader + 7) = fBuildType; - *(uint32_t*)(connectHeader + 11) = fBranchId; + *(uint32_t*)(connectHeader + 7) = LESWAP32(fBuildType); + *(uint32_t*)(connectHeader + 11) = LESWAP32(fBranchId); fProductId.write(connectHeader + 15); /* Begin FileConnectHeader */ - *(uint32_t*)(connectHeader + 31) = 12; + *(uint32_t*)(connectHeader + 31) = LESWAP32(12); *(uint32_t*)(connectHeader + 35) = 0; *(uint32_t*)(connectHeader + 39) = 0; fSock->send(connectHeader, 43); @@ -265,9 +267,9 @@ void pnFileClient::sendPingRequest(uint32_t pingTimeMs) { uint8_t msgbuf[12]; - *(uint32_t*)(msgbuf ) = 12; // Msg size - *(uint32_t*)(msgbuf + 4) = kCli2File_PingRequest; // Msg ID - *(uint32_t*)(msgbuf + 8) = pingTimeMs; // Ping time + *(uint32_t*)(msgbuf ) = LESWAP32(12); // Msg size + *(uint32_t*)(msgbuf + 4) = LESWAP32(kCli2File_PingRequest); // Msg ID + *(uint32_t*)(msgbuf + 8) = LESWAP32(pingTimeMs); // Ping time fSock->send(msgbuf, 12); } @@ -275,9 +277,9 @@ { uint32_t transId = nextTransId(); uint8_t msgbuf[12]; - *(uint32_t*)(msgbuf ) = 12; // Msg size - *(uint32_t*)(msgbuf + 4) = kCli2File_BuildIdRequest; // Msg ID - *(uint32_t*)(msgbuf + 8) = transId; // Trans ID + *(uint32_t*)(msgbuf ) = LESWAP32(12); // Msg size + *(uint32_t*)(msgbuf + 4) = LESWAP32(kCli2File_BuildIdRequest); // Msg ID + *(uint32_t*)(msgbuf + 8) = LESWAP32(transId); // Trans ID fSock->send(msgbuf, 12); return transId; } @@ -289,12 +291,12 @@ uint32_t transId = nextTransId(); uint8_t msgbuf[536]; - *(uint32_t*)(msgbuf ) = 536; // Msg size - *(uint32_t*)(msgbuf + 4) = kCli2File_ManifestRequest; // Msg ID - *(uint32_t*)(msgbuf + 8) = transId; // Trans ID + *(uint32_t*)(msgbuf ) = LESWAP32(536); // Msg size + *(uint32_t*)(msgbuf + 4) = LESWAP32(kCli2File_ManifestRequest); // Msg ID + *(uint32_t*)(msgbuf + 8) = LESWAP32(transId); // Trans ID memcpy(msgbuf + 12, wgroup.data(), (len >= 260 ? 259 : len) * sizeof(pl_wchar_t)); - *(pl_wchar_t*)(msgbuf + 530) = 0; // Nul terminator - *(uint32_t*)(msgbuf + 532) = buildId; // Build ID + *(pl_wchar_t*)(msgbuf + 530) = 0; // Nul terminator + *(uint32_t*)(msgbuf + 532) = LESWAP32(buildId); // Build ID fSock->send(msgbuf, 536); return transId; } @@ -306,12 +308,12 @@ uint32_t transId = nextTransId(); uint8_t msgbuf[536]; - *(uint32_t*)(msgbuf ) = 536; // Msg size - *(uint32_t*)(msgbuf + 4) = kCli2File_FileDownloadRequest; // Msg ID - *(uint32_t*)(msgbuf + 8) = transId; // Trans ID + *(uint32_t*)(msgbuf ) = LESWAP32(536); // Msg size + *(uint32_t*)(msgbuf + 4) = LESWAP32(kCli2File_FileDownloadRequest); // Msg ID + *(uint32_t*)(msgbuf + 8) = LESWAP32(transId); // Trans ID memcpy(msgbuf + 12, wfilename.data(), (len >= 260 ? 259 : len) * sizeof(pl_wchar_t)); - *(pl_wchar_t*)(msgbuf + 530) = 0; // Nul terminator - *(uint32_t*)(msgbuf + 532) = buildId; // Build ID + *(pl_wchar_t*)(msgbuf + 530) = 0; // Nul terminator + *(uint32_t*)(msgbuf + 532) = LESWAP32(buildId); // Build ID fSock->send(msgbuf, 536); return transId; } @@ -319,20 +321,20 @@ void pnFileClient::sendManifestEntryAck(uint32_t transId, uint32_t readerId) { uint8_t msgbuf[16]; - *(uint32_t*)(msgbuf ) = 16; // Msg size - *(uint32_t*)(msgbuf + 4) = kCli2File_ManifestEntryAck; // Msg ID - *(uint32_t*)(msgbuf + 8) = transId; // Trans ID - *(uint32_t*)(msgbuf + 12) = readerId; // Reader ID + *(uint32_t*)(msgbuf ) = LESWAP32(16); // Msg size + *(uint32_t*)(msgbuf + 4) = LESWAP32(kCli2File_ManifestEntryAck); // Msg ID + *(uint32_t*)(msgbuf + 8) = LESWAP32(transId); // Trans ID + *(uint32_t*)(msgbuf + 12) = LESWAP32(readerId); // Reader ID fSock->send(msgbuf, 16); } void pnFileClient::sendFileDownloadChunkAck(uint32_t transId, uint32_t readerId) { uint8_t msgbuf[16]; - *(uint32_t*)(msgbuf ) = 16; // Msg size - *(uint32_t*)(msgbuf + 4) = kCli2File_FileDownloadChunkAck; // Msg ID - *(uint32_t*)(msgbuf + 8) = transId; // Trans ID - *(uint32_t*)(msgbuf + 12) = readerId; // Reader ID + *(uint32_t*)(msgbuf ) = LESWAP32(16); // Msg size + *(uint32_t*)(msgbuf + 4) = LESWAP32(kCli2File_FileDownloadChunkAck); // Msg ID + *(uint32_t*)(msgbuf + 8) = LESWAP32(transId); // Trans ID + *(uint32_t*)(msgbuf + 12) = LESWAP32(readerId); // Reader ID fSock->send(msgbuf, 16); } --- net/game/pnGameClient.cpp.orig 2011-11-08 10:52:52.000000000 -0600 +++ net/game/pnGameClient.cpp 2011-11-08 10:52:52.000000000 -0600 @@ -35,6 +35,7 @@ uint16_t msgId; sock->recv(&msgId, sizeof(uint16_t)); + msgId = LESWAP16(msgId); const pnNetMsg* msgDesc = GET_Game2Cli(msgId); if (msgDesc == NULL) { plDebug::Error("Got invalid message ID (%u)", msgId); @@ -149,13 +150,13 @@ uint8_t connectHeader[67]; // ConnectHeader + GameConnectHeader /* Begin ConnectHeader */ *(uint8_t* )(connectHeader ) = kConnTypeCliToGame; - *(uint16_t*)(connectHeader + 1) = 31; - *(uint32_t*)(connectHeader + 3) = fBuildId; - *(uint32_t*)(connectHeader + 7) = fBuildType; - *(uint32_t*)(connectHeader + 11) = fBranchId; + *(uint16_t*)(connectHeader + 1) = LESWAP16(31); + *(uint32_t*)(connectHeader + 3) = LESWAP32(fBuildId); + *(uint32_t*)(connectHeader + 7) = LESWAP32(fBuildType); + *(uint32_t*)(connectHeader + 11) = LESWAP32(fBranchId); fProductId.write(connectHeader + 15); /* Begin GameConnectHeader */ - *(uint32_t*)(connectHeader + 31) = 36; + *(uint32_t*)(connectHeader + 31) = LESWAP32(36); fAccountId.write(connectHeader + 35); fAgeId.write(connectHeader + 51); fSock->send(connectHeader, 67); @@ -204,6 +205,7 @@ } else if (msg == kNetCliSrv2CliError) { uint32_t errorCode; fSock->recv(&errorCode, sizeof(uint32_t)); + errorCode = LESWAP32(errorCode); delete fSock; fSock = NULL; plDebug::Error("Error connecting to Game server: %s", --- net/gate/pnGateKeeperClient.cpp.orig 2011-11-08 10:52:52.000000000 -0600 +++ net/gate/pnGateKeeperClient.cpp 2011-11-08 10:52:52.000000000 -0600 @@ -33,6 +33,7 @@ { uint16_t msgId; sock->recv(&msgId, sizeof(uint16_t)); + msgId = LESWAP16(msgId); const pnNetMsg* msgDesc = GET_GateKeeper2Cli(msgId); if (msgDesc == NULL) { plDebug::Error("Got invalid message ID (%u)", msgId); @@ -117,13 +118,13 @@ uint8_t connectHeader[51]; // ConnectHeader + GateKeeperConnectHeader /* Begin ConnectHeader */ *(uint8_t* )(connectHeader ) = kConnTypeCliToGateKeeper; - *(uint16_t*)(connectHeader + 1) = 31; - *(uint32_t*)(connectHeader + 3) = fBuildId; - *(uint32_t*)(connectHeader + 7) = fBuildType; - *(uint32_t*)(connectHeader + 11) = fBranchId; + *(uint16_t*)(connectHeader + 1) = LESWAP16(31); + *(uint32_t*)(connectHeader + 3) = LESWAP32(fBuildId); + *(uint32_t*)(connectHeader + 7) = LESWAP32(fBuildType); + *(uint32_t*)(connectHeader + 11) = LESWAP32(fBranchId); fProductId.write(connectHeader + 15); /* Begin GateKeeperConnectHeader */ - *(uint32_t*)(connectHeader + 31) = 20; + *(uint32_t*)(connectHeader + 31) = LESWAP32(20); memset(connectHeader + 35, 0, 16); fSock->send(connectHeader, 51); @@ -171,6 +172,7 @@ } else if (msg == kNetCliSrv2CliError) { uint32_t errorCode; fSock->recv(&errorCode, sizeof(uint32_t)); + errorCode = LESWAP32(errorCode); delete fSock; fSock = NULL; plDebug::Error("Error connecting to GateKeeper server: %s",