aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppClient.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-10 09:04:12 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-10 09:04:12 +0000
commit7729fa4a4727c724df9e31cc524334f0629c558b (patch)
tree5761e38927607ff8b8e6a9473447a1599cc7b26c /source/QXmppClient.cpp
parent7e200ac65474aba6069dca506db3bb57704d4fdd (diff)
downloadqxmpp-7729fa4a4727c724df9e31cc524334f0629c558b.tar.gz
RPC: splitting methodName should not be done at the QXmppRpcIq level,
it is perfectly legitimate to not use the INTERFACE.METHOD convention in a Jabber-RPC IQ
Diffstat (limited to 'source/QXmppClient.cpp')
-rw-r--r--source/QXmppClient.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/source/QXmppClient.cpp b/source/QXmppClient.cpp
index a7f72b1b..400ff7e0 100644
--- a/source/QXmppClient.cpp
+++ b/source/QXmppClient.cpp
@@ -468,15 +468,21 @@ void QXmppClient::addInvokableInterface( QXmppInvokable *interface )
void QXmppClient::invokeInterfaceMethod( const QXmppRpcInvokeIq &iq )
{
QXmppStanza::Error error;
- QXmppInvokable *iface = m_interfaces.value(iq.interface());
+
+ const QStringList methodBits = iq.method().split('.');
+ if (methodBits.size() != 2)
+ return;
+ const QString interface = methodBits.first();
+ const QString method = methodBits.last();
+ QXmppInvokable *iface = m_interfaces.value(interface);
if (iface)
{
if ( iface->isAuthorized( iq.from() ) )
{
- if ( iface->interfaces().contains( iq.method() ) )
+ if ( iface->interfaces().contains(method) )
{
- QVariant result = iface->dispatch(iq.method().toLatin1(),
+ QVariant result = iface->dispatch(method.toLatin1(),
iq.arguments() );
QXmppRpcResponseIq resultIq;
resultIq.setId(iq.id());