diff options
author | Alex Borisov <borisov.alexandr@rambler.ru> | 2011-11-11 00:42:50 +0200 |
---|---|---|
committer | Alex Borisov <borisov.alexandr@rambler.ru> | 2011-11-11 00:42:50 +0200 |
commit | d9a7ccf4eb0fe6d44cf1a7361b331889a98ff85b (patch) | |
tree | a01b1a8265601788d2e4b3003940bc2f33669755 /client/SslClient.cpp | |
parent | fe4520fc09dca52c158437f5621f5909d7d6974f (diff) |
Self-updated config. Various fixes and improvements. TODO: test client/server communication
Diffstat (limited to 'client/SslClient.cpp')
-rw-r--r-- | client/SslClient.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/client/SslClient.cpp b/client/SslClient.cpp index 831a1f3..6d13369 100644 --- a/client/SslClient.cpp +++ b/client/SslClient.cpp @@ -38,7 +38,12 @@ SslClient::SslClient(QString addr): port(13666) sslSocket.setLocalCertificate(cert); sslSocket.setPrivateKey(key); sslSocket.setCaCertificates(ca_certs); + +#ifdef DEBUG sslSocket.setPeerVerifyMode(QSslSocket::VerifyNone); +#else + sslSocket.setPeerVerifyMode(QSslSocket::VerifyPeer); +#endif sslSocket.setProtocol(QSsl::SslV3); /* setup signal handlers */ @@ -69,6 +74,10 @@ void SslClient::SendRequest(RequestType type) Logger::Trace("Connecting to server %s:%u\n", server.toLocal8Bit().data(), port); sslSocket.connectToHostEncrypted(server, port); } + else + { + Logger::Trace("Already connected to %s:%u\n", server.toLocal8Bit().data(), port); + } unsigned char rcode = 0x00; switch (type) @@ -106,14 +115,21 @@ void SslClient::DataRecieved() { Logger::Trace("Recieved reply from %s\n", server.toStdString().c_str()); QByteArray data = sslSocket.readAll(); - int length = data.size(); + if (length < 6) + { + Logger::Error("Server packet too short. Aborting.\n"); + return; + } + char h1 = data[0]; char h2 = data[1]; - char t1 = data[length-1]; - char t2 = data[length]; + char t1 = data[length-3]; + char t2 = data[length-2]; + char t3 = data[length-1]; + if ((h1 != 0x13) || (h2 != 0x13) || - (t1 != 0x14) || (t2 != 0x14)) + (t1 != 0x14) || (t2 != 0x14) || (t3 != 0x00)) { Logger::Error("Invalid data packet recieved!\n"); return; @@ -136,7 +152,7 @@ void SslClient::DataRecieved() /* remove header and tail */ data.remove(0, 3); - data.remove(length-1, 2); + data.remove(length-1, 3); emit ReplyRecieved(type, data); } @@ -208,6 +224,7 @@ void SslClient::Error(QAbstractSocket::SocketError e) } Logger::Fatal("Socket error! ( %s)\n", desc.toLocal8Bit().data()); + emit ConnectionError(); } void SslClient::PeerVerifyError(const QSslError &error) @@ -219,7 +236,7 @@ void SslClient::PeerVerifyError(const QSslError &error) case QSslError::UnspecifiedError: case QSslError::AuthorityIssuerSerialNumberMismatch: Logger::Fatal("Critical peer verify error!, Aborting connection\n" - "Error description: %s", + "Error description: %s\n", error.errorString().toStdString().c_str()); sslSocket.abort(); break; |