The readBuffer now checks if the whole packet has arrived before attempting to parse it.
This commit is contained in:
@@ -54,8 +54,10 @@ void Packet::WriteString(const std::string& str)
|
|||||||
}
|
}
|
||||||
resizeData();
|
resizeData();
|
||||||
}
|
}
|
||||||
memcpy(m_Data + m_Offset, str.data(), sizeOfString * sizeof(char));
|
memcpy(m_Data + m_Offset, str.data(), str.size() * sizeof(char));
|
||||||
m_Offset += sizeOfString * sizeof(char);
|
m_Offset += str.size() * sizeof(char);
|
||||||
|
m_Data[m_Offset] = '\0';
|
||||||
|
m_Offset += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Packet::WriteData(char * data, int sizeOfData)
|
void Packet::WriteData(char * data, int sizeOfData)
|
||||||
|
|||||||
@@ -74,7 +74,10 @@ size_t TCPClient::readBuffer()
|
|||||||
boost::asio::ip::tcp::socket::message_peek, error);
|
boost::asio::ip::tcp::socket::message_peek, error);
|
||||||
unsigned int sizeOfPacket = 0;
|
unsigned int sizeOfPacket = 0;
|
||||||
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
|
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
|
||||||
|
if (sizeOfPacket > m_Socket->available()) {
|
||||||
|
LOG_WARNING("TCPClient::readBuffer(): We haven't got the whole packet yet.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// if the buffer is to small increase the size of it
|
// if the buffer is to small increase the size of it
|
||||||
// TODO if message is huge 1 time the buffer will not decrease.
|
// TODO if message is huge 1 time the buffer will not decrease.
|
||||||
if (sizeOfPacket > m_BufferSize) {
|
if (sizeOfPacket > m_BufferSize) {
|
||||||
|
|||||||
@@ -106,7 +106,10 @@ int TCPServer::readBuffer(PlayerDefinition & playerDefinition)
|
|||||||
boost::asio::ip::tcp::socket::message_peek, error);
|
boost::asio::ip::tcp::socket::message_peek, error);
|
||||||
unsigned int sizeOfPacket = 0;
|
unsigned int sizeOfPacket = 0;
|
||||||
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
|
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
|
||||||
|
if (sizeOfPacket > playerDefinition.TCPSocket->available()) {
|
||||||
|
LOG_WARNING("TCPServer::readBuffer(): We haven't got the whole packet yet.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// if the buffer is to small increase the size of it
|
// if the buffer is to small increase the size of it
|
||||||
if (sizeOfPacket > m_BufferSize) {
|
if (sizeOfPacket > m_BufferSize) {
|
||||||
delete[] m_ReadBuffer;
|
delete[] m_ReadBuffer;
|
||||||
|
|||||||
@@ -45,7 +45,10 @@ int UDPClient::readBuffer()
|
|||||||
boost::asio::ip::udp::socket::message_peek, error);
|
boost::asio::ip::udp::socket::message_peek, error);
|
||||||
int sizeOfPacket = 0;
|
int sizeOfPacket = 0;
|
||||||
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
|
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
|
||||||
|
if (sizeOfPacket > m_Socket->available()) {
|
||||||
|
LOG_WARNING("UDPClient::readBuffer(): We haven't got the whole packet yet.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// if the buffer is to small increase the size of it
|
// if the buffer is to small increase the size of it
|
||||||
if (sizeOfPacket > m_BufferSize) {
|
if (sizeOfPacket > m_BufferSize) {
|
||||||
delete[] m_ReadBuffer;
|
delete[] m_ReadBuffer;
|
||||||
|
|||||||
@@ -92,6 +92,11 @@ int UDPServer::readBuffer()
|
|||||||
unsigned int sizeOfPacket = 0;
|
unsigned int sizeOfPacket = 0;
|
||||||
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
|
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
|
||||||
|
|
||||||
|
if (sizeOfPacket > m_Socket->available()) {
|
||||||
|
LOG_WARNING("UDPServer::readBuffer(): We haven't got the whole packet yet.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// if the buffer is to small increase the size of it
|
// if the buffer is to small increase the size of it
|
||||||
if (sizeOfPacket > m_BufferSize) {
|
if (sizeOfPacket > m_BufferSize) {
|
||||||
delete[] m_ReadBuffer;
|
delete[] m_ReadBuffer;
|
||||||
|
|||||||
Reference in New Issue
Block a user