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
+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);
}
}
//-----------------------------------------------------------------------------