source:
ralphm-patches/roster_server.patch
@
47:f6d222b68f1c
Last change on this file since 47:f6d222b68f1c was 37:03cd0cb8548c, checked in by Ralph Meijer <ralphm@…>, 12 years ago | |
---|---|
File size: 2.9 KB |
-
wokkel/xmppim.py
diff -r 7b9f484b0b44 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")) … … 636 640 637 641 638 642 643 639 644 class RosterClientProtocol(XMPPHandler): 640 645 """ 641 646 Client side XMPP roster protocol. … … 645 650 ROSTER_SET = "/iq[@type='set']/query[@xmlns='%s']" % NS_ROSTER 646 651 self.xmlstream.addObserver(ROSTER_SET, self._onRosterSet) 647 652 653 648 654 def _parseRosterItem(self, element): 649 655 jid = JID(element['jid']) 650 656 item = RosterItem(jid) … … 659 665 660 666 return item 661 667 668 662 669 def getRoster(self): 663 670 """ 664 671 Retrieve contact list. … … 713 720 item = self._parseRosterItem(iq.query.item) 714 721 self.onRosterSet(item) 715 722 723 716 724 def onRosterSet(self, item): 717 725 """ 718 726 Called when a roster push for a new or update item was received. … … 721 729 @type item: L{RosterItem} 722 730 """ 723 731 732 724 733 def onRosterRemove(self, entity): 725 734 """ 726 735 Called when a roster push for the removal of an item was received. … … 729 738 @type entity: L{JID} 730 739 """ 731 740 741 742 743 class RosterServerProtocol(XMPPHandler): 744 """ 745 XMPP subprotocol handler for the roster, server side. 746 """ 747 748 def connectionInitialized(self): 749 self.xmlstream.addObserver(XPATH_ROSTER_GET, self._onRosterGet) 750 self.xmlstream.addObserver(XPATH_ROSTER_SET, self._onRosterSet) 751 752 753 def _toRosterReply(self, roster, iq): 754 response = xmlstream.toResponse(iq, 'result') 755 response.addElement((NS_ROSTER, 'query')) 756 757 for item in roster: 758 response.query.addChild(item.toElement()) 759 760 return response 761 762 763 def _onRosterGet(self, iq): 764 iq.handled = True 765 766 d = self.getRoster(JID(iq["from"])) 767 d.addCallback(self._toRosterReply, iq) 768 d.addErrback(lambda _: error.ErrorStanza('internal-error').toResponse(iq)) 769 d.addBoth(self.send) 770 771 772 def _onRosterSet(self, iq): 773 iq.handled = True 774 response = error.StanzaError('bad-request').toResponse(iq) 775 self.send(response) 776 777 778 def getRoster(self, entity): 779 raise NotImplemented 780 781 782 732 783 class MessageProtocol(XMPPHandler): 733 784 """ 734 785 Generic XMPP subprotocol handler for incoming message stanzas.
Note: See TracBrowser
for help on using the repository browser.