summaryrefslogtreecommitdiff
path: root/client/SslClient.cpp
diff options
context:
space:
mode:
authorAlex Borisov <borisov.alexandr@rambler.ru>2011-11-11 00:42:50 +0200
committerAlex Borisov <borisov.alexandr@rambler.ru>2011-11-11 00:42:50 +0200
commitd9a7ccf4eb0fe6d44cf1a7361b331889a98ff85b (patch)
treea01b1a8265601788d2e4b3003940bc2f33669755 /client/SslClient.cpp
parentfe4520fc09dca52c158437f5621f5909d7d6974f (diff)
Self-updated config. Various fixes and improvements. TODO: test client/server communication
Diffstat (limited to 'client/SslClient.cpp')
-rw-r--r--client/SslClient.cpp29
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;