Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0260.py @ 4226:3f7ca590a5da
cli (pubsub): use `PEP` when service is not specified in error message.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 05 Mar 2024 17:31:56 +0100 |
parents | b86912d3fd33 |
children | e11b13418ba6 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
1560 | 3 |
4 # SAT plugin for Jingle (XEP-0260) | |
3479 | 5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
1560 | 6 |
7 # This program is free software: you can redistribute it and/or modify | |
8 # it under the terms of the GNU Affero General Public License as published by | |
9 # the Free Software Foundation, either version 3 of the License, or | |
10 # (at your option) any later version. | |
11 | |
12 # This program is distributed in the hope that it will be useful, | |
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 # GNU Affero General Public License for more details. | |
16 | |
17 # You should have received a copy of the GNU Affero General Public License | |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
20 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
21 from libervia.backend.core.constants import Const as C |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
22 from libervia.backend.core.log import getLogger |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
23 |
1560 | 24 log = getLogger(__name__) |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
25 from libervia.backend.core import exceptions |
1560 | 26 from wokkel import disco, iwokkel |
3028 | 27 from zope.interface import implementer |
1560 | 28 from twisted.words.xish import domish |
29 from twisted.words.protocols.jabber import jid | |
30 from twisted.internet import defer | |
31 import uuid | |
32 | |
33 try: | |
34 from twisted.words.protocols.xmlstream import XMPPHandler | |
35 except ImportError: | |
36 from wokkel.subprotocols import XMPPHandler | |
37 | |
38 | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
39 NS_JINGLE_S5B = "urn:xmpp:jingle:transports:s5b:1" |
1560 | 40 |
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: "Jingle SOCKS5 Bytestreams", |
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-0260", |
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:
2489
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-0260"], |
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: ["XEP-0166", "XEP-0065"], |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
48 C.PI_RECOMMENDATIONS: ["XEP-0261"], # needed for fallback |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
49 C.PI_MAIN: "XEP_0260", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
50 C.PI_HANDLER: "yes", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
51 C.PI_DESCRIPTION: _("""Implementation of Jingle SOCKS5 Bytestreams"""), |
1560 | 52 } |
53 | |
54 | |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
55 class ProxyError(Exception): |
1756
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
56 def __str__(self): |
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
57 return "an error happened while trying to use the proxy" |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
58 |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
59 |
1560 | 60 class XEP_0260(object): |
61 # TODO: udp handling | |
62 | |
63 def __init__(self, host): | |
64 log.info(_("plugin Jingle SOCKS5 Bytestreams")) | |
65 self.host = host | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
66 self._j = host.plugins["XEP-0166"] # shortcut to access jingle |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
67 self._s5b = host.plugins["XEP-0065"] # and socks5 bytestream |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
68 try: |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
69 self._jingle_ibb = host.plugins["XEP-0261"] |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
70 except KeyError: |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
71 self._jingle_ibb = None |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
72 self._j.register_transport(NS_JINGLE_S5B, self._j.TRANSPORT_STREAMING, self, 100) |
1560 | 73 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
74 def get_handler(self, client): |
1560 | 75 return XEP_0260_handler() |
76 | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
77 def _parse_candidates(self, transport_elt): |
1560 | 78 """Parse <candidate> elements |
79 | |
80 @param transport_elt(domish.Element): parent <transport> element | |
81 @return (list[plugin_xep_0065.Candidate): list of parsed candidates | |
82 """ | |
83 candidates = [] | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
84 for candidate_elt in transport_elt.elements(NS_JINGLE_S5B, "candidate"): |
1560 | 85 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
86 cid = candidate_elt["cid"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
87 host = candidate_elt["host"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
88 jid_ = jid.JID(candidate_elt["jid"]) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
89 port = int(candidate_elt.getAttribute("port", 1080)) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
90 priority = int(candidate_elt["priority"]) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
91 type_ = candidate_elt.getAttribute("type", self._s5b.TYPE_DIRECT) |
1560 | 92 except (KeyError, ValueError): |
93 raise exceptions.DataError() | |
94 candidate = self._s5b.Candidate(host, port, type_, priority, jid_, cid) | |
95 candidates.append(candidate) | |
96 # self._s5b.registerCandidate(candidate) | |
97 return candidates | |
98 | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
99 def _build_candidates(self, session, candidates, sid, session_hash, client, mode=None): |
1560 | 100 """Build <transport> element with candidates |
101 | |
102 @param session(dict): jingle session data | |
103 @param candidates(iterator[plugin_xep_0065.Candidate]): iterator of candidates to add | |
104 @param sid(unicode): transport stream id | |
105 @param client: %(doc_client)s | |
106 @param mode(str, None): 'tcp' or 'udp', or None to have no attribute | |
107 @return (domish.Element): parent <transport> element where <candidate> elements must be added | |
108 """ | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
109 proxy = next( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
110 ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
111 candidate |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
112 for candidate in candidates |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
113 if candidate.type == self._s5b.TYPE_PROXY |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
114 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
115 None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
116 ) |
1560 | 117 transport_elt = domish.Element((NS_JINGLE_S5B, "transport")) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
118 transport_elt["sid"] = sid |
1560 | 119 if proxy is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
120 transport_elt["dstaddr"] = session_hash |
1560 | 121 if mode is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
122 transport_elt["mode"] = "tcp" # XXX: we only manage tcp for now |
1560 | 123 |
124 for candidate in candidates: | |
3028 | 125 log.debug("Adding candidate: {}".format(candidate)) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
126 candidate_elt = transport_elt.addElement("candidate", NS_JINGLE_S5B) |
1560 | 127 if candidate.id is None: |
3028 | 128 candidate.id = str(uuid.uuid4()) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
129 candidate_elt["cid"] = candidate.id |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
130 candidate_elt["host"] = candidate.host |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
131 candidate_elt["jid"] = candidate.jid.full() |
3028 | 132 candidate_elt["port"] = str(candidate.port) |
133 candidate_elt["priority"] = str(candidate.priority) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
134 candidate_elt["type"] = candidate.type |
1560 | 135 return transport_elt |
136 | |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
137 async def jingle_session_init(self, client, session, content_name): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
138 content_data = session["contents"][content_name] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
139 transport_data = content_data["transport_data"] |
3028 | 140 sid = transport_data["sid"] = str(uuid.uuid4()) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
141 session_hash = transport_data["session_hash"] = self._s5b.get_session_hash( |
3028 | 142 session["local_jid"], session["peer_jid"], sid |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
143 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
144 transport_data["peer_session_hash"] = self._s5b.get_session_hash( |
3028 | 145 session["peer_jid"], session["local_jid"], sid |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
146 ) # requester and target are inversed for peer candidates |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
147 transport_data["stream_d"] = self._s5b.register_hash(client, session_hash, None) |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
148 candidates = transport_data["candidates"] = await self._s5b.get_candidates( |
2927
69e4716d6268
plugins (jingle) file transfer: use initial "from" attribute as local jid instead of client.jid:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
149 client, session["local_jid"]) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
150 mode = "tcp" # XXX: we only manage tcp for now |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
151 transport_elt = self._build_candidates( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
152 session, candidates, sid, session_hash, client, mode |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
153 ) |
1560 | 154 |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
155 return transport_elt |
1560 | 156 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
157 def _proxy_activated_cb(self, iq_result_elt, client, candidate, session, content_name): |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
158 """Called when activation confirmation has been received from proxy |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
159 |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
160 cf XEP-0260 § 2.4 |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
161 """ |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
162 # now that the proxy is activated, we have to inform other peer |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
163 content_data = session["contents"][content_name] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
164 iq_elt, transport_elt = self._j.build_action( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
165 client, self._j.A_TRANSPORT_INFO, session, content_name |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
166 ) |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
167 transport_elt["sid"] = content_data["transport_data"]["sid"] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
168 activated_elt = transport_elt.addElement("activated") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
169 activated_elt["cid"] = candidate.id |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
170 iq_elt.send() |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
171 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
172 def _proxy_activated_eb(self, stanza_error, client, candidate, session, content_name): |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
173 """Called when activation error has been received from proxy |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
174 |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
175 cf XEP-0260 § 2.4 |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
176 """ |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
177 # TODO: fallback to IBB |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
178 # now that the proxy is activated, we have to inform other peer |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
179 content_data = session["contents"][content_name] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
180 iq_elt, transport_elt = self._j.build_action( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
181 client, self._j.A_TRANSPORT_INFO, session, content_name |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
182 ) |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
183 transport_elt["sid"] = content_data["transport_data"]["sid"] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
184 transport_elt.addElement("proxy-error") |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
185 iq_elt.send() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
186 log.warning( |
3028 | 187 "Can't activate proxy, we need to fallback to IBB: {reason}".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
188 reason=stanza_error.value.condition |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
189 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
190 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
191 self.do_fallback(session, content_name, client) |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
192 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
193 def _found_peer_candidate( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
194 self, candidate, session, transport_data, content_name, client |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
195 ): |
1560 | 196 """Called when the best candidate from other peer is found |
197 | |
198 @param candidate(XEP_0065.Candidate, None): selected candidate, | |
199 or None if no candidate is accessible | |
200 @param session(dict): session data | |
201 @param transport_data(dict): transport data | |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
202 @param content_name(unicode): name of the current content |
1560 | 203 @param client(unicode): %(doc_client)s |
204 """ | |
205 | |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
206 content_data = session["contents"][content_name] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
207 transport_data["best_candidate"] = candidate |
1560 | 208 # we need to disconnect all non selected candidates before removing them |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
209 for c in transport_data["peer_candidates"]: |
1560 | 210 if c is None or c is candidate: |
211 continue | |
212 c.discard() | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
213 del transport_data["peer_candidates"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
214 iq_elt, transport_elt = self._j.build_action( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
215 client, self._j.A_TRANSPORT_INFO, session, content_name |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
216 ) |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
217 transport_elt["sid"] = content_data["transport_data"]["sid"] |
1560 | 218 if candidate is None: |
3028 | 219 log.warning("Can't connect to any peer candidate") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
220 candidate_elt = transport_elt.addElement("candidate-error") |
1560 | 221 else: |
3028 | 222 log.info("Found best peer candidate: {}".format(str(candidate))) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
223 candidate_elt = transport_elt.addElement("candidate-used") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
224 candidate_elt["cid"] = candidate.id |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
225 iq_elt.send() # TODO: check result stanza |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
226 self._check_candidates(session, content_name, transport_data, client) |
1560 | 227 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
228 def _check_candidates(self, session, content_name, transport_data, client): |
1560 | 229 """Called when a candidate has been choosed |
230 | |
231 if we have both candidates, we select one, or fallback to an other transport | |
232 @param session(dict): session data | |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
233 @param content_name(unicode): name of the current content |
1560 | 234 @param transport_data(dict): transport data |
235 @param client(unicode): %(doc_client)s | |
236 """ | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
237 content_data = session["contents"][content_name] |
1560 | 238 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
239 best_candidate = transport_data["best_candidate"] |
1560 | 240 except KeyError: |
241 # we have not our best candidate yet | |
242 return | |
243 try: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
244 peer_best_candidate = transport_data["peer_best_candidate"] |
1560 | 245 except KeyError: |
246 # we have not peer best candidate yet | |
247 return | |
248 | |
249 # at this point we have both candidates, it's time to choose one | |
250 if best_candidate is None or peer_best_candidate is None: | |
251 choosed_candidate = best_candidate or peer_best_candidate | |
252 else: | |
253 if best_candidate.priority == peer_best_candidate.priority: | |
254 # same priority, we choose initiator one according to XEP-0260 §2.4 #4 | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
255 log.debug( |
3028 | 256 "Candidates have same priority, we select the one choosed by initiator" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
257 ) |
3028 | 258 if session["initiator"] == session["local_jid"]: |
1560 | 259 choosed_candidate = best_candidate |
260 else: | |
261 choosed_candidate = peer_best_candidate | |
262 else: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
263 choosed_candidate = max( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
264 best_candidate, peer_best_candidate, key=lambda c: c.priority |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
265 ) |
1560 | 266 |
267 if choosed_candidate is None: | |
3028 | 268 log.warning("Socks5 negociation failed, we need to fallback to IBB") |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
269 self.do_fallback(session, content_name, client) |
1560 | 270 else: |
1571
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
271 if choosed_candidate == peer_best_candidate: |
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
272 # peer_best_candidate was choosed from the candidates we have sent |
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
273 # so our_candidate is true if choosed_candidate is peer_best_candidate |
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
274 our_candidate = True |
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
275 # than also mean that best_candidate must be discarded ! |
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
276 try: |
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
277 best_candidate.discard() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
278 except AttributeError: # but it can be None |
1571
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
279 pass |
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
280 else: |
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1570
diff
changeset
|
281 our_candidate = False |
1560 | 282 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
283 log.info( |
3028 | 284 "Socks5 negociation successful, {who} candidate will be used: {candidate}".format( |
285 who="our" if our_candidate else "other peer", | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
286 candidate=choosed_candidate, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
287 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
288 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
289 del transport_data["best_candidate"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
290 del transport_data["peer_best_candidate"] |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
291 |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
292 if choosed_candidate.type == self._s5b.TYPE_PROXY: |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
293 # the stream transfer need to wait for proxy activation |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
294 # (see XEP-0260 § 2.4) |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
295 if our_candidate: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
296 d = self._s5b.connect_candidate( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
297 client, choosed_candidate, transport_data["session_hash"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
298 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
299 d.addCallback( |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
300 lambda __: choosed_candidate.activate( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
301 transport_data["sid"], session["peer_jid"], client |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
302 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
303 ) |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
304 args = [client, choosed_candidate, session, content_name] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
305 d.addCallbacks( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
306 self._proxy_activated_cb, self._proxy_activated_eb, args, None, args |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
307 ) |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
308 else: |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
309 # this Deferred will be called when we'll receive activation confirmation from other peer |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
310 d = transport_data["activation_d"] = defer.Deferred() |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
311 else: |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
312 d = defer.succeed(None) |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
313 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
314 if content_data["senders"] == session["role"]: |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
315 # we can now start the stream transfer (or start it after proxy activation) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
316 d.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
317 lambda __: choosed_candidate.start_transfer( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
318 transport_data["session_hash"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
319 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
320 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
321 d.addErrback(self._start_eb, session, content_name, client) |
1756
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
322 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
323 def _start_eb(self, fail, session, content_name, client): |
1756
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
324 """Called when it's not possible to start the transfer |
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
325 |
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
326 Will try to fallback to IBB |
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
327 """ |
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
328 try: |
3028 | 329 reason = str(fail.value) |
1756
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
330 except AttributeError: |
3028 | 331 reason = str(fail) |
332 log.warning("Cant start transfert, we'll try fallback method: {}".format(reason)) | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
333 self.do_fallback(session, content_name, client) |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
334 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
335 def _candidate_info( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
336 self, candidate_elt, session, content_name, transport_data, client |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
337 ): |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
338 """Called when best candidate has been received from peer (or if none is working) |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
339 |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
340 @param candidate_elt(domish.Element): candidate-used or candidate-error element |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
341 (see XEP-0260 §2.3) |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
342 @param session(dict): session data |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
343 @param content_name(unicode): name of the current content |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
344 @param transport_data(dict): transport data |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
345 @param client(unicode): %(doc_client)s |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
346 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
347 if candidate_elt.name == "candidate-error": |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
348 # candidate-error, no candidate worked |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
349 transport_data["peer_best_candidate"] = None |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
350 else: |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
351 # candidate-used, one candidate was choosed |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
352 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
353 cid = candidate_elt.attributes["cid"] |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
354 except KeyError: |
3028 | 355 log.warning("No cid found in <candidate-used>") |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
356 raise exceptions.DataError |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
357 try: |
3028 | 358 candidate = next(( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
359 c for c in transport_data["candidates"] if c.id == cid |
3028 | 360 )) |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
361 except StopIteration: |
3028 | 362 log.warning("Given cid doesn't correspond to any known candidate !") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
363 raise exceptions.DataError # TODO: send an error to other peer, and use better exception |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
364 except KeyError: |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
365 # a transport-info can also be intentionaly sent too early by other peer |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
366 # but there is little probability |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
367 log.error( |
3028 | 368 '"candidates" key doesn\'t exists in transport_data, it should at this point' |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
369 ) |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
370 raise exceptions.InternalError |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
371 # at this point we have the candidate choosed by other peer |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
372 transport_data["peer_best_candidate"] = candidate |
3028 | 373 log.info("Other peer best candidate: {}".format(candidate)) |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
374 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
375 del transport_data["candidates"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
376 self._check_candidates(session, content_name, transport_data, client) |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
377 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
378 def _proxy_activation_info( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
379 self, proxy_elt, session, content_name, transport_data, client |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
380 ): |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
381 """Called when proxy has been activated (or has sent an error) |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
382 |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
383 @param proxy_elt(domish.Element): <activated/> or <proxy-error/> element |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
384 (see XEP-0260 §2.4) |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
385 @param session(dict): session data |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
386 @param content_name(unicode): name of the current content |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
387 @param transport_data(dict): transport data |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
388 @param client(unicode): %(doc_client)s |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
389 """ |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
390 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
391 activation_d = transport_data.pop("activation_d") |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
392 except KeyError: |
3028 | 393 log.warning("Received unexpected transport-info for proxy activation") |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
394 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
395 if proxy_elt.name == "activated": |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
396 activation_d.callback(None) |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
397 else: |
1756
061011fad5b1
plugin XEP-0260: better proxy error handling:
Goffi <goffi@goffi.org>
parents:
1755
diff
changeset
|
398 activation_d.errback(ProxyError()) |
1560 | 399 |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
400 async def jingle_handler(self, client, action, session, content_name, transport_elt): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
401 content_data = session["contents"][content_name] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
402 transport_data = content_data["transport_data"] |
1560 | 403 |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
404 if action in (self._j.A_ACCEPTED_ACK, self._j.A_PREPARE_RESPONDER): |
1560 | 405 pass |
406 | |
407 elif action == self._j.A_SESSION_ACCEPT: | |
408 # initiator side, we select a candidate in the ones sent by responder | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
409 assert "peer_candidates" not in transport_data |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
410 transport_data["peer_candidates"] = self._parse_candidates(transport_elt) |
1560 | 411 |
412 elif action == self._j.A_START: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
413 session_hash = transport_data["session_hash"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
414 peer_candidates = transport_data["peer_candidates"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
415 stream_object = content_data["stream_object"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
416 self._s5b.associate_stream_object(client, session_hash, stream_object) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
417 stream_d = transport_data.pop("stream_d") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
418 stream_d.chainDeferred(content_data["finished_d"]) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
419 peer_session_hash = transport_data["peer_session_hash"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
420 d = self._s5b.get_best_candidate( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
421 client, peer_candidates, session_hash, peer_session_hash |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
422 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
423 d.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
424 self._found_peer_candidate, session, transport_data, content_name, client |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
425 ) |
1560 | 426 |
427 elif action == self._j.A_SESSION_INITIATE: | |
428 # responder side, we select a candidate in the ones sent by initiator | |
429 # and we give our candidates | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
430 assert "peer_candidates" not in transport_data |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
431 sid = transport_data["sid"] = transport_elt["sid"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
432 session_hash = transport_data["session_hash"] = self._s5b.get_session_hash( |
2927
69e4716d6268
plugins (jingle) file transfer: use initial "from" attribute as local jid instead of client.jid:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
433 session["local_jid"], session["peer_jid"], sid |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
434 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
435 peer_session_hash = transport_data[ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
436 "peer_session_hash" |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
437 ] = self._s5b.get_session_hash( |
2927
69e4716d6268
plugins (jingle) file transfer: use initial "from" attribute as local jid instead of client.jid:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
438 session["peer_jid"], session["local_jid"], sid |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
439 ) # requester and target are inversed for peer candidates |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
440 peer_candidates = transport_data["peer_candidates"] = self._parse_candidates( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
441 transport_elt |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
442 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
443 stream_object = content_data["stream_object"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
444 stream_d = self._s5b.register_hash(client, session_hash, stream_object) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
445 stream_d.chainDeferred(content_data["finished_d"]) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
446 d = self._s5b.get_best_candidate( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
447 client, peer_candidates, session_hash, peer_session_hash |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
448 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
449 d.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
450 self._found_peer_candidate, session, transport_data, content_name, client |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
451 ) |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
452 candidates = await self._s5b.get_candidates(client, session["local_jid"]) |
1560 | 453 # we remove duplicate candidates |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
454 candidates = [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
455 candidate for candidate in candidates if candidate not in peer_candidates |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
456 ] |
1560 | 457 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
458 transport_data["candidates"] = candidates |
1560 | 459 # we can now build a new <transport> element with our candidates |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
460 transport_elt = self._build_candidates( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
461 session, candidates, sid, session_hash, client |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
462 ) |
1560 | 463 |
464 elif action == self._j.A_TRANSPORT_INFO: | |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
465 # transport-info can be about candidate or proxy activation |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
466 candidate_elt = None |
1560 | 467 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
468 for method, names in ( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
469 (self._candidate_info, ("candidate-used", "candidate-error")), |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
470 (self._proxy_activation_info, ("activated", "proxy-error")), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
471 ): |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
472 for name in names: |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
473 try: |
3028 | 474 candidate_elt = next(transport_elt.elements(NS_JINGLE_S5B, name)) |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
475 except StopIteration: |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
476 continue |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
477 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
478 method( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
479 candidate_elt, session, content_name, transport_data, client |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
480 ) |
1570
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
481 break |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
482 |
37d4be4a9fed
plugins XEP-0260, XEP-0065: proxy handling:
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
483 if candidate_elt is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
484 log.warning( |
3028 | 485 "Unexpected transport element: {}".format(transport_elt.toXml()) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
486 ) |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
487 elif action == self._j.A_DESTROY: |
1758
a66d34353f34
plugin XEP-0260, XEP-0065: fixed session hash handling:
Goffi <goffi@goffi.org>
parents:
1757
diff
changeset
|
488 # the transport is replaced (fallback ?), We need mainly to kill XEP-0065 session. |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
489 # note that sid argument is not necessary for sessions created by this plugin |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
490 self._s5b.kill_session(None, transport_data["session_hash"], None, client) |
1560 | 491 else: |
3028 | 492 log.warning("FIXME: unmanaged action {}".format(action)) |
1560 | 493 |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
494 return transport_elt |
1560 | 495 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
496 def jingle_terminate(self, client, action, session, content_name, reason_elt): |
1755
d2e023da2983
plugin XEP-0260: kill s5b session if session is declined
Goffi <goffi@goffi.org>
parents:
1631
diff
changeset
|
497 if reason_elt.decline: |
3028 | 498 log.debug("Session declined, deleting S5B session") |
1755
d2e023da2983
plugin XEP-0260: kill s5b session if session is declined
Goffi <goffi@goffi.org>
parents:
1631
diff
changeset
|
499 # we just need to clean the S5B session if it is declined |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
500 content_data = session["contents"][content_name] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
501 transport_data = content_data["transport_data"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
502 self._s5b.kill_session(None, transport_data["session_hash"], None, client) |
1755
d2e023da2983
plugin XEP-0260: kill s5b session if session is declined
Goffi <goffi@goffi.org>
parents:
1631
diff
changeset
|
503 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
504 def _do_fallback(self, feature_checked, session, content_name, client): |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
505 """Do the fallback, method called once feature is checked |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
506 |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
507 @param feature_checked(bool): True if other peer can do IBB |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
508 """ |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
509 if not feature_checked: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
510 log.warning( |
3028 | 511 "Other peer can't manage jingle IBB, be have to terminate the session" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
512 ) |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
513 self._j.terminate(client, self._j.REASON_CONNECTIVITY_ERROR, session) |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
514 else: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
515 self._j.transport_replace( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
516 client, self._jingle_ibb.NAMESPACE, session, content_name |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
517 ) |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
518 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
519 def do_fallback(self, session, content_name, client): |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
520 """Fallback to IBB transport, used in last resort |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
521 |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
522 @param session(dict): session data |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
523 @param content_name(unicode): name of the current content |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
524 @param client(unicode): %(doc_client)s |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
525 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
526 if session["role"] != self._j.ROLE_INITIATOR: |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
527 # only initiator must do the fallback, see XEP-0260 §3 |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
528 return |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
529 if self._jingle_ibb is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
530 log.warning( |
3028 | 531 "Jingle IBB (XEP-0261) plugin is not available, we have to close the session" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
532 ) |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
533 self._j.terminate(client, self._j.REASON_CONNECTIVITY_ERROR, session) |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
534 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
535 d = self.host.hasFeature( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
536 client, self._jingle_ibb.NAMESPACE, session["peer_jid"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
537 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
538 d.addCallback(self._do_fallback, session, content_name, client) |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
539 return d |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
540 |
1560 | 541 |
3028 | 542 @implementer(iwokkel.IDisco) |
1560 | 543 class XEP_0260_handler(XMPPHandler): |
544 | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
545 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
1560 | 546 return [disco.DiscoFeature(NS_JINGLE_S5B)] |
547 | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
548 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
1560 | 549 return [] |