summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorAlex Borisov <borisov.alexandr@rambler.ru>2011-12-03 14:38:49 +0200
committerAlex Borisov <borisov.alexandr@rambler.ru>2011-12-03 14:38:49 +0200
commite2926e321c4472d2dd65c4c75f13eafd9f97db08 (patch)
tree52d50be410a57e80247ebdb1459dfb48431d78c6 /client
parent76c3fe23ae4cfee0581c72b40ef3d11e7502ebbc (diff)
Big packets handling (> 4096b)
Diffstat (limited to 'client')
-rw-r--r--client/SslClient.cpp42
-rw-r--r--client/SslClient.h1
2 files changed, 32 insertions, 11 deletions
diff --git a/client/SslClient.cpp b/client/SslClient.cpp
index 9a39753..b8aa582 100644
--- a/client/SslClient.cpp
+++ b/client/SslClient.cpp
@@ -160,15 +160,35 @@ void SslClient::DataRecieved()
char t1 = data[length-3];
char t2 = data[length-2];
char t3 = data[length-1];
- if ((h1 != 0x13) || (h2 != 0x13) ||
- (t1 != 0x14) || (t2 != 0x14) || (t3 != 0x00))
- {
- Logger::Error("Invalid data packet recieved!\n");
- return;
- }
+
+ if ((h1 == 0x13) && (h2 == 0x13) &&
+ (t1 == 0x14) && (t2 == 0x14) && (t3 == 0x00))
+ {
+ Logger::Trace("Recieved whole packet at once\n");
+ pkt = data;
+ }
+ else if ((h1 == 0x13) && (h2 == 0x13))
+ {
+ Logger::Trace("Recieved beginning of the packet\n");
+ Logger::Trace("Waiting for more packets to arrive\n");
+ pkt = data;
+ return;
+ }
+ else if ((t1 == 0x14) && (t2 == 0x14) && (t3 == 0x00))
+ {
+ Logger::Trace("Recieved end of the packet\n");
+ pkt.append(data);
+ }
+ else
+ {
+ Logger::Trace("Recieved middle of the packet\n");
+ Logger::Trace("Waiting for more packets to arrive\n");
+ pkt.append(data);
+ return;
+ }
RequestType type;
- char rcode = data[2];
+ char rcode = pkt[2];
switch (rcode)
{
case Config:
@@ -199,13 +219,13 @@ void SslClient::DataRecieved()
fprintf(stderr, "%c ", tmp[i]);
}
}
- fprintf(stderr, "]");
+ fprintf(stderr, "]\n");
*/
/* remove header and tail */
- data.remove(data.size()-3, 3);
- data.remove(0, 3);
- emit ReplyRecieved(type, data);
+ pkt.remove(pkt.size()-3, 3);
+ pkt.remove(0, 3);
+ emit ReplyRecieved(type, pkt);
}
void SslClient::Disconnect()
diff --git a/client/SslClient.h b/client/SslClient.h
index 41f0952..1d3256f 100644
--- a/client/SslClient.h
+++ b/client/SslClient.h
@@ -150,6 +150,7 @@ protected:
private:
QSslSocket sslSocket;
+ QByteArray pkt;
unsigned short port;
};