diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-10 09:04:12 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-10 09:04:12 +0000 |
| commit | 7729fa4a4727c724df9e31cc524334f0629c558b (patch) | |
| tree | 5761e38927607ff8b8e6a9473447a1599cc7b26c /source/QXmppClient.cpp | |
| parent | 7e200ac65474aba6069dca506db3bb57704d4fdd (diff) | |
| download | qxmpp-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.cpp | 12 |
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()); |
