X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorenetwork.cpp;h=23125bbc9ea6b27bc58082515094c05a1a2a9019;hp=05da4135fd6c7de138910a5607ac862f16275e22;hb=160492494676f09b7836badc165727a538f03ece;hpb=86837eac3346857733f3488acccca9dc2c45605e diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index 05da4135..23125bbc 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -20,22 +20,18 @@ #include "corenetwork.h" -#include "ctcphandler.h" #include "core.h" #include "coreidentity.h" #include "corenetworkconfig.h" #include "coresession.h" #include "coreuserinputhandler.h" -#include "ircserverhandler.h" #include "networkevent.h" INIT_SYNCABLE_OBJECT(CoreNetwork) CoreNetwork::CoreNetwork(const NetworkId &networkid, CoreSession *session) : Network(networkid, session), _coreSession(session), - _ircServerHandler(new IrcServerHandler(this)), _userInputHandler(new CoreUserInputHandler(this)), - _ctcpHandler(new CtcpHandler(this)), _autoReconnectCount(0), _quitRequested(false), @@ -81,15 +77,19 @@ CoreNetwork::CoreNetwork(const NetworkId &networkid, CoreSession *session) connect(&socket, SIGNAL(encrypted()), this, SLOT(socketInitialized())); connect(&socket, SIGNAL(sslErrors(const QList &)), this, SLOT(sslErrors(const QList &))); #endif + 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))); + connect(this, SIGNAL(socketDisconnected(const CoreIdentity*,QHostAddress,quint16,QHostAddress,quint16)), Core::instance()->oidentdConfigGenerator(), SLOT(removeSocket(const CoreIdentity*,QHostAddress,quint16,QHostAddress,quint16))); + } } CoreNetwork::~CoreNetwork() { if(connectionState() != Disconnected && connectionState() != Network::Reconnecting) disconnectFromIrc(false); // clean up, but this does not count as requested disconnect! disconnect(&socket, 0, this, 0); // this keeps the socket from triggering events during clean up - delete _ircServerHandler; delete _userInputHandler; - delete _ctcpHandler; } QString CoreNetwork::channelDecode(const QString &bufferName, const QByteArray &string) const { @@ -281,6 +281,9 @@ Cipher *CoreNetwork::cipher(const QString &target) const { if(target.isEmpty()) return 0; + if(!Cipher::neededFeaturesAvailable()) + return 0; + QByteArray key = cipherKey(target); if(key.isEmpty()) return 0; @@ -327,9 +330,13 @@ void CoreNetwork::setMyNick(const QString &mynick) { void CoreNetwork::socketHasData() { while(socket.canReadLine()) { QByteArray s = socket.readLine().trimmed(); - ircServerHandler()->handleServerMsg(s); // FIXME remove with events - - coreSession()->eventManager()->sendEvent(new NetworkDataEvent(EventManager::NetworkIncoming, this, s)); + NetworkDataEvent *event = new NetworkDataEvent(EventManager::NetworkIncoming, this, s); +#if QT_VERSION >= 0x040700 + event->setTimestamp(QDateTime::currentDateTimeUtc()); +#else + event->setTimestamp(QDateTime::currentDateTime().toUTC()); +#endif + emit newEvent(event); } } @@ -361,6 +368,8 @@ void CoreNetwork::socketInitialized() { return; } + emit socketInitialized(identity, localAddress(), localPort(), peerAddress(), peerPort()); + // TokenBucket to avoid sending too much at once _messageDelay = 2200; // this seems to be a safe value (2.2 seconds delay) _burstSize = 5; @@ -405,6 +414,7 @@ void CoreNetwork::socketDisconnected() { setConnected(false); emit disconnected(networkId()); + emit socketDisconnected(identityPtr(), localAddress(), localPort(), peerAddress(), peerPort()); if(_quitRequested) { _quitRequested = false; setConnectionState(Network::Disconnected);