2013-01-10 5 views
5

새 QSslSocket을 만들 수 있으며 TCP 연결을 방해하거나 닫지 않고 기존 TCP 연결과 이전 QTcpSocket의 소유권을 가져갈 수 있습니까?Morph existing QTcpSocket to QSslSocket

FTP 클라이언트의 요청 (명령 AUTH SSL 또는 AUTH TLS)이있는 경우에만 초기에 연결이 암호화되지 않아야하며 FTP 클라이언트에서 SSL/TLS가 필요하다면 명시 적으로 FTPS를 구현해야합니다. 악수가 시작됩니다.

답변

6

예 가능합니다. 가장 간단한 방법은 QTcpSocketQSslSocket으로 대체하는 것입니다. QSslSocketstartClientEncryption에 전화 할 때까지 정확히 QTcpSocket (암호화 안 함)처럼 작동합니다. 그 후에 QSslSocket은 정상적인 QTcpSocket처럼 작동하지만 모든 통신은 백그라운드에서 암호화됩니다.

이것을 사용하여 실제로 한 시간 안에 SSL을 사용하도록 100k + 회선 프로젝트를 포팅 할 수있었습니다.

편집

그냥 해당 QTcpSocket 메소드를 호출하기 때문에 암호화되지 않은 모드에서 QSslSocket를 사용 할 (실제) 오버 헤드가 없다. 예를 들어, 읽기 방법 (qsslsocket.cpp Qt 4.8.3) :

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