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

Commit 0ebce1f

Browse files
committed
Added possibility to QXmppServer to route a stanza to a specific resource without the need to add the resource to the stanza's JID. Closes #7
1 parent 90b681f commit 0ebce1f

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

src/server/QXmppServer.cpp

+16-4
Original file line numberDiff line numberDiff line change
@@ -635,8 +635,9 @@ bool QXmppServer::listenForServers(const QHostAddress &address, quint16 port)
635635
/// Route an XMPP stanza.
636636
///
637637
/// \param element
638+
/// \param recipient
638639

639-
bool QXmppServer::sendElement(const QDomElement &element)
640+
bool QXmppServer::sendElement(const QDomElement &element, const QString& resource)
640641
{
641642
// serialize data
642643
QByteArray data;
@@ -645,22 +646,33 @@ bool QXmppServer::sendElement(const QDomElement &element)
645646
helperToXmlAddDomElement(&xmlStream, element, omitNamespaces);
646647

647648
// route data
648-
return d->routeData(element.attribute("to"), 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+
}
649655
}
650656

651657
/// Route an XMPP packet.
652658
///
653659
/// \param packet
660+
/// \param recipient
654661

655-
bool QXmppServer::sendPacket(const QXmppStanza &packet)
662+
bool QXmppServer::sendPacket(const QXmppStanza &packet, const QString& resource)
656663
{
657664
// serialize data
658665
QByteArray data;
659666
QXmlStreamWriter xmlStream(&data);
660667
packet.toXml(&xmlStream);
661668

662669
// route data
663-
return d->routeData(packet.to(), 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+
}
664676
}
665677

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

src/server/QXmppServer.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ class QXMPP_EXPORT QXmppServer : public QXmppLoggable
8989
bool listenForClients(const QHostAddress &address = QHostAddress::Any, quint16 port = 5222);
9090
bool listenForServers(const QHostAddress &address = QHostAddress::Any, quint16 port = 5269);
9191

92-
bool sendElement(const QDomElement &element);
93-
bool sendPacket(const QXmppStanza &stanza);
92+
bool sendElement(const QDomElement &element, const QString& resource = QString());
93+
bool sendPacket(const QXmppStanza &stanza, const QString& resource = QString());
9494

9595
void addIncomingClient(QXmppIncomingClient *stream);
9696

0 commit comments

Comments
 (0)