synchronously call OidentdConfigGenerator
[quassel.git] / src / core / corenetwork.cpp
index 42b090f..02f3842 100644 (file)
 
 #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<QSslError> &)), this, SLOT(sslErrors(const QList<QSslError> &)));
 #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)), Qt::BlockingQueuedConnection);
+    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,15 +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
-
     NetworkDataEvent *event = new NetworkDataEvent(EventManager::NetworkIncoming, this, s);
 #if QT_VERSION >= 0x040700
     event->setTimestamp(QDateTime::currentDateTimeUtc());
 #else
     event->setTimestamp(QDateTime::currentDateTime().toUTC());
 #endif
-    coreSession()->eventManager()->sendEvent(event);
+    emit newEvent(event);
   }
 }
 
@@ -367,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;
@@ -411,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);