source:
ralphm-patches/roster_server.patch
@
34:e46c5701df9e
Last change on this file since 34:e46c5701df9e was 34:e46c5701df9e, checked in by Ralph Meijer <ralphm@…>, 11 years ago | |
---|---|
File size: 3.3 KB |
-
wokkel/xmppim.py
diff -r 09858bbc7f56 wokkel/xmppim.py
a b 12 12 All of it should eventually move to Twisted. 13 13 """ 14 14 15 from twisted.words.protocols.jabber import error, xmlstream 15 16 from twisted.words.protocols.jabber.jid import JID 16 17 from twisted.words.xish import domish 17 18 … … 22 23 NS_XML = 'http://www.w3.org/XML/1998/namespace' 23 24 NS_ROSTER = 'jabber:iq:roster' 24 25 26 XPATH_ROSTER_GET = "//iq[@type='get']/query[@xmlns='%s']" % NS_ROSTER 27 XPATH_ROSTER_SET = "//iq[@type='set']/query[@xmlns='%s']" % NS_ROSTER 28 25 29 class Presence(domish.Element): 26 30 def __init__(self, to=None, type=None): 27 31 domish.Element.__init__(self, (None, "presence")) … … 605 609 self.groups = set() 606 610 607 611 612 608 613 class RosterClientProtocol(XMPPHandler): 609 614 """ 610 615 Client side XMPP roster protocol. … … 614 619 ROSTER_SET = "/iq[@type='set']/query[@xmlns='%s']" % NS_ROSTER 615 620 self.xmlstream.addObserver(ROSTER_SET, self._onRosterSet) 616 621 622 617 623 def _parseRosterItem(self, element): 618 624 jid = JID(element['jid']) 619 625 item = RosterItem(jid) … … 628 634 629 635 return item 630 636 637 631 638 def getRoster(self): 632 639 """ 633 640 Retrieve contact list. … … 683 690 item = self._parseRosterItem(iq.query.item) 684 691 self.onRosterSet(item) 685 692 693 686 694 def onRosterSet(self, item): 687 695 """ 688 696 Called when a roster push for a new or update item was received. … … 691 699 @type item: L{RosterItem} 692 700 """ 693 701 702 694 703 def onRosterRemove(self, entity): 695 704 """ 696 705 Called when a roster push for the removal of an item was received. … … 699 708 @type entity: L{JID} 700 709 """ 701 710 711 712 713 class RosterServerProtocol(XMPPHandler): 714 """ 715 XMPP subprotocol handler for the roster, server side. 716 """ 717 718 def connectionInitialized(self): 719 self.xmlstream.addObserver(XPATH_ROSTER_GET, self._onRosterGet, -1) 720 self.xmlstream.addObserver(XPATH_ROSTER_SET, self._onRosterSet, -1) 721 722 723 def _toRosterReply(self, items, iq): 724 response = xmlstream.toResponse(iq, 'result') 725 response.addElement((NS_ROSTER, 'query')) 726 727 for item in items: 728 element = response.query.addElement('item') 729 element['jid'] = item['jid'] 730 if item['name']: 731 element['name'] = item['name'] 732 element['subscription'] = item['subscription'] 733 if item['ask']: 734 element['ask'] = item['ask'] 735 736 for group in item['groups']: 737 element.addElement('group', content=group) 738 739 return response 740 741 742 def _onRosterGet(self, iq): 743 iq.handled = True 744 745 d = self.getRoster(JID(iq["from"])) 746 d.addCallback(self._toRosterReply, iq) 747 d.addErrback(lambda _: error.ErrorStanza('internal-error').toResponse(iq)) 748 d.addBoth(self.send) 749 750 751 def _onRosterSet(self, iq): 752 iq.handled = True 753 response = error.StanzaError('bad-request').toResponse(iq) 754 self.send(response) 755 756 757 def getRoster(self, entity): 758 raise NotImplemented 759 760 761 702 762 class MessageProtocol(XMPPHandler): 703 763 """ 704 764 Generic XMPP subprotocol handler for incoming message stanzas.
Note: See TracBrowser
for help on using the repository browser.