+ if (!identity) {
+ qWarning() << "Invalid identity configures, ignoring connect request!";
+ return;
+ }
+
+ // cleaning up old quit reason
+ _quitReason.clear();
+
+ // use a random server?
+ if (useRandomServer()) {
+ _lastUsedServerIndex = qrand() % serverList().size();
+ }
+ else if (_previousConnectionAttemptFailed) {
+ // cycle to next server if previous connection attempt failed
+ displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Connection failed. Cycling to next Server"));
+ if (++_lastUsedServerIndex >= serverList().size()) {
+ _lastUsedServerIndex = 0;
+ }
+ }
+ _previousConnectionAttemptFailed = false;
+
+ Server server = usedServer();
+ displayStatusMsg(tr("Connecting to %1:%2...").arg(server.host).arg(server.port));
+ displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Connecting to %1:%2...").arg(server.host).arg(server.port));
+
+ if (server.useProxy) {
+ QNetworkProxy proxy((QNetworkProxy::ProxyType)server.proxyType, server.proxyHost, server.proxyPort, server.proxyUser, server.proxyPass);
+ socket.setProxy(proxy);
+ }
+ else {
+ socket.setProxy(QNetworkProxy::NoProxy);
+ }
+
+ enablePingTimeout();
+
+ // Qt caches DNS entries for a minute, resulting in round-robin (e.g. for chat.freenode.net) not working if several users
+ // connect at a similar time. QHostInfo::fromName(), however, always performs a fresh lookup, overwriting the cache entry.
+ QHostInfo::fromName(server.host);
+
+#ifdef HAVE_SSL
+ if (server.useSsl) {
+ CoreIdentity *identity = identityPtr();
+ if (identity) {
+ socket.setLocalCertificate(identity->sslCert());
+ socket.setPrivateKey(identity->sslKey());
+ }
+ socket.connectToHostEncrypted(server.host, server.port);
+ }
+ else {
+ socket.connectToHost(server.host, server.port);