# 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'