#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)));
+ 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() {
return;
}
- emit newSocket(identity, localAddress(), localPort(), peerAddress(), peerPort());
+ 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)
setConnected(false);
emit disconnected(networkId());
+ emit socketDisconnected(identityPtr(), localAddress(), localPort(), peerAddress(), peerPort());
if(_quitRequested) {
_quitRequested = false;
setConnectionState(Network::Disconnected);
void sslErrors(const QVariant &errorData);
void newEvent(Event *event);
- void newSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);
+ void socketInitialized(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);
+ void socketDisconnected(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);
protected:
inline virtual IrcChannel *ircChannelFactory(const QString &channelname) { return new CoreIrcChannel(channelname, this); }
quasselStanza = QRegExp(QString("^lport .* { .* } #%1$").arg(configTag));
- if (parseConfig(true) && writeConfig())
+ if (parseConfig(false) && writeConfig())
_initialized = true;
- qDebug() << "konichi wa °-°";
+ qDebug() << "OidentdConfigGenerator" << (!_initialized ? "not" : "") << "initialized";
return _initialized;
}
_config.append(QString("lport %1 { reply \"%2\" } #%3\n").arg(localPort).arg(ident).arg(configTag));
- return writeConfig();
+ bool ret = writeConfig();
+ qDebug() << "config written" << ret;
+
+ return ret;
}
-bool OidentdConfigGenerator::parseConfig(bool stripQuasselStanzas) {
+// not yet implemented
+bool OidentdConfigGenerator::removeSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort) {
+ Q_UNUSED(identity) Q_UNUSED(localAddress) Q_UNUSED(localPort) Q_UNUSED(peerAddress) Q_UNUSED(peerPort)
+ return true;
+}
+
+bool OidentdConfigGenerator::parseConfig(bool keepQuasselStanzas) {
qDebug() << "_configFile name" << _configFile->fileName();
qDebug() << "open?" << _configFile->isOpen();
+ qDebug() << "keeping our stanzas?" << keepQuasselStanzas;
if (!_configFile->isOpen() && !_configFile->open(QIODevice::ReadWrite))
return false;
while (!_configFile->atEnd()) {
QByteArray line = _configFile->readLine();
- if (!stripQuasselStanzas || checkLine(line))
+ qDebug() << "line" << line;
+ qDebug() << "line by us?" << lineByUs(line);
+ if (keepQuasselStanzas || !lineByUs(line))
parsedConfig.append(line);
}
}
bool OidentdConfigGenerator::writeConfig() {
- if (!_configFile->isOpen() && !_configFile->open(QIODevice::ReadWrite))
+ if (!_configFile->isOpen() && !_configFile->open(QFile::WriteOnly | QFile::Truncate))
return false;
//FIXME: thread safety
return _configFile->flush();
}
-bool OidentdConfigGenerator::checkLine(const QByteArray &line) {
+bool OidentdConfigGenerator::lineByUs(const QByteArray &line) {
return !quasselStanza.exactMatch(line);
}
public slots:
bool addSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);
+ bool removeSocket(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);
private:
bool init();
bool writeConfig();
- bool parseConfig(bool stripQuasselStanzas = false);
- bool checkLine(const QByteArray &line);
+ bool parseConfig(bool keepQuasselStanzas = true);
+ bool lineByUs(const QByteArray &line);
bool _initialized;
QDateTime _lastSync;