2013-01-10 13 views
5

Ist es möglich, eine neue QSslSocket zu schaffen und dafür das Eigentum über die bestehende TCP-Verbindung zu übernehmen, und die alte QTcpSocket verworfen werden, ohne zu unterbrechen oder die TCP-Verbindung zu schließen?Morph bestehende QTcpSocket zu QSslSocket

Ich brauche dies, um explizite FTPS in meinem FTP-Server zu implementieren, die zunächst die Verbindung unverschlüsselt erfordert, und nur auf die FTP-Client-Anfrage (der Befehl AUTH SSL oder AUTH TLS), wenn es überhaupt ein SSL/TLS kommt Handshake wird eingeleitet.

Antwort

6

Ja, das ist möglich. Der einfachste Weg, dies zu tun ist, um die QTcpSocket mit einem QSslSocket zu ersetzen. Die QSslSocket verhält sich genau wie eine normale QTcpSocket (ohne Verschlüsselung), bis Sie startClientEncryption nennen. Danach wird die QSslSocket wie ein normales QTcpSocket handeln, sondern die gesamte Kommunikation im Hintergrund verschlüsselt.

dieser Verwendung ich tatsächlich in der Lage zu portieren war eine 100k + Projektleitungen SSL zu verwenden, in weniger als eine Stunde.

bearbeiten

Es gibt keinen (real) Kopf QSslSocket in unverschlüsselten Modus zu verwenden, da sie die entsprechenden QTcpSocket Methode nur nennen. Zum Beispiel die Lese-Methode (qsslsocket.cpp Qt 4.8.3):

if (d->mode == UnencryptedMode && !d->autoStartHandshake) { 
    readBytes = d->plainSocket->read(data, maxlen); 
} else { 
//encryption stuff