diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-28 02:21:14 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-28 02:21:14 +0000 |
| commit | d6c0e75a2e861cd7185f061af4655592236f06b1 (patch) | |
| tree | 0de5872f0ddbb6a055e1ff80aaf8c5fc295a3451 /src/server/mod_proxy65.cpp | |
| parent | 24e7e5627d7915f31cffade24b5a800ca9ddde9e (diff) | |
| download | qxmpp-d6c0e75a2e861cd7185f061af4655592236f06b1.tar.gz | |
fixes for proxy module
Diffstat (limited to 'src/server/mod_proxy65.cpp')
| -rw-r--r-- | src/server/mod_proxy65.cpp | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/server/mod_proxy65.cpp b/src/server/mod_proxy65.cpp index 68c67366..3eac9bfb 100644 --- a/src/server/mod_proxy65.cpp +++ b/src/server/mod_proxy65.cpp @@ -144,6 +144,7 @@ struct TransferStats class QXmppServerProxy65Private { public: + QString domain; QString jid; QHostAddress host; quint16 port; @@ -231,7 +232,7 @@ bool QXmppServerProxy65::handleStanza(QXmppStream *stream, const QDomElement &el return true; } } - if (element.tagName() == "iq" && QXmppByteStreamIq::isByteStreamIq(element)) + else if (element.tagName() == "iq" && QXmppByteStreamIq::isByteStreamIq(element)) { QXmppByteStreamIq bsIq; bsIq.parse(element); @@ -259,21 +260,24 @@ bool QXmppServerProxy65::handleStanza(QXmppStream *stream, const QDomElement &el { QString hash = streamHash(bsIq.sid(), bsIq.from(), bsIq.activate()); QTcpSocketPair *pair = d->pairs.value(hash); + + QXmppIq responseIq; + responseIq.setTo(bsIq.from()); + responseIq.setFrom(bsIq.to()); + responseIq.setId(bsIq.id()); + + // FIXME : make it possible to specify permissions if (pair && - jidToDomain(bsIq.from()) == jidToDomain(d->jid)) + jidToDomain(bsIq.from()) == d->domain) { qDebug() << "Activating connection" << hash << "by" << bsIq.from(); pair->activate(); - - QXmppIq responseIq; responseIq.setType(QXmppIq::Result); - responseIq.setTo(bsIq.from()); - responseIq.setFrom(bsIq.to()); - responseIq.setId(bsIq.id()); - stream->sendPacket(responseIq); } else { qWarning() << "Not activating connection" << hash << "by" << bsIq.from(); + responseIq.setType(QXmppIq::Error); } + stream->sendPacket(responseIq); } return true; } @@ -312,6 +316,8 @@ void QXmppServerProxy65::setStatisticsFile(const QString &statisticsFile) bool QXmppServerProxy65::start(QXmppServer *server) { + d->domain = server->domain(); + // determine jid if (d->jid.isEmpty()) d->jid = "proxy." + server->domain(); @@ -377,10 +383,12 @@ void QXmppServerProxy65::slotPairFinished() // store total statistics if (d->statistics) { + d->statistics->beginGroup("socks-proxy"); d->statistics->setValue("total-bytes", d->statistics->value("total-bytes").toULongLong() + pair->transfer); d->statistics->setValue("total-transfers", d->statistics->value("total-transfers").toULongLong() + 1); + d->statistics->endGroup(); } // remove socket pair |
