aboutsummaryrefslogtreecommitdiff
path: root/src/server/mod_proxy65.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-28 02:21:14 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-28 02:21:14 +0000
commitd6c0e75a2e861cd7185f061af4655592236f06b1 (patch)
tree0de5872f0ddbb6a055e1ff80aaf8c5fc295a3451 /src/server/mod_proxy65.cpp
parent24e7e5627d7915f31cffade24b5a800ca9ddde9e (diff)
downloadqxmpp-d6c0e75a2e861cd7185f061af4655592236f06b1.tar.gz
fixes for proxy module
Diffstat (limited to 'src/server/mod_proxy65.cpp')
-rw-r--r--src/server/mod_proxy65.cpp24
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