diff options
author | Lance Stout <lancestout@gmail.com> | 2012-04-30 11:07:54 -0700 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2012-04-30 11:07:54 -0700 |
commit | ad5b61de50ca4fbcc445ceae8db568be6518e66e (patch) | |
tree | 4794a9e962a40d248e6241740d0b67fba5ef8397 /sleekxmpp/plugins/xep_0050 | |
parent | f53b815855581776b7751ab90d3b5e3c2a7b8fc5 (diff) | |
download | slixmpp-ad5b61de50ca4fbcc445ceae8db568be6518e66e.tar.gz slixmpp-ad5b61de50ca4fbcc445ceae8db568be6518e66e.tar.bz2 slixmpp-ad5b61de50ca4fbcc445ceae8db568be6518e66e.tar.xz slixmpp-ad5b61de50ca4fbcc445ceae8db568be6518e66e.zip |
Add full support for initial payloads with adhoc commands, plus test.
Diffstat (limited to 'sleekxmpp/plugins/xep_0050')
-rw-r--r-- | sleekxmpp/plugins/xep_0050/adhoc.py | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/sleekxmpp/plugins/xep_0050/adhoc.py b/sleekxmpp/plugins/xep_0050/adhoc.py index dc99e343..fcf51b1a 100644 --- a/sleekxmpp/plugins/xep_0050/adhoc.py +++ b/sleekxmpp/plugins/xep_0050/adhoc.py @@ -213,13 +213,21 @@ class XEP_0050(BasePlugin): name, handler = self.commands.get(key, ('Not found', None)) if not handler: log.debug('Command not found: %s, %s', key, self.commands) + + payload = [] + for stanza in iq['command']['substanzas']: + payload.append(stanza) + + interfaces = set([item.plugin_attrib for item in payload]) + payload_classes = set([item.__class__ for item in payload]) + initial_session = {'id': sessionid, 'from': iq['from'], 'to': iq['to'], 'node': node, - 'payload': None, - 'interfaces': '', - 'payload_classes': None, + 'payload': payload, + 'interfaces': interfaces, + 'payload_classes': payload_classes, 'notes': None, 'has_next': False, 'allow_complete': False, @@ -269,11 +277,19 @@ class XEP_0050(BasePlugin): sessionid = session['id'] payload = session['payload'] + if payload is None: + payload = [] if not isinstance(payload, list): payload = [payload] - session['interfaces'] = [item.plugin_attrib for item in payload] - session['payload_classes'] = [item.__class__ for item in payload] + interfaces = session.get('interfaces', set()) + payload_classes = session.get('payload_classes', set()) + + interfaces.update(set([item.plugin_attrib for item in payload])) + payload_classes.update(set([item.__class__ for item in payload])) + + session['interfaces'] = interfaces + session['payload_classes'] = payload_classes self.sessions[sessionid] = session @@ -486,6 +502,12 @@ class XEP_0050(BasePlugin): session['from'] = ifrom iq['command']['node'] = node iq['command']['action'] = 'execute' + if session['payload'] is not None: + payload = session['payload'] + if not isinstance(payload, list): + payload = list(payload) + for stanza in payload: + iq['command'].append(stanza) sessionid = 'client:pending_' + iq['id'] session['id'] = sessionid self.sessions[sessionid] = session |