Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorvald Natvig <slicer@users.sourceforge.net>2007-09-07 06:09:40 +0400
committerThorvald Natvig <slicer@users.sourceforge.net>2007-09-07 06:09:40 +0400
commit568fdeb28297266364d5f7faf38b839fabed9937 (patch)
tree12b88d718d9581c568155fef989b5ad98045ce55 /src/PacketDataStream.h
parent2f046d8f845d3b24bf4a9110f4396eecd74571a1 (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.h14
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;
}