summaryrefslogtreecommitdiff
path: root/slixmpp/plugins/xep_0353/stanza.py
diff options
context:
space:
mode:
Diffstat (limited to 'slixmpp/plugins/xep_0353/stanza.py')
-rw-r--r--slixmpp/plugins/xep_0353/stanza.py55
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'