diff options
author | Alex Borisov <borisov.alexandr@rambler.ru> | 2011-12-03 14:38:49 +0200 |
---|---|---|
committer | Alex Borisov <borisov.alexandr@rambler.ru> | 2011-12-03 14:38:49 +0200 |
commit | e2926e321c4472d2dd65c4c75f13eafd9f97db08 (patch) | |
tree | 52d50be410a57e80247ebdb1459dfb48431d78c6 /client | |
parent | 76c3fe23ae4cfee0581c72b40ef3d11e7502ebbc (diff) |
Big packets handling (> 4096b)
Diffstat (limited to 'client')
-rw-r--r-- | client/SslClient.cpp | 42 | ||||
-rw-r--r-- | client/SslClient.h | 1 |
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; }; |