Mercurial > libervia-backend
annotate src/core/xmpp.py @ 1569:44854fb5d3b2
plugin XEP-0065: fixed CHUNK_SIZE to 4096 to avoid wild disconnection by some proxies (Prosody's proxy65 disconnect if it receive bigger chunks)
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 08 Nov 2015 14:44:33 +0100 |
parents | 001b62bed67c |
children | 6338677f3a89 |
rev | line source |
---|---|
0 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
4 # SAT: a jabber client |
1396 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Jérôme Poisson (goffi@goffi.org) |
0 | 6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
10 # (at your option) any later version. |
0 | 11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
15 # GNU Affero General Public License for more details. |
0 | 16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
589
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
0 | 19 |
1053
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
20 from sat.core.i18n import _ |
923 | 21 from sat.core.constants import Const as C |
330
608a4a2ba94e
Core: created a new core module where xmpp classes are put
Goffi <goffi@goffi.org>
parents:
324
diff
changeset
|
22 from twisted.internet import task, defer |
39
2e3411a6baad
Wix: external server management in gateways manager, SàT: bug fixes in gateway management
Goffi <goffi@goffi.org>
parents:
37
diff
changeset
|
23 from twisted.words.protocols.jabber import jid, xmlstream |
1551
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
24 from wokkel import client, disco, xmppim, generic, delay, iwokkel |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
25 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
26 log = getLogger(__name__) |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
27 from sat.core import exceptions |
513
8ee9113d307b
core, quick_frontend, primitivus, wixi, bridge: fixed delayed message timestamp:
Goffi <goffi@goffi.org>
parents:
512
diff
changeset
|
28 from calendar import timegm |
666
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
29 from zope.interface import implements |
1564 | 30 from twisted.words.protocols.jabber.xmlstream import XMPPHandler |
0 | 31 |
333
4c835d614bdb
core: fixed a None sent instead of empty dict in unavailableReceived
Goffi <goffi@goffi.org>
parents:
330
diff
changeset
|
32 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
33 class SatXMPPClient(client.XMPPClient): |
666
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
34 implements(iwokkel.IDisco) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
35 |
1089
8e0072754413
core, plugins, stdui, frontends: fixes handling of "Force server" and "Force port" parameters:
souliane <souliane@mailoo.org>
parents:
1088
diff
changeset
|
36 def __init__(self, host_app, profile, user_jid, password, host=None, port=C.XMPP_C2S_PORT): |
1088
b29452cab50b
core, memory, plugins, stdui, frontends: look for DNS SRV records when server is not specified:
souliane <souliane@mailoo.org>
parents:
1061
diff
changeset
|
37 # XXX: DNS SRV records are checked when the host is not specified. |
b29452cab50b
core, memory, plugins, stdui, frontends: look for DNS SRV records when server is not specified:
souliane <souliane@mailoo.org>
parents:
1061
diff
changeset
|
38 # If no SRV record is found, the host is directly extracted from the JID. |
1089
8e0072754413
core, plugins, stdui, frontends: fixes handling of "Force server" and "Force port" parameters:
souliane <souliane@mailoo.org>
parents:
1088
diff
changeset
|
39 client.XMPPClient.__init__(self, user_jid, password, host or None, port or C.XMPP_C2S_PORT) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
40 self.factory.clientConnectionLost = self.connectionLost |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
41 self.__connected = False |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
42 self.profile = profile |
64 | 43 self.host_app = host_app |
341 | 44 self.conn_deferred = defer.Deferred() |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
45 self._waiting_conf = {} # callback called when a confirmation is received |
1522
7d7e57a84792
core: progression handling improvments:
Goffi <goffi@goffi.org>
parents:
1480
diff
changeset
|
46 self._progress_cb = {} # callback called when a progress is requested (key = progress id) |
341 | 47 |
48 def getConnectionDeferred(self): | |
49 """Return a deferred which fire when the client is connected""" | |
50 return self.conn_deferred | |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
51 |
1551
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
52 def IQ(self, type_=u'set', timeout=None): |
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
53 """shortcut to create an IQ element managing deferred |
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
54 |
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
55 @param type_(unicode): IQ type ('set' or 'get') |
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
56 @param timeout(None, int): timeout in seconds |
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
57 """ |
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
58 iq_elt = xmlstream.IQ(self.xmlstream, type_) |
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
59 iq_elt.timeout = timeout |
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
60 return iq_elt |
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
61 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
62 def _authd(self, xmlstream): |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
277
diff
changeset
|
63 if not self.host_app.trigger.point("XML Initialized", xmlstream, self.profile): |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
277
diff
changeset
|
64 return |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
65 client.XMPPClient._authd(self, xmlstream) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
66 self.__connected = True |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
67 log.info(_("********** [%s] CONNECTED **********") % self.profile) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
68 self.streamInitialized() |
1435
7590bbf44eed
bridge, quick_frontend: the JID that is assigned by the server can differ from the one we asked for (resource)
souliane <souliane@mailoo.org>
parents:
1434
diff
changeset
|
69 self.host_app.bridge.connected(self.profile, unicode(self.jid)) # we send the signal to the clients |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
70 |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
71 def streamInitialized(self): |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
72 """Called after _authd""" |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
73 log.debug(_("XML stream is initialized")) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
74 self.keep_alife = task.LoopingCall(self.xmlstream.send, " ") # Needed to avoid disconnection (specially with openfire) |
1211
9355f48f979e
core: move XMPP keep-alife value to the constants
souliane <souliane@mailoo.org>
parents:
1170
diff
changeset
|
75 self.keep_alife.start(C.XMPP_KEEP_ALIFE) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
76 |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
77 self.disco = SatDiscoProtocol(self) |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
78 self.disco.setHandlerParent(self) |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
79 self.discoHandler = disco.DiscoHandler() |
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
80 self.discoHandler.setHandlerParent(self) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
81 disco_d = defer.succeed(None) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
82 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
83 if not self.host_app.trigger.point("Disco handled", disco_d, self.profile): |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
277
diff
changeset
|
84 return |
62
93cb45a7420f
SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents:
60
diff
changeset
|
85 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
86 def finish_connection(dummy): |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
87 self.roster.requestRoster() |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
88 self.presence.available() |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
89 self.conn_deferred.callback(None) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
90 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
91 disco_d.addCallback(finish_connection) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
92 |
262
af3d4f11fe43
Added management of connection error
Goffi <goffi@goffi.org>
parents:
260
diff
changeset
|
93 def initializationFailed(self, reason): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
94 log.error(_(u"ERROR: XMPP connection failed for profile '%(profile)s': %(reason)s" % {'profile': self.profile, 'reason': reason})) |
1060
aa15453ec54d
core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents:
1053
diff
changeset
|
95 self.conn_deferred.errback(reason.value) |
262
af3d4f11fe43
Added management of connection error
Goffi <goffi@goffi.org>
parents:
260
diff
changeset
|
96 try: |
af3d4f11fe43
Added management of connection error
Goffi <goffi@goffi.org>
parents:
260
diff
changeset
|
97 client.XMPPClient.initializationFailed(self, reason) |
af3d4f11fe43
Added management of connection error
Goffi <goffi@goffi.org>
parents:
260
diff
changeset
|
98 except: |
1060
aa15453ec54d
core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents:
1053
diff
changeset
|
99 # we already chained an errback, no need to raise an exception |
262
af3d4f11fe43
Added management of connection error
Goffi <goffi@goffi.org>
parents:
260
diff
changeset
|
100 pass |
af3d4f11fe43
Added management of connection error
Goffi <goffi@goffi.org>
parents:
260
diff
changeset
|
101 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
102 def isConnected(self): |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
103 return self.__connected |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
104 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
105 def connectionLost(self, connector, unused_reason): |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
106 try: |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
107 self.keep_alife.stop() |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
108 except AttributeError: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
109 log.debug(_("No keep_alife")) |
1060
aa15453ec54d
core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents:
1053
diff
changeset
|
110 if self.__connected: |
aa15453ec54d
core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents:
1053
diff
changeset
|
111 log.info(_("********** [%s] DISCONNECTED **********") % self.profile) |
aa15453ec54d
core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents:
1053
diff
changeset
|
112 self.host_app.bridge.disconnected(self.profile) # we send the signal to the clients |
aa15453ec54d
core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents:
1053
diff
changeset
|
113 self.host_app.purgeClient(self.profile) # and we remove references to this client |
aa15453ec54d
core (xmpp), stdui (profile_manager), bridge, frontends: raise an exception if the XMPP connection failed instead of sending a signal
souliane <souliane@mailoo.org>
parents:
1053
diff
changeset
|
114 self.__connected = False |
0 | 115 |
116 | |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
117 class SatMessageProtocol(xmppim.MessageProtocol): |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
118 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
119 def __init__(self, host): |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
120 xmppim.MessageProtocol.__init__(self) |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
121 self.host = host |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
122 |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
123 def onMessage(self, message): |
1276
56adf73bedeb
core (xmpp): set missing "from" attribute of received messages to the server domain
souliane <souliane@mailoo.org>
parents:
1246
diff
changeset
|
124 if not message.hasAttribute('from'): |
56adf73bedeb
core (xmpp): set missing "from" attribute of received messages to the server domain
souliane <souliane@mailoo.org>
parents:
1246
diff
changeset
|
125 message['from'] = self.parent.jid.host |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
126 log.debug(_(u"got message from: %s") % message["from"]) |
697
0c84fb112d70
core: sendMessage triggers now use a treatments deferred;
Goffi <goffi@goffi.org>
parents:
669
diff
changeset
|
127 post_treat = defer.Deferred() # XXX: plugin can add their treatments to this deferred |
663 | 128 |
129 if not self.host.trigger.point("MessageReceived", message, post_treat, profile=self.parent.profile): | |
513
8ee9113d307b
core, quick_frontend, primitivus, wixi, bridge: fixed delayed message timestamp:
Goffi <goffi@goffi.org>
parents:
512
diff
changeset
|
130 return |
663 | 131 |
132 data = {"from": message['from'], | |
133 "to": message['to'], | |
134 "body": "", | |
135 "extra": {}} | |
136 | |
513
8ee9113d307b
core, quick_frontend, primitivus, wixi, bridge: fixed delayed message timestamp:
Goffi <goffi@goffi.org>
parents:
512
diff
changeset
|
137 for e in message.elements(): |
8ee9113d307b
core, quick_frontend, primitivus, wixi, bridge: fixed delayed message timestamp:
Goffi <goffi@goffi.org>
parents:
512
diff
changeset
|
138 if e.name == "body": |
663 | 139 data['body'] = e.children[0] if e.children else "" |
1061
3700165d68dc
core (xmpp): onMessage handles an eventual subject (used for announcement / headline message)
souliane <souliane@mailoo.org>
parents:
1060
diff
changeset
|
140 elif e.name == "subject" and e.children: |
3700165d68dc
core (xmpp): onMessage handles an eventual subject (used for announcement / headline message)
souliane <souliane@mailoo.org>
parents:
1060
diff
changeset
|
141 data['extra']['subject'] = e.children[0] |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
142 |
663 | 143 data['type'] = message['type'] if message.hasAttribute('type') else 'normal' |
144 | |
1053
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
145 def bridgeSignal(data): |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
146 if data is not None: |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
147 self.host.bridge.newMessage(data['from'], data['body'], data['type'], data['to'], data['extra'], profile=self.parent.profile) |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
148 return data |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
149 |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
150 def addToHistory(data): |
663 | 151 # set message body to empty string by default, and later |
152 # also forward message without body (chat state notification...) | |
153 try: | |
154 _delay = delay.Delay.fromElement(filter(lambda elm: elm.name == 'delay', message.elements())[0]) | |
155 timestamp = timegm(_delay.stamp.utctimetuple()) | |
156 data['extra']['archive'] = str(timestamp) | |
157 if data['type'] != 'groupchat': # XXX: we don't save delayed messages in history for groupchats | |
158 #TODO: add delayed messages to history if they aren't already in it | |
669
ffb716804580
core, bridge: extra parameter is saved in history:
Goffi <goffi@goffi.org>
parents:
666
diff
changeset
|
159 self.host.memory.addToHistory(jid.JID(data['from']), jid.JID(data['to']), data['body'], data['type'], data['extra'], timestamp, profile=self.parent.profile) |
663 | 160 except IndexError: |
669
ffb716804580
core, bridge: extra parameter is saved in history:
Goffi <goffi@goffi.org>
parents:
666
diff
changeset
|
161 self.host.memory.addToHistory(jid.JID(data['from']), jid.JID(data['to']), data['body'], data['type'], data['extra'], profile=self.parent.profile) |
1053
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
162 return data |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
163 |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
164 def treatmentsEb(failure): |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
165 failure.trap(exceptions.SkipHistory) |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
166 return data |
663 | 167 |
1053
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
168 def cancelErrorTrap(failure): |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
169 """A message sending can be cancelled by a plugin treatment""" |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
170 failure.trap(exceptions.CancelError) |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
171 |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
172 post_treat.addCallback(addToHistory) |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
173 post_treat.addErrback(treatmentsEb) |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
174 post_treat.addCallback(bridgeSignal) |
71d63750963e
core (XMPP): message received (onMessage) refactoring:
Goffi <goffi@goffi.org>
parents:
1037
diff
changeset
|
175 post_treat.addErrback(cancelErrorTrap) |
663 | 176 post_treat.callback(data) |
636
7ea6d5a86e58
plugin XEP-0085: Chat State Notifications
souliane <souliane@mailoo.org>
parents:
611
diff
changeset
|
177 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
178 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
179 class SatRosterProtocol(xmppim.RosterClientProtocol): |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
180 |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
181 def __init__(self, host): |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
182 xmppim.RosterClientProtocol.__init__(self) |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
183 self.host = host |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
184 self.got_roster = defer.Deferred() # called when roster is received and ready |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
185 #XXX: the two following dicts keep a local copy of the roster |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
186 self._groups = {} # map from groups to jids: key=group value=set of jids |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
187 self._jids = None # map from jids to RosterItem: key=jid value=RosterItem |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
188 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
189 def rosterCb(self, roster): |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
190 assert roster is not None # FIXME: must be managed with roster versioning |
1427
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
191 self._groups.clear() |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
192 self._jids = roster |
1398
f8ecce11a0bc
core (xmmp): keep the roster groups cache synchronised + fixes a log.warning
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
193 for item in roster.itervalues(): |
f8ecce11a0bc
core (xmmp): keep the roster groups cache synchronised + fixes a log.warning
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
194 if not item.subscriptionTo and not item.subscriptionFrom and not item.ask: |
f8ecce11a0bc
core (xmmp): keep the roster groups cache synchronised + fixes a log.warning
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
195 #XXX: current behaviour: we don't want contact in our roster list |
f8ecce11a0bc
core (xmmp): keep the roster groups cache synchronised + fixes a log.warning
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
196 # if there is no presence subscription |
f8ecce11a0bc
core (xmmp): keep the roster groups cache synchronised + fixes a log.warning
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
197 # may change in the future |
1431
70abe871eac3
core (xmpp): added log message when a an entity without presence subscription is removed from roster
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
198 log.info(u"Removing contact {} from roster because there is no presence subscription".format(item.jid)) |
1426
614145ef6e60
core (xmpp): RosterItem.jid is deprecated in Wokkel 0.7.1, use RosterItem.entity instead
souliane <souliane@mailoo.org>
parents:
1417
diff
changeset
|
199 self.removeItem(item.entity) # FIXME: to be checked |
1398
f8ecce11a0bc
core (xmmp): keep the roster groups cache synchronised + fixes a log.warning
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
200 else: |
f8ecce11a0bc
core (xmmp): keep the roster groups cache synchronised + fixes a log.warning
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
201 self._registerItem(item) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
202 |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
203 def _registerItem(self, item): |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
204 """Register item in local cache |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
205 |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
206 item must be already registered in self._jids before this method is called |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
207 @param item (RosterIem): item added |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
208 """ |
1426
614145ef6e60
core (xmpp): RosterItem.jid is deprecated in Wokkel 0.7.1, use RosterItem.entity instead
souliane <souliane@mailoo.org>
parents:
1417
diff
changeset
|
209 log.debug(u"registering item: {}".format(item.entity.full())) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
210 if item.entity.resource: |
1299
3360074a2f00
core: fixed some logging calls without unicode strings, and use of print
Goffi <goffi@goffi.org>
parents:
1262
diff
changeset
|
211 log.warning(u"Received a roster item with a resource, this is not common but not restricted by RFC 6121, this case may be not well tested.") |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
212 if not item.subscriptionTo: |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
213 if not item.subscriptionFrom: |
1426
614145ef6e60
core (xmpp): RosterItem.jid is deprecated in Wokkel 0.7.1, use RosterItem.entity instead
souliane <souliane@mailoo.org>
parents:
1417
diff
changeset
|
214 log.info(_(u"There's no subscription between you and [{}]!").format(item.entity.full())) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
215 else: |
1426
614145ef6e60
core (xmpp): RosterItem.jid is deprecated in Wokkel 0.7.1, use RosterItem.entity instead
souliane <souliane@mailoo.org>
parents:
1417
diff
changeset
|
216 log.info(_(u"You are not subscribed to [{}]!").format(item.entity.full())) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
217 if not item.subscriptionFrom: |
1426
614145ef6e60
core (xmpp): RosterItem.jid is deprecated in Wokkel 0.7.1, use RosterItem.entity instead
souliane <souliane@mailoo.org>
parents:
1417
diff
changeset
|
218 log.info(_(u"[{}] is not subscribed to you!").format(item.entity.full())) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
219 |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
220 for group in item.groups: |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
221 self._groups.setdefault(group, set()).add(item.entity) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
222 |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
223 def requestRoster(self): |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
224 """ ask the server for Roster list """ |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
225 log.debug("requestRoster") |
549
2c5ef983f2ef
core: client.roster has now a got_roster deferred which is fired when roster is available
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
226 d = self.getRoster().addCallback(self.rosterCb) |
2c5ef983f2ef
core: client.roster has now a got_roster deferred which is fired when roster is available
Goffi <goffi@goffi.org>
parents:
538
diff
changeset
|
227 d.chainDeferred(self.got_roster) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
228 |
875
19d7d077478a
core (xmpp): fix automatic contact deletion
souliane <souliane@mailoo.org>
parents:
819
diff
changeset
|
229 def removeItem(self, to_jid): |
19d7d077478a
core (xmpp): fix automatic contact deletion
souliane <souliane@mailoo.org>
parents:
819
diff
changeset
|
230 """Remove a contact from roster list |
19d7d077478a
core (xmpp): fix automatic contact deletion
souliane <souliane@mailoo.org>
parents:
819
diff
changeset
|
231 @param to_jid: a JID instance |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
232 @return: Deferred |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
233 """ |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
234 return xmppim.RosterClientProtocol.removeItem(self, to_jid) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
235 |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
236 def getAttributes(self, item): |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
237 """Return dictionary of attributes as used in bridge from a RosterItem |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
238 @param item: RosterItem |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
239 @return: dictionary of attributes""" |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
240 item_attr = {'to': unicode(item.subscriptionTo), |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
241 'from': unicode(item.subscriptionFrom), |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
242 'ask': unicode(item.ask) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
243 } |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
244 if item.name: |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
245 item_attr['name'] = item.name |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
246 return item_attr |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
247 |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
248 def setReceived(self, request): |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
249 #TODO: implement roster versioning (cf RFC 6121 §2.6) |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
250 item = request.item |
1427
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
251 try: # update the cache for the groups the contact has been removed from |
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
252 left_groups = set(self._jids[item.entity].groups).difference(item.groups) |
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
253 for group in left_groups: |
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
254 jids_set = self._groups[group] |
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
255 jids_set.remove(item.entity) |
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
256 if not jids_set: |
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
257 del self._groups[group] |
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
258 except KeyError: |
1e833970b7f0
core (xmpp): update the cache for a contact group when a contact is removed from it
souliane <souliane@mailoo.org>
parents:
1426
diff
changeset
|
259 pass # no previous item registration (or it's been cleared) |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
260 self._jids[item.entity] = item |
1398
f8ecce11a0bc
core (xmmp): keep the roster groups cache synchronised + fixes a log.warning
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
261 self._registerItem(item) |
1426
614145ef6e60
core (xmpp): RosterItem.jid is deprecated in Wokkel 0.7.1, use RosterItem.entity instead
souliane <souliane@mailoo.org>
parents:
1417
diff
changeset
|
262 self.host.bridge.newContact(item.entity.full(), self.getAttributes(item), item.groups, self.parent.profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
263 |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
264 def removeReceived(self, request): |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
265 entity = request.item.entity |
1299
3360074a2f00
core: fixed some logging calls without unicode strings, and use of print
Goffi <goffi@goffi.org>
parents:
1262
diff
changeset
|
266 log.info(u"removing %s from roster list" % entity.full()) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
267 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
268 # we first remove item from local cache (self._groups and self._jids) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
269 try: |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
270 item = self._jids.pop(entity) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
271 except KeyError: |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
272 log.error(u"Received a roster remove event for an item not in cache ({})".format(entity)) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
273 return |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
274 for group in item.groups: |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
275 try: |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
276 jids_set = self._groups[group] |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
277 jids_set.remove(entity) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
278 if not jids_set: |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
279 del self._groups[group] |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
280 except KeyError: |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
281 log.warning(u"there is no cache for the group [%(group)s] of the removed roster item [%(jid)s]" % |
1398
f8ecce11a0bc
core (xmmp): keep the roster groups cache synchronised + fixes a log.warning
souliane <souliane@mailoo.org>
parents:
1396
diff
changeset
|
282 {"group": group, "jid": entity}) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
283 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
284 # then we send the bridge signal |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
285 self.host.bridge.contactDeleted(entity.full(), self.parent.profile) |
50 | 286 |
305
15a12bf2bb62
core: server identities are now save in memory
Goffi <goffi@goffi.org>
parents:
292
diff
changeset
|
287 def getGroups(self): |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
288 """Return a list of groups""" |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
289 return self._groups.keys() |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
290 |
1300
ba73798317a7
core: fixed items registration in roster management
Goffi <goffi@goffi.org>
parents:
1299
diff
changeset
|
291 def getItem(self, entity_jid): |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
292 """Return RosterItem for a given jid |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
293 |
1300
ba73798317a7
core: fixed items registration in roster management
Goffi <goffi@goffi.org>
parents:
1299
diff
changeset
|
294 @param entity_jid: jid of the contact |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
295 @return: RosterItem or None if contact is not in cache |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
296 """ |
1300
ba73798317a7
core: fixed items registration in roster management
Goffi <goffi@goffi.org>
parents:
1299
diff
changeset
|
297 return self._jids.get(entity_jid, None) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
298 |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
299 def getJids(self): |
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
300 """Return all jids of the roster""" |
467
47af60767013
plugin group blog: getMassiveGroupBlog first draft
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
301 return self._jids.keys() |
487 | 302 |
303 def isJidInRoster(self, entity_jid): | |
304 """Return True if jid is in roster""" | |
1262
f8a8434dbac7
core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
305 return entity_jid in self._jids |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
306 |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
307 def getItems(self): |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
308 """Return all items of the roster""" |
467
47af60767013
plugin group blog: getMassiveGroupBlog first draft
Goffi <goffi@goffi.org>
parents:
466
diff
changeset
|
309 return self._jids.values() |
501
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
310 |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
311 def getJidsFromGroup(self, group): |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
312 try: |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
313 return self._groups[group] |
e9634d2e7b38
core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents:
487
diff
changeset
|
314 except KeyError: |
1300
ba73798317a7
core: fixed items registration in roster management
Goffi <goffi@goffi.org>
parents:
1299
diff
changeset
|
315 raise exceptions.UnknownGroupError(group) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
316 |
1450
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
317 def getJidsSet(self, type_, groups=None): |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
318 """Helper method to get a set of jids |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
319 |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
320 @param type_(unicode): one of: |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
321 C.ALL: get all jids from roster |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
322 C.GROUP: get jids from groups (listed in "groups") |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
323 @groups(list[unicode]): list of groups used if type_==C.GROUP |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
324 @return (set(jid.JID)): set of selected jids |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
325 """ |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
326 if type_ == C.ALL and groups is not None: |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
327 raise ValueError('groups must not be set for {} type'.format(C.ALL)) |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
328 |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
329 if type_ == C.ALL: |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
330 return set(self.getJids()) |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
331 elif type_ == C.GROUP: |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
332 jids = set() |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
333 for group in groups: |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
334 jids.update(self.getJidsFromGroup(group)) |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
335 return jids |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
336 else: |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
337 raise ValueError(u'Unexpected type_ {}'.format(type_)) |
7797dda847ae
plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents:
1435
diff
changeset
|
338 |
305
15a12bf2bb62
core: server identities are now save in memory
Goffi <goffi@goffi.org>
parents:
292
diff
changeset
|
339 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
340 class SatPresenceProtocol(xmppim.PresenceClientProtocol): |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
341 |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
342 def __init__(self, host): |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
343 xmppim.PresenceClientProtocol.__init__(self) |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
344 self.host = host |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
345 |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
346 def send(self, obj): |
953 | 347 if not self.host.trigger.point("Presence send", self.parent, obj): |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
348 return |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
349 super(SatPresenceProtocol, self).send(obj) |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
934
diff
changeset
|
350 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
351 def availableReceived(self, entity, show=None, statuses=None, priority=0): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
352 log.debug(_(u"presence update for [%(entity)s] (available, show=%(show)s statuses=%(statuses)s priority=%(priority)d)") % {'entity': entity, C.PRESENCE_SHOW: show, C.PRESENCE_STATUSES: statuses, C.PRESENCE_PRIORITY: priority}) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
353 |
334
698cbc6ebec8
core: fixed None instead of empty dict in availableReceived
Goffi <goffi@goffi.org>
parents:
333
diff
changeset
|
354 if not statuses: |
698cbc6ebec8
core: fixed None instead of empty dict in availableReceived
Goffi <goffi@goffi.org>
parents:
333
diff
changeset
|
355 statuses = {} |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
356 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
357 if None in statuses: # we only want string keys |
1417
176de79c8c39
core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
358 statuses[C.PRESENCE_STATUSES_DEFAULT] = statuses.pop(None) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
359 |
1480
8d61160ee4b8
core, plugin watched: new plugin, show an alert when a watched entity goes online
Goffi <goffi@goffi.org>
parents:
1450
diff
changeset
|
360 if not self.host.trigger.point("presenceReceived", entity, show, priority, statuses, self.parent.profile): |
8d61160ee4b8
core, plugin watched: new plugin, show an alert when a watched entity goes online
Goffi <goffi@goffi.org>
parents:
1450
diff
changeset
|
361 return |
8d61160ee4b8
core, plugin watched: new plugin, show an alert when a watched entity goes online
Goffi <goffi@goffi.org>
parents:
1450
diff
changeset
|
362 |
484
23cbdf0a0777
core: presence status + last resource refactored and kept in entitiesCache in memory.py, profile cache is purged on disconnection
Goffi <goffi@goffi.org>
parents:
480
diff
changeset
|
363 self.host.memory.setPresenceStatus(entity, show or "", |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
364 int(priority), statuses, |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
365 self.parent.profile) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
366 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
367 # now it's time to notify frontends |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
368 self.host.bridge.presenceUpdate(entity.full(), show or "", |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
369 int(priority), statuses, |
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
370 self.parent.profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
371 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
372 def unavailableReceived(self, entity, statuses=None): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
373 log.debug(_(u"presence update for [%(entity)s] (unavailable, statuses=%(statuses)s)") % {'entity': entity, C.PRESENCE_STATUSES: statuses}) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
374 |
333
4c835d614bdb
core: fixed a None sent instead of empty dict in unavailableReceived
Goffi <goffi@goffi.org>
parents:
330
diff
changeset
|
375 if not statuses: |
4c835d614bdb
core: fixed a None sent instead of empty dict in unavailableReceived
Goffi <goffi@goffi.org>
parents:
330
diff
changeset
|
376 statuses = {} |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
377 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
378 if None in statuses: # we only want string keys |
1417
176de79c8c39
core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
379 statuses[C.PRESENCE_STATUSES_DEFAULT] = statuses.pop(None) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
380 |
1170
2df6427a5299
plugin OTR: forces FINISHED state if we are in ENCRYPTED state on contact disconnection
souliane <souliane@mailoo.org>
parents:
1167
diff
changeset
|
381 if not self.host.trigger.point("presenceReceived", entity, "unavailable", 0, statuses, self.parent.profile): |
2df6427a5299
plugin OTR: forces FINISHED state if we are in ENCRYPTED state on contact disconnection
souliane <souliane@mailoo.org>
parents:
1167
diff
changeset
|
382 return |
2df6427a5299
plugin OTR: forces FINISHED state if we are in ENCRYPTED state on contact disconnection
souliane <souliane@mailoo.org>
parents:
1167
diff
changeset
|
383 |
1480
8d61160ee4b8
core, plugin watched: new plugin, show an alert when a watched entity goes online
Goffi <goffi@goffi.org>
parents:
1450
diff
changeset
|
384 self.host.memory.setPresenceStatus(entity, C.PRESENCE_UNAVAILABLE, 0, statuses, self.parent.profile) |
8d61160ee4b8
core, plugin watched: new plugin, show an alert when a watched entity goes online
Goffi <goffi@goffi.org>
parents:
1450
diff
changeset
|
385 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
386 # now it's time to notify frontends |
66
8147b4f40809
SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents:
65
diff
changeset
|
387 self.host.bridge.presenceUpdate(entity.full(), "unavailable", 0, statuses, self.parent.profile) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
388 |
611 | 389 def available(self, entity=None, show=None, statuses=None, priority=None): |
1434
b06047e1c1fb
primitivus: fix setting the presence and status
souliane <souliane@mailoo.org>
parents:
1431
diff
changeset
|
390 """Set a presence and statuses. |
b06047e1c1fb
primitivus: fix setting the presence and status
souliane <souliane@mailoo.org>
parents:
1431
diff
changeset
|
391 |
b06047e1c1fb
primitivus: fix setting the presence and status
souliane <souliane@mailoo.org>
parents:
1431
diff
changeset
|
392 @param entity (jid.JID): entity |
b06047e1c1fb
primitivus: fix setting the presence and status
souliane <souliane@mailoo.org>
parents:
1431
diff
changeset
|
393 @param show (unicode): value in ('unavailable', '', 'away', 'xa', 'chat', 'dnd') |
b06047e1c1fb
primitivus: fix setting the presence and status
souliane <souliane@mailoo.org>
parents:
1431
diff
changeset
|
394 @param statuses (dict{unicode: unicode}): multilingual statuses with |
b06047e1c1fb
primitivus: fix setting the presence and status
souliane <souliane@mailoo.org>
parents:
1431
diff
changeset
|
395 the entry key beeing a language code on 2 characters or "default". |
b06047e1c1fb
primitivus: fix setting the presence and status
souliane <souliane@mailoo.org>
parents:
1431
diff
changeset
|
396 """ |
611 | 397 if priority is None: |
398 try: | |
399 priority = int(self.host.memory.getParamA("Priority", "Connection", profile_key=self.parent.profile)) | |
400 except ValueError: | |
401 priority = 0 | |
402 | |
734
b26dfac8e46c
core: bad indentation in SatPresenceProtocol.available
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
403 if statuses is None: |
562
0bb2e0d1c878
core, plugin XEP-0054: avatar upload:
Goffi <goffi@goffi.org>
parents:
549
diff
changeset
|
404 statuses = {} |
734
b26dfac8e46c
core: bad indentation in SatPresenceProtocol.available
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
405 |
b26dfac8e46c
core: bad indentation in SatPresenceProtocol.available
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
406 # default for us is None for wokkel |
b26dfac8e46c
core: bad indentation in SatPresenceProtocol.available
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
407 # so we must temporarily switch to wokkel's convention... |
1417
176de79c8c39
core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
408 if C.PRESENCE_STATUSES_DEFAULT in statuses: |
176de79c8c39
core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
409 statuses[None] = statuses.pop(C.PRESENCE_STATUSES_DEFAULT) |
379
adcc41e4d6ea
core: Fix status update crash
Xavier Maillard <xavier@maillard.im>
parents:
347
diff
changeset
|
410 |
734
b26dfac8e46c
core: bad indentation in SatPresenceProtocol.available
souliane <souliane@mailoo.org>
parents:
726
diff
changeset
|
411 presence_elt = xmppim.AvailablePresence(entity, show, statuses, priority) |
379
adcc41e4d6ea
core: Fix status update crash
Xavier Maillard <xavier@maillard.im>
parents:
347
diff
changeset
|
412 |
562
0bb2e0d1c878
core, plugin XEP-0054: avatar upload:
Goffi <goffi@goffi.org>
parents:
549
diff
changeset
|
413 # ... before switching back |
0bb2e0d1c878
core, plugin XEP-0054: avatar upload:
Goffi <goffi@goffi.org>
parents:
549
diff
changeset
|
414 if None in statuses: |
1417
176de79c8c39
core, plugin XEP-0045, frontends: change frontend method "setStatusOnline" for "setPresenceStatus":
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
415 statuses['default'] = statuses.pop(None) |
379
adcc41e4d6ea
core: Fix status update crash
Xavier Maillard <xavier@maillard.im>
parents:
347
diff
changeset
|
416 |
1167
fe102b4cf275
core (xmpp): fixes SatPresenceProtocol.available to prevent an eventual code skipping
souliane <souliane@mailoo.org>
parents:
1089
diff
changeset
|
417 if not self.host.trigger.point("presence_available", presence_elt, self.parent): |
fe102b4cf275
core (xmpp): fixes SatPresenceProtocol.available to prevent an eventual code skipping
souliane <souliane@mailoo.org>
parents:
1089
diff
changeset
|
418 return |
fe102b4cf275
core (xmpp): fixes SatPresenceProtocol.available to prevent an eventual code skipping
souliane <souliane@mailoo.org>
parents:
1089
diff
changeset
|
419 self.send(presence_elt) |
fe102b4cf275
core (xmpp): fixes SatPresenceProtocol.available to prevent an eventual code skipping
souliane <souliane@mailoo.org>
parents:
1089
diff
changeset
|
420 |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
421 def subscribed(self, entity): |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
422 xmppim.PresenceClientProtocol.subscribed(self, entity) |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
423 self.host.memory.delWaitingSub(entity.userhost(), self.parent.profile) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
424 item = self.parent.roster.getItem(entity) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
425 if not item or not item.subscriptionTo: # we automatically subscribe to 'to' presence |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
426 log.debug(_('sending automatic "from" subscription request')) |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
427 self.subscribe(entity) |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
428 |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
429 def unsubscribed(self, entity): |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
430 xmppim.PresenceClientProtocol.unsubscribed(self, entity) |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
431 self.host.memory.delWaitingSub(entity.userhost(), self.parent.profile) |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
432 |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
433 def subscribedReceived(self, entity): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
434 log.debug(_(u"subscription approved for [%s]") % entity.userhost()) |
66
8147b4f40809
SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents:
65
diff
changeset
|
435 self.host.bridge.subscribe('subscribed', entity.userhost(), self.parent.profile) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
436 |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
437 def unsubscribedReceived(self, entity): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
438 log.debug(_(u"unsubscription confirmed for [%s]") % entity.userhost()) |
66
8147b4f40809
SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents:
65
diff
changeset
|
439 self.host.bridge.subscribe('unsubscribed', entity.userhost(), self.parent.profile) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
440 |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
441 def subscribeReceived(self, entity): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
442 log.debug(_(u"subscription request from [%s]") % entity.userhost()) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
443 item = self.parent.roster.getItem(entity) |
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
444 if item and item.subscriptionTo: |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
445 # We automatically accept subscription if we are already subscribed to contact presence |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
446 log.debug(_('sending automatic subscription acceptance')) |
346
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
447 self.subscribed(entity) |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
448 else: |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
449 self.host.memory.addWaitingSub('subscribe', entity.userhost(), self.parent.profile) |
ca3a041fed30
core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents:
341
diff
changeset
|
450 self.host.bridge.subscribe('subscribe', entity.userhost(), self.parent.profile) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
451 |
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
452 def unsubscribeReceived(self, entity): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
453 log.debug(_(u"unsubscription asked for [%s]") % entity.userhost()) |
466
448ce3c9e2ac
core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents:
461
diff
changeset
|
454 item = self.parent.roster.getItem(entity) |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
455 if item and item.subscriptionFrom: # we automatically remove contact |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
456 log.debug(_('automatic contact deletion')) |
875
19d7d077478a
core (xmpp): fix automatic contact deletion
souliane <souliane@mailoo.org>
parents:
819
diff
changeset
|
457 self.host.delContact(entity, self.parent.profile) |
66
8147b4f40809
SàT: multi-profile: DBus signals and frontend adaptation (first draft)
Goffi <goffi@goffi.org>
parents:
65
diff
changeset
|
458 self.host.bridge.subscribe('unsubscribe', entity.userhost(), self.parent.profile) |
13
bd9e9997d540
wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents:
12
diff
changeset
|
459 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
460 |
14 | 461 class SatDiscoProtocol(disco.DiscoClientProtocol): |
462 def __init__(self, host): | |
463 disco.DiscoClientProtocol.__init__(self) | |
464 | |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
465 |
15
218ec9984fa5
wokkel integration part III + memory saved again
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
466 class SatFallbackHandler(generic.FallbackHandler): |
218ec9984fa5
wokkel integration part III + memory saved again
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
467 def __init__(self, host): |
218ec9984fa5
wokkel integration part III + memory saved again
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
468 generic.FallbackHandler.__init__(self) |
218ec9984fa5
wokkel integration part III + memory saved again
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
469 |
218ec9984fa5
wokkel integration part III + memory saved again
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
470 def iqFallback(self, iq): |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
471 if iq.handled is True: |
292
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
472 return |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
960
diff
changeset
|
473 log.debug(u"iqFallback: xml = [%s]" % (iq.toXml())) |
15
218ec9984fa5
wokkel integration part III + memory saved again
Goffi <goffi@goffi.org>
parents:
14
diff
changeset
|
474 generic.FallbackHandler.iqFallback(self, iq) |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
475 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
476 |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
477 class RegisteringAuthenticator(xmlstream.ConnectAuthenticator): |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
478 |
1037
6e975c6b0faf
core, memory, bridge, plugin misc_register_account: move registerNewAccount to a new plugin:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
479 def __init__(self, host, jabber_host, user_login, user_pass, email, deferred, profile): |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
480 xmlstream.ConnectAuthenticator.__init__(self, jabber_host) |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
481 self.host = host |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
482 self.jabber_host = jabber_host |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
483 self.user_login = user_login |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
484 self.user_pass = user_pass |
336
953536246d9d
core: added email in registerNewAccount
Goffi <goffi@goffi.org>
parents:
334
diff
changeset
|
485 self.user_email = email |
1037
6e975c6b0faf
core, memory, bridge, plugin misc_register_account: move registerNewAccount to a new plugin:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
486 self.deferred = deferred |
538
2c4016921403
core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents:
527
diff
changeset
|
487 self.profile = profile |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
488 log.debug(_(u"Registration asked for %(user)s@%(host)s") % {'user': user_login, 'host': jabber_host}) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
489 |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
490 def connectionMade(self): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
491 log.debug(_(u"Connection made with %s" % self.jabber_host)) |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
492 self.xmlstream.namespace = "jabber:client" |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
493 self.xmlstream.sendHeader() |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
494 |
1551
591c32dbfb0b
core (client): add IQ method to easily create an IQ stanza with the current xmlstream, and manage result with a Deferred.
Goffi <goffi@goffi.org>
parents:
1522
diff
changeset
|
495 iq = xmlstream.IQ(self.xmlstream, 'set') |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
496 iq["to"] = self.jabber_host |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
497 query = iq.addElement(('jabber:iq:register', 'query')) |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
498 _user = query.addElement('username') |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
499 _user.addContent(self.user_login) |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
500 _pass = query.addElement('password') |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
501 _pass.addContent(self.user_pass) |
336
953536246d9d
core: added email in registerNewAccount
Goffi <goffi@goffi.org>
parents:
334
diff
changeset
|
502 if self.user_email: |
953536246d9d
core: added email in registerNewAccount
Goffi <goffi@goffi.org>
parents:
334
diff
changeset
|
503 _email = query.addElement('email') |
953536246d9d
core: added email in registerNewAccount
Goffi <goffi@goffi.org>
parents:
334
diff
changeset
|
504 _email.addContent(self.user_email) |
1037
6e975c6b0faf
core, memory, bridge, plugin misc_register_account: move registerNewAccount to a new plugin:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
505 d = iq.send(self.jabber_host).addCallbacks(self.registrationAnswer, self.registrationFailure) |
6e975c6b0faf
core, memory, bridge, plugin misc_register_account: move registerNewAccount to a new plugin:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
506 d.chainDeferred(self.deferred) |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
507 |
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
508 def registrationAnswer(self, answer): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
509 log.debug(_(u"Registration answer: %s") % answer.toXml()) |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
510 self.xmlstream.sendFooter() |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
511 |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
25
diff
changeset
|
512 def registrationFailure(self, failure): |
1409
3265a2639182
massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents:
1398
diff
changeset
|
513 log.info(_("Registration failure: %s") % unicode(failure.value)) |
16
0a024d5e0cd0
New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents:
15
diff
changeset
|
514 self.xmlstream.sendFooter() |
1037
6e975c6b0faf
core, memory, bridge, plugin misc_register_account: move registerNewAccount to a new plugin:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
515 raise failure.value |
292
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
516 |
589
d1b4805124a1
Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
517 |
292
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
518 class SatVersionHandler(generic.VersionHandler): |
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
519 |
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
520 def getDiscoInfo(self, requestor, target, node): |
461 | 521 #XXX: We need to work around wokkel's behaviour (namespace not added if there is a |
292
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
522 # node) as it cause issues with XEP-0115 & PEP (XEP-0163): there is a node when server |
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
523 # ask for disco info, and not when we generate the key, so the hash is used with different |
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
524 # disco features, and when the server (seen on ejabberd) generate its own hash for security check |
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
525 # it reject our features (resulting in e.g. no notification on PEP) |
f7bd973bba5a
core: wokkel behavious work around on VersionHandler to avoid XEP-0115 issue with ejabberd (see comments for details)
Goffi <goffi@goffi.org>
parents:
288
diff
changeset
|
526 return generic.VersionHandler.getDiscoInfo(self, requestor, target, None) |
666
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
527 |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
528 class SatIdentityHandler(XMPPHandler): |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
529 """ Manage disco Identity of SàT. Currently, we use "client/pc/Salut à Toi", but as |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
530 SàT is multi-frontends and can be used on mobile devices, as a bot, with a web frontend, |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
531 etc, we should implement a way to dynamically update identities through the bridge """ |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
532 #TODO: dynamic identity update (see docstring). Note that a XMPP entity can have several identities |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
533 implements(iwokkel.IDisco) |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
534 |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
535 def getDiscoInfo(self, requestor, target, nodeIdentifier=''): |
923 | 536 return [disco.DiscoIdentity(u"client", u"pc", C.APP_NAME)] |
666
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
537 |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
538 def getDiscoItems(self, requestor, target, nodeIdentifier=''): |
2a7185b8452c
core: added SatIdentityHandler for Disco Identity, and set identity to "client/pc/Salut à Toi"
Goffi <goffi@goffi.org>
parents:
663
diff
changeset
|
539 return [] |