2013-01-10 18 views
5

Có thể tạo một QSslSocket mới và để nó sở hữu kết nối TCP hiện có, và QTcpSocket cũ bị hủy bỏ mà không làm gián đoạn hoặc đóng kết nối TCP?Biến đổi QTcpSocket hiện có thành QSslSocket

Tôi cần điều này để triển khai FTPS rõ ràng trong máy chủ FTP, yêu cầu ban đầu kết nối không được mã hóa và chỉ theo yêu cầu của khách hàng FTP (lệnh AUTH SSL hoặc AUTH TLS), nếu có, SSL/TLS bắt tay.

Trả lời

6

Có điều này là có thể. Cách đơn giản nhất để thực hiện việc này là thay thế QTcpSocket bằng một số QSslSocket. QSslSocket sẽ hoạt động chính xác như bình thường QTcpSocket (không mã hóa) cho đến khi bạn gọi startClientEncryption. Sau đó, QSslSocket sẽ hoạt động như bình thường QTcpSocket nhưng tất cả thông tin liên lạc được mã hóa dưới nền.

Sử dụng điều này tôi thực sự có thể chuyển một dự án đường dây 100k + để sử dụng SSL trong chưa đầy một giờ.

Sửa

Không có (thực) nguyên cần thiết để sử dụng QSslSocket trong chế độ mã hóa vì nó sẽ chỉ gọi QTcpSocket phương pháp tương ứng. Ví dụ: phương pháp đọc (qsslsocket.cpp Qt 4.8.3):

if (d->mode == UnencryptedMode && !d->autoStartHandshake) { 
    readBytes = d->plainSocket->read(data, maxlen); 
} else { 
//encryption stuff 
Các vấn đề liên quan