Skip to content
This repository has been archived by the owner on Feb 22, 2020. It is now read-only.

Fix for "Socket receive buffer full" exception #62

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions lib/Connection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,19 @@ void Connection::scramble(const char *_scramble1, const char *_scramble2, UINT8
bool Connection::readSocket()
{
size_t bytesToRecv = m_reader.getEndPtr() - m_reader.getWritePtr();
assert (bytesToRecv <= m_reader.getEndPtr() - m_reader.getWritePtr());
assert (bytesToRecv <= m_reader.getEndPtr() - m_reader.getWritePtr());

if (bytesToRecv == 0)
{
// Socket buffer got full!
setError("Socket receive buffer full", 0, UME_OTHER);
return false;
m_reader.freeSpace();
bytesToRecv = m_reader.getEndPtr() - m_reader.getWritePtr();
assert (bytesToRecv <= m_reader.getEndPtr() - m_reader.getWritePtr());
if (bytesToRecv == 0)
{
// Socket buffer got full!
setError("Socket receive buffer full", 0, UME_OTHER);
return false;
}
}
else
if (bytesToRecv > 65536)
Expand Down
13 changes: 13 additions & 0 deletions lib/PacketReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#define BYTEORDER_UINT16(_x) (_x)
#define BYTEORDER_UINT32(_x) (_x)
#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))

PacketReader::PacketReader (size_t _cbSize)
{
Expand Down Expand Up @@ -96,6 +97,18 @@ void PacketReader::skip()
}
}

void PacketReader::freeSpace()
{
size_t len = m_writeCursor - m_readCursor;
memmove( m_buffStart, m_readCursor, len );

if ( m_packetEnd != NULL )
m_packetEnd = m_buffStart + (m_buffStart - m_readCursor);

m_writeCursor = m_buffStart + len;
m_readCursor = m_buffStart;
}

void PacketReader::push(size_t _cbData)
{
//fprintf (stderr, "%s: Pushing %u bytes\n", __FUNCTION__, _cbData);
Expand Down
1 change: 1 addition & 0 deletions lib/PacketReader.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ class PacketReader
PacketReader (size_t cbSize);
~PacketReader (void);
void skip();
void freeSpace();
void push(size_t _cbData);
char *getWritePtr();
char *getStartPtr();
Expand Down