* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
+#include <QHostInfo>
+
#include "corenetwork.h"
#include "core.h"
connect(this, SIGNAL(newEvent(Event *)), coreSession()->eventManager(), SLOT(postEvent(Event *)));
if (Quassel::isOptionSet("oidentd")) {
- connect(this, SIGNAL(socketInitialized(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16)), Core::instance()->oidentdConfigGenerator(), SLOT(addSocket(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16)), Qt::BlockingQueuedConnection);
+ connect(this, SIGNAL(socketOpen(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16)), Core::instance()->oidentdConfigGenerator(), SLOT(addSocket(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16)), Qt::BlockingQueuedConnection);
connect(this, SIGNAL(socketDisconnected(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16)), Core::instance()->oidentdConfigGenerator(), SLOT(removeSocket(const CoreIdentity*, QHostAddress, quint16, QHostAddress, quint16)));
}
}
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 (!prefix.isEmpty())
msg += ":" + prefix + " ";
- msg += cmd.toUpper().toAscii();
+ msg += cmd.toUpper().toLatin1();
+
+ for (int i = 0; i < params.size(); i++) {
+ msg += " ";
+
+ if (i == params.size() - 1 && (params[i].contains(' ') || (!params[i].isEmpty() && params[i][0] == ':')))
+ msg += ":";
- for (int i = 0; i < params.size() - 1; i++) {
- msg += " " + params[i];
+ msg += params[i];
}
- if (!params.isEmpty())
- msg += " :" + params.last();
putRawLine(msg);
}
{
while (socket.canReadLine()) {
QByteArray s = socket.readLine();
- s.chop(2);
+ if (s.endsWith("\r\n"))
+ s.chop(2);
+ else if (s.endsWith("\n"))
+ s.chop(1);
NetworkDataEvent *event = new NetworkDataEvent(EventManager::NetworkIncoming, this, s);
#if QT_VERSION >= 0x040700
event->setTimestamp(QDateTime::currentDateTimeUtc());
void CoreNetwork::socketInitialized()
{
+ CoreIdentity *identity = identityPtr();
+ if (!identity) {
+ qCritical() << "Identity invalid!";
+ disconnectFromIrc();
+ return;
+ }
+
+ emit socketOpen(identity, localAddress(), localPort(), peerAddress(), peerPort());
+
Server server = usedServer();
#ifdef HAVE_SSL
if (server.useSsl && !socket.isEncrypted())
#if QT_VERSION >= 0x040600
socket.setSocketOption(QAbstractSocket::KeepAliveOption, true);
#endif
- CoreIdentity *identity = identityPtr();
- if (!identity) {
- qCritical() << "Identity invalid!";
- disconnectFromIrc();
- return;
- }
emit socketInitialized(identity, localAddress(), localPort(), peerAddress(), peerPort());