diff options
author | Thorvald Natvig <slicer@users.sourceforge.net> | 2007-09-07 06:09:40 +0400 |
---|---|---|
committer | Thorvald Natvig <slicer@users.sourceforge.net> | 2007-09-07 06:09:40 +0400 |
commit | 568fdeb28297266364d5f7faf38b839fabed9937 (patch) | |
tree | 12b88d718d9581c568155fef989b5ad98045ce55 /src/PacketDataStream.h | |
parent | 2f046d8f845d3b24bf4a9110f4396eecd74571a1 (diff) |
More gracefully handle oversized outgoing packets from murmur
git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@763 05730e5d-ab1b-0410-a4ac-84af385074fa
Diffstat (limited to 'src/PacketDataStream.h')
-rw-r--r-- | src/PacketDataStream.h | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/PacketDataStream.h b/src/PacketDataStream.h index 07ed08e15..043080260 100644 --- a/src/PacketDataStream.h +++ b/src/PacketDataStream.h @@ -40,6 +40,7 @@ class PacketDataStream { unsigned char *data; quint32 maxsize; quint32 offset; + quint32 overshoot; bool ok; public: quint32 size() const { @@ -57,12 +58,18 @@ class PacketDataStream { quint32 left() const { return maxsize - offset; } + + quint32 undersize() const { + return overshoot; + } void append(const quint32 v) { if (offset < maxsize) data[offset++] = v; - else + else { ok = false; + overshoot++; + } }; void append(const char *d, quint32 len) { @@ -70,6 +77,10 @@ class PacketDataStream { memcpy(& data[offset], d, len); offset += len; } else { + int l = left(); + memset(& data[offset], 0, l); + offset += l; + overshoot += len - l; ok = false; } } @@ -121,6 +132,7 @@ class PacketDataStream { void setup(unsigned char *d, int msize) { data = d; offset = 0; + overshoot = 0; maxsize = msize; ok = true; } |