Changeset 52:a6ed3b9703cb in ralphm-patches
- Timestamp:
- Jun 2, 2011, 8:05:36 PM (11 years ago)
- Branch:
- default
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
xmpp_client_service.patch
r51 r52 1 diff -r d7fa09914b70doc/examples/client_service.tac1 diff -r 5c11baa0ef4c doc/examples/client_service.tac 2 2 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3 +++ b/doc/examples/client_service.tac Wed May 25 09:46:062011 +02004 @@ -0,0 +1,7 4@@3 +++ b/doc/examples/client_service.tac Thu Jun 02 19:48:45 2011 +0200 4 @@ -0,0 +1,75 @@ 5 5 +from twisted.application import service, strports 6 6 +from twisted.internet import defer 7 7 + 8 +from wokkel import client, xmppim8 +from wokkel import client, im 9 9 +from wokkel.component import InternalComponent, Router 10 10 +from wokkel.generic import FallbackHandler 11 11 +from wokkel.ping import PingHandler 12 +from wokkel. xmppim import RosterItem12 +from wokkel.im import RosterItem 13 13 + 14 14 +from twisted.words.protocols.jabber.jid import internJID as JID … … 44 44 + 45 45 + 46 +class StaticRoster( xmppim.RosterServerProtocol):46 +class StaticRoster(im.RosterServerProtocol): 47 47 + 48 48 + def __init__(self, roster): 49 + xmppim.RosterServerProtocol.__init__(self)49 + im.RosterServerProtocol.__init__(self) 50 50 + self.roster = roster 51 51 + 52 + def getRoster(self, entity): 53 + return defer.succeed(self.roster[entity.user].values()) 52 + def getRoster(self, request): 53 + user = request.sender.user 54 + return defer.succeed(self.roster[user].values()) 54 55 + 55 56 + … … 64 65 +sessionManager.setHandlerParent(component) 65 66 + 66 + xmppim.AccountIQHandler(sessionManager).setHandlerParent(component)67 + xmppim.AccountMessageHandler(sessionManager).setHandlerParent(component)68 + xmppim.PresenceServerHandler(sessionManager, domain, roster).setHandlerParent(component)67 +im.AccountIQHandler(sessionManager).setHandlerParent(component) 68 +im.AccountMessageHandler(sessionManager).setHandlerParent(component) 69 +im.PresenceServerHandler(sessionManager, domain, roster).setHandlerParent(component) 69 70 +FallbackHandler().setHandlerParent(component) 70 71 +StaticRoster(roster).setHandlerParent(component) … … 77 78 + 78 79 +sessionManager.connectionManager = c2sFactory 79 diff -r d7fa09914b70wokkel/client.py80 --- a/wokkel/client.py Wed May 25 09:40:28 2011 +020081 +++ b/wokkel/client.py Wed May 25 09:46:062011 +020080 diff -r 5c11baa0ef4c wokkel/client.py 81 --- a/wokkel/client.py Thu Jun 02 17:35:28 2011 +0200 82 +++ b/wokkel/client.py Thu Jun 02 19:48:45 2011 +0200 82 83 @@ -10,13 +10,27 @@ 83 84 that should probably eventually move there. … … 470 471 + else: 471 472 + raise Exception("No connection manager set") 472 diff -r d7fa09914b70wokkel/component.py473 --- a/wokkel/component.py Wed May 25 09:40:28 2011 +0200474 +++ b/wokkel/component.py Wed May 25 09:46:062011 +0200473 diff -r 5c11baa0ef4c wokkel/component.py 474 --- a/wokkel/component.py Thu Jun 02 17:35:28 2011 +0200 475 +++ b/wokkel/component.py Thu Jun 02 19:48:45 2011 +0200 475 476 @@ -313,12 +313,25 @@ 476 477 """ … … 501 502 502 503 503 diff -r d7fa09914b70 wokkel/im.py 504 --- a/wokkel/im.py Wed May 25 09:40:28 2011 +0200 505 +++ b/wokkel/im.py Wed May 25 09:46:06 2011 +0200 506 @@ -170,7 +170,10 @@ 504 diff -r 5c11baa0ef4c wokkel/im.py 505 --- a/wokkel/im.py Thu Jun 02 17:35:28 2011 +0200 506 +++ b/wokkel/im.py Thu Jun 02 19:48:45 2011 +0200 507 @@ -10,7 +10,10 @@ 508 U{RFC 6121<http://www.xmpp.org/rfcs/rfc6121.html>} (XMPP IM). 509 """ 510 511 +import copy 512 + 513 from twisted.internet import defer 514 +from twisted.python import log 515 from twisted.words.protocols.jabber import jid 516 from twisted.words.protocols.jabber import error 517 from twisted.words.xish import domish 518 @@ -168,7 +171,10 @@ 507 519 self.xmlstream.addObserver("/presence", self._onPresence) 508 520 … … 516 528 517 529 presenceType = stanza.stanzaType or 'available' 518 @@ -1 80,14 +183,19 @@530 @@ -178,14 +184,19 @@ 519 531 except KeyError: 520 532 return … … 538 550 539 551 def errorReceived(self, presence): 540 @@ -5 83,6 +591,436@@552 @@ -553,6 +564,440 @@ 541 553 542 554 … … 568 580 + 569 581 + try: 570 + recipient = internJID(iq['to'])582 + recipient = jid.internJID(iq['to']) 571 583 + except KeyError: 572 584 + return … … 618 630 + 619 631 + try: 620 + recipient = internJID(message['to'])632 + recipient = jid.internJID(message['to']) 621 633 + except KeyError: 622 634 + return … … 751 763 + continue 752 764 + 753 + resourceJID = JID(tuple=(fromJID.user, fromJID.host, otherResource)) 765 + resourceJID = jid.JID(tuple=(fromJID.user, 766 + fromJID.host, 767 + otherResource)) 754 768 + outPresence = clonePresence(presence) 755 769 + outPresence['to'] = resourceJID.full() … … 769 783 + 770 784 + outPresence = clonePresence(presence) 771 + outPresence['to'] = item. jid.full()772 + 773 + if item. jid.host == self.domain:785 + outPresence['to'] = item.entity.full() 786 + 787 + if item.entity.host == self.domain: 774 788 + # local contact 775 + if item. jid.user in self.presences:789 + if item.entity.user in self.presences: 776 790 + # broadcast to contact's available resources 777 + for itemResource in self.presences[item. jid.user]:778 + resourceJID = JID(tuple=(item.jid.user,779 + item.jid.host,780 + itemResource))791 + for itemResource in self.presences[item.entity.user]: 792 + resourceJID = jid.JID(tuple=(item.entity.user, 793 + item.entity.host, 794 + itemResource)) 781 795 + self.sessionManager.deliverStanza(outPresence, 782 796 + resourceJID) … … 798 812 + # send out probes 799 813 + for item in roster.itervalues(): 800 + if item.subscriptionTo and item. jid.host != self.domain:801 + self.probe(item. jid, fromJID)814 + if item.subscriptionTo and item.entity.host != self.domain: 815 + self.probe(item.entity, fromJID) 802 816 + else: 803 817 + if resource not in self.presences[user]: … … 817 831 + for item in roster.itervalues(): 818 832 + if item.subscriptionTo and \ 819 + item. jid.host == self.domain and \820 + item. jid.user in self.presences:833 + item.entity.host == self.domain and \ 834 + item.entity.user in self.presences: 821 835 + for contactPresence in \ 822 + self.presences[item. jid.user].itervalues():836 + self.presences[item.entity.user].itervalues(): 823 837 + outPresence = clonePresence(contactPresence) 824 838 + outPresence['to'] = fromJID.userhost() … … 856 870 + if toJID.user in self.presences: 857 871 + for resource in self.presences[toJID.user]: 858 + resourceJID = JID(tuple=(toJID.user, toJID.host, resource)) 872 + resourceJID = jid.JID(tuple=(toJID.user, 873 + toJID.host, 874 + resource)) 859 875 + self.sessionManager.deliverStanza(presence.element, resourceJID) 860 876 + self.remotePresences[toJID.user][fromJID] = presence … … 975 991 """ 976 992 XMPP subprotocol handler for the roster, server side. 993 diff -r 5c11baa0ef4c wokkel/test/test_im.py 994 --- a/wokkel/test/test_im.py Thu Jun 02 17:35:28 2011 +0200 995 +++ b/wokkel/test/test_im.py Thu Jun 02 19:48:45 2011 +0200 996 @@ -13,7 +13,7 @@ 997 from twisted.words.xish import domish, utility 998 999 from wokkel import im 1000 -from wokkel.generic import ErrorStanza, parseXml 1001 +from wokkel.generic import ErrorStanza, Stanza, parseXml 1002 from wokkel.test.helpers import TestableRequestHandlerMixin, XmlStreamStub 1003 1004 NS_XML = 'http://www.w3.org/XML/1998/namespace' 1005 @@ -846,6 +846,82 @@ 1006 1007 1008 1009 +class AccountIQHandlerTest(unittest.TestCase): 1010 + """ 1011 + Tests for L{im.AccountIQHandler}. 1012 + """ 1013 + 1014 + def setUp(self): 1015 + self.stub = XmlStreamStub() 1016 + self.protocol = im.AccountIQHandler(None) 1017 + self.protocol.makeConnection(self.stub.xmlstream) 1018 + self.protocol.connectionInitialized() 1019 + 1020 + 1021 + def test_onIQNotUser(self): 1022 + """ 1023 + IQs to JIDs without local part are ignored. 1024 + """ 1025 + xml = """ 1026 + <iq to='example.org'> 1027 + <query xmlns='jabber:iq:version'/> 1028 + </iq> 1029 + """ 1030 + 1031 + iq = parseXml(xml) 1032 + self.stub.send(iq) 1033 + 1034 + self.assertFalse(getattr(iq, 'handled')) 1035 + 1036 + 1037 + 1038 +class AccountMessageHandlerTest(unittest.TestCase): 1039 + """ 1040 + Tests for L{im.AccountMessageHandler}. 1041 + """ 1042 + 1043 + def setUp(self): 1044 + self.stub = XmlStreamStub() 1045 + self.protocol = im.AccountMessageHandler(None) 1046 + self.protocol.makeConnection(self.stub.xmlstream) 1047 + self.protocol.connectionInitialized() 1048 + 1049 + 1050 + def test_onMessageNotUser(self): 1051 + """ 1052 + Messages to JIDs without local part are ignored. 1053 + """ 1054 + xml = """ 1055 + <message to='example.org'> 1056 + <body>Hello</body> 1057 + </message> 1058 + """ 1059 + 1060 + message = parseXml(xml) 1061 + self.stub.send(message) 1062 + 1063 + self.assertFalse(getattr(message, 'handled')) 1064 + 1065 + 1066 + 1067 +class ClonePresenceTest(unittest.TestCase): 1068 + """ 1069 + Tests for L{im.clonePresence}. 1070 + """ 1071 + 1072 + def test_rootElement(self): 1073 + """ 1074 + The copied presence stanza is not identical, but renders identically. 1075 + """ 1076 + originalElement = domish.Element((None, 'presence')) 1077 + stanza = Stanza.fromElement(originalElement) 1078 + copyElement = im.clonePresence(stanza) 1079 + 1080 + self.assertNotIdentical(copyElement, originalElement) 1081 + self.assertEquals(copyElement.toXml(), originalElement.toXml()) 1082 + 1083 + 1084 + 1085 class RosterServerProtocolTest(unittest.TestCase, TestableRequestHandlerMixin): 1086 """ 1087 Tests for L{im.RosterServerProtocol}.
Note: See TracChangeset
for help on using the changeset viewer.