Fixed protocol issue: Avatar data packets did not have any padding. Increased maximum packet size.

This commit is contained in:
lotodore
2007-10-12 15:15:03 +00:00
parent 375ea47778
commit 6cf0d8777a
3 changed files with 27 additions and 7 deletions
+5 -2
View File
@@ -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.]
+21 -4
View File
@@ -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
View File
@@ -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