diff options
Diffstat (limited to 'slixmpp/plugins/xep_0353/stanza.py')
-rw-r--r-- | slixmpp/plugins/xep_0353/stanza.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/slixmpp/plugins/xep_0353/stanza.py b/slixmpp/plugins/xep_0353/stanza.py new file mode 100644 index 00000000..48046274 --- /dev/null +++ b/slixmpp/plugins/xep_0353/stanza.py @@ -0,0 +1,55 @@ +""" + slixmpp: The Slick XMPP Library + Copyright (C) 2020 Emmanuel Gil Peyrot + This file is part of slixmpp. + + See the file LICENSE for copying permission. +""" + +from typing import Iterable, List, Tuple + +from slixmpp.xmlstream import ElementBase, ET + +class JingleMessage(ElementBase): + namespace = 'urn:xmpp:jingle-message:0' + interfaces = {'id'} + +class Propose(JingleMessage): + name = 'propose' + plugin_attrib = 'jingle_propose' + interfaces = {'id', 'descriptions'} + + def get_descriptions(self) -> List[Tuple[str, str]]: + result = [] + for desc in self.xml: + namespace = desc.tag.split('}')[0][1:] + media = desc.attrib['media'] + result.append((namespace, media)) + return result + + def set_descriptions(self, descriptions: Iterable[Tuple[str, str]]): + self.del_descriptions() + for namespace, media in descriptions: + desc = ET.Element('{%s}description' % namespace) + desc.attrib['media'] = media + self.xml.append(desc) + + def del_descriptions(self): + for desc in self.xml.findall('{*}description'): + self.xml.remove(desc) + +class Retract(JingleMessage): + name = 'retract' + plugin_attrib = 'jingle_retract' + +class Accept(JingleMessage): + name = 'accept' + plugin_attrib = 'jingle_accept' + +class Proceed(JingleMessage): + name = 'proceed' + plugin_attrib = 'jingle_proceed' + +class Reject(JingleMessage): + name = 'reject' + plugin_attrib = 'jingle_reject' |