/***************************************************************************
- * Copyright (C) 2005-2013 by the Quassel Project *
+ * Copyright (C) 2005-2014 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
+#include <QHostInfo>
+
#include "corenetwork.h"
#include "core.h"
_requestedUserModes('-')
{
_autoReconnectTimer.setSingleShot(true);
- _socketCloseTimer.setSingleShot(true);
connect(&_socketCloseTimer, SIGNAL(timeout()), this, SLOT(socketCloseTimeout()));
setPingInterval(networkConfig()->pingInterval());
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
- socket.setProtocol((QSsl::SslProtocol)server.sslVersion);
if (server.useSsl) {
CoreIdentity *identity = identityPtr();
if (identity) {
if (!prefix.isEmpty())
msg += ":" + prefix + " ";
- msg += cmd.toUpper().toAscii();
+ msg += cmd.toUpper().toLatin1();
+
+ for (int i = 0; i < params.size(); i++) {
+ msg += " ";
- for (int i = 0; i < params.size() - 1; i++) {
- msg += " " + params[i];
+ if (i == params.size() - 1 && (params[i].contains(' ') || (!params[i].isEmpty() && params[i][0] == ':')))
+ msg += ":";
+
+ msg += params[i];
}
- if (!params.isEmpty())
- msg += " :" + params.last();
putRawLine(msg);
}
if (server.useSsl && !socket.isEncrypted())
return;
#endif
-
+#if QT_VERSION >= 0x040600
+ socket.setSocketOption(QAbstractSocket::KeepAliveOption, true);
+#endif
CoreIdentity *identity = identityPtr();
if (!identity) {
qCritical() << "Identity invalid!";
emit socketInitialized(identity, localAddress(), localPort(), peerAddress(), peerPort());
- enablePingTimeout();
-
// TokenBucket to avoid sending too much at once
_messageDelay = 2200; // this seems to be a safe value (2.2 seconds delay)
_burstSize = 5;