void SettingsEditorForm::connectToHost(QString addr, int port) { if(_socket != nullptr) { _socket->close(); _socket->deleteLater(); } _socket = new QSslSocket(this); connect( _socket, SIGNAL(error(QAbstractSocket::SocketError)), this,SLOT(onSocketError(QAbstractSocket::SocketError))); connect( _socket, SIGNAL(peerVerifyError(QSslError)), this, SLOT(onPeerVerifyError(QSslError)) ); connect( _socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(onSslErrors(QList<QSslError>))); connect( _socket, SIGNAL(connected()),this,SLOT(onConnected())); connect( _socket, SIGNAL(readyRead()), this, SLOT(onReadyRead())); _socket->setLocalCertificate( "./certs/manager.crt" ); _socket->setPrivateKey( "./certs/manager.key"); _socket->setProtocol(QSsl::SecureProtocols); _socket->setCaCertificates(QSslCertificate::fromPath("./certs/trusted.pem")); _socket->connectToHostEncrypted( addr, port, "SettingsServer"); if(!_socket->waitForEncrypted(1000)) { LoggerDialog::get()->Error("SettingsEditorForm::connectToHost","Wait for encrypted failed!"); _socket->close(); ui->pushButton_connect->setText("Connect"); } }
void TLSFeature::handleEndElement(const QStringRef &name, const QStringRef &uri) { Q_UNUSED(uri); if (name == QLatin1String("proceed")) { DirectConnection *connection = qobject_cast<DirectConnection*>(m_client->connection()); Q_ASSERT(connection); QSslSocket *socket = qobject_cast<QSslSocket*>(connection->socket()); Q_ASSERT(socket); m_socket = socket; socket->setProtocol(QSsl::TlsV1); socket->setPeerVerifyMode(QSslSocket::VerifyNone); connect(socket, SIGNAL(encrypted()), this, SLOT(onHandshaken())); connect(socket, SIGNAL(disconnected()), this, SLOT(onDisconnected())); connect(socket, SIGNAL(peerVerifyError(QSslError)), SLOT(onPeerVerifyError(QSslError))); socket->startClientEncryption(); } }