Fixed protocol issue: Avatar data packets did not have any padding. Increased maximum packet size.
This commit is contained in:
@@ -26,7 +26,7 @@ PokerTH general message format:
|
||||
| +-------------------------------+
|
||||
/ | padding |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
Minimum length is 8. Maximum length is 264.
|
||||
Minimum length is 8. Maximum length is 268.
|
||||
|
||||
|
||||
Client Request: Init
|
||||
@@ -135,9 +135,12 @@ Server/Client Reply: Avatar File
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
| Request ID |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
| Avatar Block Size | Reserved |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
| |
|
||||
\ Avatar File Data (up to 256 Bytes) /
|
||||
| +
|
||||
| +-------------------------------+
|
||||
/ | padding |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
[Additional blocks will be sent if data is more than 256 Bytes.]
|
||||
|
||||
|
||||
@@ -165,6 +165,8 @@ struct GCC_PACKED NetPacketAvatarFileData
|
||||
{
|
||||
NetPacketHeader head;
|
||||
u_int32_t requestId;
|
||||
u_int16_t blockSize;
|
||||
u_int16_t reserved;
|
||||
};
|
||||
|
||||
struct GCC_PACKED NetPacketAvatarEndData
|
||||
@@ -1483,11 +1485,12 @@ NetPacketAvatarFile::SetData(const NetPacketAvatarFile::Data &inData)
|
||||
|
||||
Resize((u_int16_t)
|
||||
(sizeof(NetPacketAvatarFileData)
|
||||
+ fileDataSize));
|
||||
+ ADD_PADDING(fileDataSize)));
|
||||
|
||||
NetPacketAvatarFileData *tmpData = (NetPacketAvatarFileData *)GetRawData();
|
||||
|
||||
tmpData->requestId = htonl(inData.requestId);
|
||||
tmpData->blockSize = htons(fileDataSize);
|
||||
|
||||
char *avatarDataPtr = (char *)tmpData + sizeof(NetPacketAvatarFileData);
|
||||
memcpy(avatarDataPtr, &inData.fileData[0], fileDataSize);
|
||||
@@ -1502,8 +1505,8 @@ NetPacketAvatarFile::GetData(NetPacketAvatarFile::Data &outData) const
|
||||
NetPacketAvatarFileData *tmpData = (NetPacketAvatarFileData *)GetRawData();
|
||||
|
||||
outData.requestId = ntohl(tmpData->requestId);
|
||||
int fileDataSize = ntohs(tmpData->blockSize);
|
||||
|
||||
int fileDataSize = GetLen() - sizeof(NetPacketAvatarFileData);
|
||||
char *avatarDataPtr = (char *)tmpData + sizeof(NetPacketAvatarFileData);
|
||||
outData.fileData.resize(fileDataSize);
|
||||
memcpy(&outData.fileData[0], avatarDataPtr, fileDataSize);
|
||||
@@ -1516,9 +1519,23 @@ NetPacketAvatarFile::ToNetPacketAvatarFile() const
|
||||
}
|
||||
|
||||
void
|
||||
NetPacketAvatarFile::InternalCheck(const NetPacketHeader*) const
|
||||
NetPacketAvatarFile::InternalCheck(const NetPacketHeader *data) const
|
||||
{
|
||||
// Nothing to do.
|
||||
u_int16_t dataLen = ntohs(data->length);
|
||||
NetPacketAvatarFileData *tmpData = (NetPacketAvatarFileData *)data;
|
||||
int fileDataSize = ntohs(tmpData->blockSize);
|
||||
|
||||
// Exact checking of dynamic packet size.
|
||||
if (dataLen !=
|
||||
sizeof(NetPacketAvatarFileData)
|
||||
+ ADD_PADDING(fileDataSize))
|
||||
{
|
||||
throw NetException(ERR_SOCK_INVALID_PACKET, 0);
|
||||
}
|
||||
if (!fileDataSize || fileDataSize > MAX_FILE_DATA_SIZE)
|
||||
{
|
||||
throw NetException(ERR_SOCK_INVALID_PACKET, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@
|
||||
#define NET_VERSION_MINOR 0
|
||||
|
||||
#define MIN_PACKET_SIZE 4
|
||||
#define MAX_PACKET_SIZE 264
|
||||
#define MAX_PACKET_SIZE 268
|
||||
#define MAX_NAME_SIZE 64
|
||||
#define MAX_PASSWORD_SIZE 64
|
||||
#define MAX_NUM_MANUAL_BLINDS 30
|
||||
|
||||
Reference in New Issue
Block a user