Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0115.py @ 2787:298408833ec2
memory (sqlite): optimizations
indexes were missing on foreign keys for "message", "subject" and "thread" tables, seriously impacting performances.
In addition to those indexes, two indexes have been added to speed ordering by timestamp on "history", and one on "files" table.
history.rowid is not used anymore as there is an index on (profile_id, received_timestamp) which will speed up the query.
Primary keys order has been changed to use automatic index in most common cases (filtering by profile_id then namespace).
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 19 Jan 2019 22:49:32 +0100 |
parents | 003b8b4b56a7 |
children | 770ec685ff1f |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
1 #!/usr/bin/env python2 |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
4 # SAT plugin for managing xep-0115 |
2771 | 5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org) |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
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:
594
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:
594
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:
594
diff
changeset
|
10 # (at your option) any later version. |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
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:
594
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:
594
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:
594
diff
changeset
|
15 # GNU Affero General Public License for more details. |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
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:
594
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
771 | 20 from sat.core.i18n import _ |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
811
diff
changeset
|
21 from sat.core.constants import Const as C |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
978
diff
changeset
|
22 from sat.core.log import getLogger |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
23 |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
978
diff
changeset
|
24 log = getLogger(__name__) |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from twisted.words.xish import domish |
941
c6d8fc63b1db
core, plugins: host.getClient now raise an exception instead of returning None when no profile is found, plugins have been adapted consequently and a bit cleaned
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
26 from twisted.words.protocols.jabber import jid |
1244
c3884a63efde
plugin XEP-0115: better disco error handling
souliane <souliane@mailoo.org>
parents:
1232
diff
changeset
|
27 from twisted.internet import defer, error |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 from zope.interface import implements |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 from wokkel import disco, iwokkel |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 try: |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 from twisted.words.protocols.xmlstream import XMPPHandler |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 except ImportError: |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 from wokkel.subprotocols import XMPPHandler |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
36 PRESENCE = "/presence" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
37 NS_ENTITY_CAPABILITY = "http://jabber.org/protocol/caps" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
38 NS_CAPS_OPTIMIZE = "http://jabber.org/protocol/caps#optimize" |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
39 CAPABILITY_UPDATE = PRESENCE + '/c[@xmlns="' + NS_ENTITY_CAPABILITY + '"]' |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 PLUGIN_INFO = { |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
42 C.PI_NAME: "XEP 0115 Plugin", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
43 C.PI_IMPORT_NAME: "XEP-0115", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
44 C.PI_TYPE: "XEP", |
2504
67cc54b01a12
plugin file sharing component: first draft:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
45 C.PI_MODES: C.PLUG_MODE_BOTH, |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
46 C.PI_PROTOCOLS: ["XEP-0115"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
47 C.PI_DEPENDENCIES: [], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
48 C.PI_MAIN: "XEP_0115", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
49 C.PI_HANDLER: "yes", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
50 C.PI_DESCRIPTION: _("""Implementation of entity capabilities"""), |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 } |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
53 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
54 class XEP_0115(object): |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
55 cap_hash = None # capabilities hash is class variable as it is common to all profiles |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 def __init__(self, host): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
978
diff
changeset
|
58 log.info(_("Plugin XEP_0115 initialization")) |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 self.host = host |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
60 host.trigger.add("Presence send", self._presenceTrigger) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
61 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
62 def getHandler(self, client): |
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
63 return XEP_0115_handler(self, client.profile) |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
65 @defer.inlineCallbacks |
2543
60758de1c227
plugin XEP-0115: fixed caps initial check
Goffi <goffi@goffi.org>
parents:
2533
diff
changeset
|
66 def _prepareCaps(self, client): |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
67 # we have to calculate hash for client |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
68 # because disco infos/identities may change between clients |
957
2eb4fef29795
plulgin XEP-0115: fixed caps_optimize init
Goffi <goffi@goffi.org>
parents:
953
diff
changeset
|
69 |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
70 # optimize check |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
71 client._caps_optimize = yield self.host.hasFeature(client, NS_CAPS_OPTIMIZE) |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
72 if client._caps_optimize: |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
73 log.info(_(u"Caps optimisation enabled")) |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
74 client._caps_sent = False |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
75 else: |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
76 log.warning(_(u"Caps optimisation not available")) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
77 |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
78 # hash generation |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
79 _infos = yield client.discoHandler.info(client.jid, client.jid, "") |
962
b280cf4cdf25
plugin XEP-0115: fixed bad disco_infos construction
Goffi <goffi@goffi.org>
parents:
957
diff
changeset
|
80 disco_infos = disco.DiscoInfo() |
b280cf4cdf25
plugin XEP-0115: fixed bad disco_infos construction
Goffi <goffi@goffi.org>
parents:
957
diff
changeset
|
81 for item in _infos: |
b280cf4cdf25
plugin XEP-0115: fixed bad disco_infos construction
Goffi <goffi@goffi.org>
parents:
957
diff
changeset
|
82 disco_infos.append(item) |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
83 cap_hash = client._caps_hash = self.host.memory.disco.generateHash(disco_infos) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
84 log.info( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
85 u"Our capability hash has been generated: [{cap_hash}]".format( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
86 cap_hash=cap_hash |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
87 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
88 ) |
2587
e70023e84974
core (disco): fixed disco capabilities (empty disco was used)
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
89 log.debug(u"Generating capability domish.Element") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
90 c_elt = domish.Element((NS_ENTITY_CAPABILITY, "c")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
91 c_elt["hash"] = "sha-1" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
92 c_elt["node"] = C.APP_URL |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
93 c_elt["ver"] = cap_hash |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
94 client._caps_elt = c_elt |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
95 if client._caps_optimize: |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
96 client._caps_sent = False |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
97 if cap_hash not in self.host.memory.disco.hashes: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
98 self.host.memory.disco.hashes[cap_hash] = disco_infos |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
99 self.host.memory.updateEntityData( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
100 client.jid, C.ENTITY_CAP_HASH, cap_hash, profile_key=client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
101 ) |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
102 |
2543
60758de1c227
plugin XEP-0115: fixed caps initial check
Goffi <goffi@goffi.org>
parents:
2533
diff
changeset
|
103 def _presenceAddElt(self, client, obj): |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
104 if client._caps_optimize: |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
105 if client._caps_sent: |
2543
60758de1c227
plugin XEP-0115: fixed caps initial check
Goffi <goffi@goffi.org>
parents:
2533
diff
changeset
|
106 return |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
107 client.caps_sent = True |
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
108 obj.addChild(client._caps_elt) |
2543
60758de1c227
plugin XEP-0115: fixed caps initial check
Goffi <goffi@goffi.org>
parents:
2533
diff
changeset
|
109 |
60758de1c227
plugin XEP-0115: fixed caps initial check
Goffi <goffi@goffi.org>
parents:
2533
diff
changeset
|
110 def _presenceTrigger(self, client, obj, presence_d): |
60758de1c227
plugin XEP-0115: fixed caps initial check
Goffi <goffi@goffi.org>
parents:
2533
diff
changeset
|
111 if not hasattr(client, "_caps_optimize"): |
60758de1c227
plugin XEP-0115: fixed caps initial check
Goffi <goffi@goffi.org>
parents:
2533
diff
changeset
|
112 presence_d.addCallback(lambda __: self._prepareCaps(client)) |
60758de1c227
plugin XEP-0115: fixed caps initial check
Goffi <goffi@goffi.org>
parents:
2533
diff
changeset
|
113 |
60758de1c227
plugin XEP-0115: fixed caps initial check
Goffi <goffi@goffi.org>
parents:
2533
diff
changeset
|
114 presence_d.addCallback(lambda __: self._presenceAddElt(client, obj)) |
2533
8d82a62fa098
core (disco), plugin XEP-0115: client use + capabilities hash improvment:
Goffi <goffi@goffi.org>
parents:
2504
diff
changeset
|
115 return True |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
116 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
117 |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 class XEP_0115_handler(XMPPHandler): |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 implements(iwokkel.IDisco) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
120 |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 def __init__(self, plugin_parent, profile): |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 self.plugin_parent = plugin_parent |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 self.host = plugin_parent.host |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 self.profile = profile |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 def connectionInitialized(self): |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
127 self.xmlstream.addObserver(CAPABILITY_UPDATE, self.update) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
128 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
129 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
130 return [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
131 disco.DiscoFeature(NS_ENTITY_CAPABILITY), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
132 disco.DiscoFeature(NS_CAPS_OPTIMIZE), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
133 ] |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
135 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 return [] |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
138 def update(self, presence): |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 """ |
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 Manage the capabilities of the entity |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
141 |
1244
c3884a63efde
plugin XEP-0115: better disco error handling
souliane <souliane@mailoo.org>
parents:
1232
diff
changeset
|
142 Check if we know the version of this capabilities and get the capabilities if necessary |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
143 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
144 from_jid = jid.JID(presence["from"]) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
145 c_elem = presence.elements(NS_ENTITY_CAPABILITY, "c").next() |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
147 c_ver = c_elem["ver"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
148 c_hash = c_elem["hash"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
149 c_node = c_elem["node"] |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
151 log.warning(_(u"Received invalid capabilities tag: %s") % c_elem.toXml()) |
282
6a0c6d8e119d
added plugin xep-0115: entity capabilities
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 return |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
153 |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
154 if c_ver in self.host.memory.disco.hashes: |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
155 # we already know the hash, we update the jid entity |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
156 log.debug( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
157 u"hash [%(hash)s] already in cache, updating entity [%(jid)s]" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
158 % {"hash": c_ver, "jid": from_jid.full()} |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
159 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
160 self.host.memory.updateEntityData( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
161 from_jid, C.ENTITY_CAP_HASH, c_ver, profile_key=self.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
162 ) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
163 return |
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
164 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
165 if c_hash != "sha-1": # unknown hash method |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
166 log.warning( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
167 _( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
168 u"Unknown hash method for entity capabilities: [%(hash_method)s] (entity: %(jid)s, node: %(node)s)" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
169 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
170 % {"hash_method": c_hash, "jid": from_jid, "node": c_node} |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
171 ) |
1244
c3884a63efde
plugin XEP-0115: better disco error handling
souliane <souliane@mailoo.org>
parents:
1232
diff
changeset
|
172 |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
173 def cb(__): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
174 computed_hash = self.host.memory.getEntityDatum( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
175 from_jid, C.ENTITY_CAP_HASH, self.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
176 ) |
1244
c3884a63efde
plugin XEP-0115: better disco error handling
souliane <souliane@mailoo.org>
parents:
1232
diff
changeset
|
177 if computed_hash != c_ver: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
178 log.warning( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
179 _( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
180 u"Computed hash differ from given hash:\ngiven: [%(given_hash)s]\ncomputed: [%(computed_hash)s]\n(entity: %(jid)s, node: %(node)s)" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
181 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
182 % { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
183 "given_hash": c_ver, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
184 "computed_hash": computed_hash, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
185 "jid": from_jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
186 "node": c_node, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
187 } |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
188 ) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
189 |
1244
c3884a63efde
plugin XEP-0115: better disco error handling
souliane <souliane@mailoo.org>
parents:
1232
diff
changeset
|
190 def eb(failure): |
c3884a63efde
plugin XEP-0115: better disco error handling
souliane <souliane@mailoo.org>
parents:
1232
diff
changeset
|
191 if isinstance(failure.value, error.ConnectionDone): |
c3884a63efde
plugin XEP-0115: better disco error handling
souliane <souliane@mailoo.org>
parents:
1232
diff
changeset
|
192 return |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
193 msg = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
194 failure.value.condition |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
195 if hasattr(failure.value, "condition") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
196 else failure.getErrorMessage() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
197 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
198 log.error( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
199 _(u"Couldn't retrieve disco info for {jid}: {error}").format( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
200 jid=from_jid.full(), error=msg |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
201 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2587
diff
changeset
|
202 ) |
1244
c3884a63efde
plugin XEP-0115: better disco error handling
souliane <souliane@mailoo.org>
parents:
1232
diff
changeset
|
203 |
2148
a543eda2c923
core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
204 d = self.host.getDiscoInfos(self.parent, from_jid) |
1244
c3884a63efde
plugin XEP-0115: better disco error handling
souliane <souliane@mailoo.org>
parents:
1232
diff
changeset
|
205 d.addCallbacks(cb, eb) |
944
e1842ebcb2f3
core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
206 # TODO: me must manage the full algorithm described at XEP-0115 #5.4 part 3 |