add oidentd cli options to quasselcore
[quassel.git] / src / core / corenetwork.cpp
index ccb5600..b43bbc2 100644 (file)
 #include "corenetwork.h"
 
 #include "core.h"
-#include "coresession.h"
 #include "coreidentity.h"
 #include "corenetworkconfig.h"
-
-#include "ircserverhandler.h"
+#include "coresession.h"
 #include "coreuserinputhandler.h"
-#include "ctcphandler.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,17 @@ 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(newSocket(const CoreIdentity*,QHostAddress,quint16,QHostAddress,quint16)), Core::instance()->oidentdConfigGenerator(), SLOT(addSocket(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 {
@@ -277,6 +275,29 @@ void CoreNetwork::removeChannelKey(const QString &channel) {
 }
 
 #ifdef HAVE_QCA2
+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;
+
+  CoreIrcChannel *channel = qobject_cast<CoreIrcChannel *>(ircChannel(target));
+  if(channel) {
+    if(channel->cipher()->setKey(key))
+      return channel->cipher();
+  } else {
+    CoreIrcUser *user = qobject_cast<CoreIrcUser *>(ircUser(target));
+    if(user && user->cipher()->setKey(key))
+      return user->cipher();
+  }
+  return 0;
+}
+
 QByteArray CoreNetwork::cipherKey(const QString &recipient) const {
   return _cipherKeys.value(recipient.toLower(), QByteArray());
 }
@@ -307,7 +328,13 @@ void CoreNetwork::setMyNick(const QString &mynick) {
 void CoreNetwork::socketHasData() {
   while(socket.canReadLine()) {
     QByteArray s = socket.readLine().trimmed();
-    ircServerHandler()->handleServerMsg(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);
   }
 }
 
@@ -326,6 +353,7 @@ void CoreNetwork::socketError(QAbstractSocket::SocketError error) {
 }
 
 void CoreNetwork::socketInitialized() {
+qDebug() << "connected()";
   Server server = usedServer();
 #ifdef HAVE_SSL
   if(server.useSsl && !socket.isEncrypted())
@@ -339,6 +367,8 @@ void CoreNetwork::socketInitialized() {
     return;
   }
 
+  emit newSocket(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;