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");
    }
}
Exemple #2
0
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();
	}
}