Skip to content
This repository was archived by the owner on Mar 20, 2025. It is now read-only.

Commit c1388fe

Browse files
committed
moved decision for routing a stanza to a specific resource into routeData
1 parent 0ebce1f commit c1388fe

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

src/server/QXmppServer.cpp

+15-15
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class QXmppServerPrivate
7676
public:
7777
QXmppServerPrivate(QXmppServer *qq);
7878
void loadExtensions(QXmppServer *server);
79-
bool routeData(const QString &to, const QByteArray &data);
79+
bool routeData(const QString &to, const QByteArray &data, const QString& resource);
8080
void startExtensions();
8181
void stopExtensions();
8282

@@ -125,7 +125,7 @@ QXmppServerPrivate::QXmppServerPrivate(QXmppServer *qq)
125125
/// \param data
126126
///
127127

128-
bool QXmppServerPrivate::routeData(const QString &to, const QByteArray &data)
128+
bool QXmppServerPrivate::routeData(const QString &to, const QByteArray &data, const QString& resource)
129129
{
130130
// refuse to route packets to empty destination, own domain or sub-domains
131131
const QString toDomain = QXmppUtils::jidToDomain(to);
@@ -136,7 +136,17 @@ bool QXmppServerPrivate::routeData(const QString &to, const QByteArray &data)
136136

137137
// look for a client connection
138138
QList<QXmppIncomingClient*> found;
139-
if (QXmppUtils::jidToResource(to).isEmpty()) {
139+
// issue#7: Is a specific destination resource requested?
140+
if (!resource.isEmpty()){
141+
if (QXmppUtils::jidToResource(to).isEmpty()) {
142+
QXmppIncomingClient *conn = incomingClientsByJid.value(to + "/" + resource);
143+
if (conn)
144+
found << conn;
145+
} else {
146+
// refuse to route to a specific resource if stanza is for a full JID already
147+
return false;
148+
}
149+
} else if (QXmppUtils::jidToResource(to).isEmpty()) {
140150
foreach (QXmppIncomingClient *conn, incomingClientsByBareJid.value(to))
141151
found << conn;
142152
} else {
@@ -646,12 +656,7 @@ bool QXmppServer::sendElement(const QDomElement &element, const QString& resourc
646656
helperToXmlAddDomElement(&xmlStream, element, omitNamespaces);
647657

648658
// route data
649-
if (!resource.isEmpty()) {
650-
// ... to explicitly specified resource. Override original resource from "to" (if any)
651-
return d->routeData(QXmppUtils::jidToBareJid(element.attribute("to")) + "/" + resource, data);
652-
} else {
653-
return d->routeData(element.attribute("to"), data);
654-
}
659+
return d->routeData(element.attribute("to"), data, resource);
655660
}
656661

657662
/// Route an XMPP packet.
@@ -667,12 +672,7 @@ bool QXmppServer::sendPacket(const QXmppStanza &packet, const QString& resource)
667672
packet.toXml(&xmlStream);
668673

669674
// route data
670-
if (!resource.isEmpty()) {
671-
// ... to explicitly specified resource. Override original resource from "to" (if any)
672-
return d->routeData(QXmppUtils::jidToBareJid(packet.to()) + "/" + resource, data);
673-
} else {
674-
return d->routeData(packet.to(), data);
675-
}
675+
return d->routeData(packet.to(), data, resource);
676676
}
677677

678678
/// Add a new incoming client \a stream.

0 commit comments

Comments
 (0)