Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0166/__init__.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 | 23fa52acf72c |
children | e11b13418ba6 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
3 # Libervia plugin for Jingle (XEP-0166) |
3479 | 4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # This program is free software: you can redistribute it and/or modify |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # it under the terms of the GNU Affero General Public License as published by |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # (at your option) any later version. |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # GNU Affero General Public License for more details. |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # You should have received a copy of the GNU Affero General Public License |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 |
3333
ac9342f359e9
plugin XEP-0329: download thumbnails:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
19 |
ac9342f359e9
plugin XEP-0329: download thumbnails:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
20 import time |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
21 from typing import Any, Callable, Dict, Final, List, Optional, Tuple |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
22 import uuid |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
23 |
3333
ac9342f359e9
plugin XEP-0329: download thumbnails:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
24 from twisted.internet import defer |
ac9342f359e9
plugin XEP-0329: download thumbnails:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
25 from twisted.internet import reactor |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
26 from twisted.python import failure |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
27 from twisted.words.protocols.jabber import jid |
3333
ac9342f359e9
plugin XEP-0329: download thumbnails:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
28 from twisted.words.protocols.jabber import error |
ac9342f359e9
plugin XEP-0329: download thumbnails:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
29 from twisted.words.protocols.jabber import xmlstream |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
30 from twisted.words.xish import domish |
3333
ac9342f359e9
plugin XEP-0329: download thumbnails:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
31 from wokkel import disco, iwokkel |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
32 from zope.interface import implementer |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
33 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4053
diff
changeset
|
34 from libervia.backend.core import exceptions |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4053
diff
changeset
|
35 from libervia.backend.core.constants import Const as C |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4053
diff
changeset
|
36 from libervia.backend.core.core_types import SatXMPPEntity |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4053
diff
changeset
|
37 from libervia.backend.core.i18n import D_, _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4053
diff
changeset
|
38 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4053
diff
changeset
|
39 from libervia.backend.tools import xml_tools |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4053
diff
changeset
|
40 from libervia.backend.tools import utils |
3333
ac9342f359e9
plugin XEP-0329: download thumbnails:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
41 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
42 from .models import ( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
43 ApplicationData, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
44 BaseApplicationHandler, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
45 BaseTransportHandler, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
46 ContentData, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
47 TransportData, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
48 ) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
49 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
50 |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 log = getLogger(__name__) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
54 IQ_SET : Final = '/iq[@type="set"]' |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
55 NS_JINGLE : Final = "urn:xmpp:jingle:1" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
56 NS_JINGLE_ERROR : Final = "urn:xmpp:jingle:errors:1" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
57 JINGLE_REQUEST : Final = f'{IQ_SET}/jingle[@xmlns="{NS_JINGLE}"]' |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
58 CONFIRM_TXT : Final = D_( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
59 "{entity} want to start a jingle session with you, do you accept ?" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
60 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
62 PLUGIN_INFO : Final = { |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
63 C.PI_NAME: "Jingle", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
64 C.PI_IMPORT_NAME: "XEP-0166", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
65 C.PI_TYPE: "XEP", |
2502
7ad5f2c4e34a
XEP-0065,XEP-0096,XEP-0166,XEP-0235,XEP-0300: file transfer improvments:
Goffi <goffi@goffi.org>
parents:
2489
diff
changeset
|
66 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
|
67 C.PI_PROTOCOLS: ["XEP-0166"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
68 C.PI_MAIN: "XEP_0166", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
69 C.PI_HANDLER: "yes", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
70 C.PI_DESCRIPTION: _("""Implementation of Jingle"""), |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 } |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
72 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
74 class XEP_0166: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
75 namespace : Final = NS_JINGLE |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
76 |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
77 ROLE_INITIATOR : Final = "initiator" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
78 ROLE_RESPONDER : Final = "responder" |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
80 TRANSPORT_DATAGRAM : Final = "UDP" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
81 TRANSPORT_STREAMING : Final = "TCP" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
82 |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
83 REASON_SUCCESS : Final = "success" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
84 REASON_DECLINE : Final = "decline" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
85 REASON_FAILED_APPLICATION : Final = "failed-application" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
86 REASON_FAILED_TRANSPORT : Final = "failed-transport" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
87 REASON_CONNECTIVITY_ERROR : Final = "connectivity-error" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
88 |
4116
23fa52acf72c
plugin XEP-0167, XEP-0176: transport-info and ICE candidate sending are delayed if session is not active yet
Goffi <goffi@goffi.org>
parents:
4114
diff
changeset
|
89 STATE_PENDING : Final = "PENDING" |
23fa52acf72c
plugin XEP-0167, XEP-0176: transport-info and ICE candidate sending are delayed if session is not active yet
Goffi <goffi@goffi.org>
parents:
4114
diff
changeset
|
90 STATE_ACTIVE : Final = "ACTIVE" |
23fa52acf72c
plugin XEP-0167, XEP-0176: transport-info and ICE candidate sending are delayed if session is not active yet
Goffi <goffi@goffi.org>
parents:
4114
diff
changeset
|
91 STATE_ENDED : Final = "ENDED" |
23fa52acf72c
plugin XEP-0167, XEP-0176: transport-info and ICE candidate sending are delayed if session is not active yet
Goffi <goffi@goffi.org>
parents:
4114
diff
changeset
|
92 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
93 # standard actions |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
95 A_SESSION_INITIATE : Final = "session-initiate" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
96 A_SESSION_ACCEPT : Final = "session-accept" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
97 A_SESSION_TERMINATE : Final = "session-terminate" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
98 A_SESSION_INFO : Final = "session-info" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
99 A_TRANSPORT_REPLACE : Final = "transport-replace" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
100 A_TRANSPORT_ACCEPT : Final = "transport-accept" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
101 A_TRANSPORT_REJECT : Final = "transport-reject" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
102 A_TRANSPORT_INFO : Final = "transport-info" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
103 |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 # non standard actions |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
105 |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
106 #: called before the confirmation request, first event for responder, useful for |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
107 #: parsing |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
108 A_PREPARE_CONFIRMATION : Final = "prepare-confirmation" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
109 #: initiator must prepare tranfer |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
110 A_PREPARE_INITIATOR : Final = "prepare-initiator" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
111 #: responder must prepare tranfer |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
112 A_PREPARE_RESPONDER : Final = "prepare-responder" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
113 #; session accepted ack has been received from initiator |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
114 A_ACCEPTED_ACK : Final = ( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
115 "accepted-ack" |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
116 ) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
117 A_START : Final = "start" # application can start |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
118 #: called when a transport is destroyed (e.g. because it is remplaced). Used to do |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
119 #: cleaning operations |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
120 A_DESTROY : Final = ( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
121 "destroy" |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
122 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 def __init__(self, host): |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 log.info(_("plugin Jingle initialization")) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 self.host = host |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
127 self._applications = {} # key: namespace, value: application data |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
128 self._transports = {} # key: namespace, value: transport data |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 # we also keep transports by type, they are then sorted by priority |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
130 self._type_transports = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
131 XEP_0166.TRANSPORT_DATAGRAM: [], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
132 XEP_0166.TRANSPORT_STREAMING: [], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
133 } |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
134 host.bridge.add_method( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
135 "jingle_terminate", |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
136 ".plugin", |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
137 in_sign="ssss", |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
138 out_sign="", |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
139 method=self._terminate, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
140 async_=True, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
141 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
142 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
143 def profile_connected(self, client): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
144 client.jingle_sessions = {} # key = sid, value = session_data |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
146 def get_handler(self, client): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
147 return XEP_0166_handler(self) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
148 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
149 def get_session(self, client: SatXMPPEntity, session_id: str) -> dict: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
150 """Retrieve session from its SID |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
151 |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
152 @param session_id: session ID |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
153 @return: found session |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
154 |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
155 @raise exceptions.NotFound: no session with this SID has been found |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
156 """ |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
157 try: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
158 return client.jingle_sessions[session_id] |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
159 except KeyError: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
160 raise exceptions.NotFound( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
161 f"No session with SID {session_id} found" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
162 ) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
163 |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
164 def create_session( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
165 self, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
166 client: SatXMPPEntity, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
167 sid: str, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
168 role: str, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
169 peer_jid: jid.JID, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
170 local_jid: jid.JID|None = None, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
171 **kwargs |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
172 ) -> dict: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
173 """Create a new jingle session. |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
174 |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
175 @param client: The client entity. |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
176 @param sid: Session ID. |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
177 @param role: Session role (initiator or responder). |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
178 @param peer_jid: JID of the peer. |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
179 @param local_jid: JID of the local entity. |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
180 If None, defaults to client.jid. |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
181 @param extra_data: Additional data to be added to the session. Defaults to None. |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
182 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
183 @return: The created session. |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
184 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
185 @raise ValueError: If the provided role is neither initiator nor responder. |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
186 """ |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
187 # TODO: session cleaning after timeout ? |
4114
79ec7d7beef3
plugin XEP-0166: reject session creation is session ID is empty
Goffi <goffi@goffi.org>
parents:
4112
diff
changeset
|
188 |
79ec7d7beef3
plugin XEP-0166: reject session creation is session ID is empty
Goffi <goffi@goffi.org>
parents:
4112
diff
changeset
|
189 if not sid: |
79ec7d7beef3
plugin XEP-0166: reject session creation is session ID is empty
Goffi <goffi@goffi.org>
parents:
4112
diff
changeset
|
190 raise exceptions.DataError("Empty session ID is not allowed") |
79ec7d7beef3
plugin XEP-0166: reject session creation is session ID is empty
Goffi <goffi@goffi.org>
parents:
4112
diff
changeset
|
191 |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
192 if role not in [XEP_0166.ROLE_INITIATOR, XEP_0166.ROLE_RESPONDER]: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
193 raise ValueError(f"Invalid role {role}. Expected initiator or responder.") |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
194 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
195 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
196 session_data = { |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
197 "id": sid, |
4116
23fa52acf72c
plugin XEP-0167, XEP-0176: transport-info and ICE candidate sending are delayed if session is not active yet
Goffi <goffi@goffi.org>
parents:
4114
diff
changeset
|
198 "state": XEP_0166.STATE_PENDING, |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
199 "initiator": client.jid if role == XEP_0166.ROLE_INITIATOR else peer_jid, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
200 "role": role, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
201 "local_jid": local_jid or client.jid, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
202 "peer_jid": peer_jid, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
203 "started": time.time(), |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
204 "contents": {} |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
205 } |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
206 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
207 # If extra kw args are provided, merge them into the session_data |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
208 if kwargs: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
209 session_data.update(kwargs) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
210 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
211 # Add the session to the client's jingle sessions |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
212 client.jingle_sessions[sid] = session_data |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
213 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
214 return session_data |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
215 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
216 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
217 def delete_session(self, client, sid): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 try: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
219 del client.jingle_sessions[sid] |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 except KeyError: |
3040 | 221 log.debug( |
222 f"Jingle session id {sid!r} is unknown, nothing to delete " | |
223 f"[{client.profile}]") | |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
224 else: |
3040 | 225 log.debug(f"Jingle session id {sid!r} deleted [{client.profile}]") |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
227 ## helpers methods to build stanzas ## |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
228 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
229 def _build_jingle_elt( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
230 self, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
231 client: SatXMPPEntity, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
232 session: dict, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
233 action: str |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
234 ) -> Tuple[xmlstream.IQ, domish.Element]: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
235 iq_elt = client.IQ("set") |
2927
69e4716d6268
plugins (jingle) file transfer: use initial "from" attribute as local jid instead of client.jid:
Goffi <goffi@goffi.org>
parents:
2920
diff
changeset
|
236 iq_elt["from"] = session['local_jid'].full() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
237 iq_elt["to"] = session["peer_jid"].full() |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
238 jingle_elt = iq_elt.addElement("jingle", NS_JINGLE) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
239 jingle_elt["sid"] = session["id"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
240 jingle_elt["action"] = action |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
241 return iq_elt, jingle_elt |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
242 |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
243 def sendError(self, client, error_condition, sid, request, jingle_condition=None): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
244 """Send error stanza |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
245 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
246 @param error_condition: one of twisted.words.protocols.jabber.error.STANZA_CONDITIONS keys |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
247 @param sid(unicode,None): jingle session id, or None, if session must not be destroyed |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
248 @param request(domish.Element): original request |
1614
1ced93821c35
plugin XEP-0166: sendError now manage jingle conditions
Goffi <goffi@goffi.org>
parents:
1585
diff
changeset
|
249 @param jingle_condition(None, unicode): if not None, additional jingle-specific error information |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
250 """ |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
251 iq_elt = error.StanzaError(error_condition).toResponse(request) |
1614
1ced93821c35
plugin XEP-0166: sendError now manage jingle conditions
Goffi <goffi@goffi.org>
parents:
1585
diff
changeset
|
252 if jingle_condition is not None: |
1ced93821c35
plugin XEP-0166: sendError now manage jingle conditions
Goffi <goffi@goffi.org>
parents:
1585
diff
changeset
|
253 iq_elt.error.addElement((NS_JINGLE_ERROR, jingle_condition)) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
254 if error.STANZA_CONDITIONS[error_condition]["type"] == "cancel" and sid: |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
255 self.delete_session(client, sid) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
256 log.warning( |
3028 | 257 "Error while managing jingle session, cancelling: {condition}".format( |
2920
945e53cde9b2
plugin XEP-0166: fixed missing key in warning log
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
258 condition=error_condition |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
259 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
260 ) |
3040 | 261 return client.send(iq_elt) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
262 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
263 def _terminate_eb(self, failure_): |
3028 | 264 log.warning(_("Error while terminating session: {msg}").format(msg=failure_)) |
2487
ed1d71b91b29
plugin XEP-0166: added errback to terminate, which only logs issues
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
265 |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
266 def _terminate( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
267 self, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
268 session_id: str, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
269 reason: str, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
270 reason_txt: str, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
271 profile: str |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
272 ) -> defer.Deferred: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
273 client = self.host.get_client(profile) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
274 session = self.get_session(client, session_id) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
275 if reason not in ("", "cancel", "decline", "busy"): |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
276 raise ValueError( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
277 'only "cancel", "decline" and "busy" and empty value are allowed' |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
278 ) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
279 return self.terminate( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
280 client, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
281 reason or None, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
282 session, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
283 text=reason_txt or None |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
284 ) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
285 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
286 def terminate( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
287 self, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
288 client: SatXMPPEntity, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
289 reason: str|list[domish.Element]|None, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
290 session: dict, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
291 text: str|None = None |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
292 ) -> defer.Deferred: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
293 """Terminate the session |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
294 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
295 send the session-terminate action, and delete the session data |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
296 @param reason: if unicode, will be transformed to an element |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
297 if a list of element, add them as children of the <reason/> element |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
298 @param session: data of the session |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
299 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
300 iq_elt, jingle_elt = self._build_jingle_elt( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
301 client, session, XEP_0166.A_SESSION_TERMINATE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
302 ) |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
303 if reason is not None: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
304 reason_elt = jingle_elt.addElement("reason") |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
305 if isinstance(reason, str): |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
306 reason_elt.addElement(reason) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
307 else: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
308 for elt in reason: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
309 reason_elt.addChild(elt) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
310 else: |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
311 reason_elt = None |
3527
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
312 if text is not None: |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
313 if reason_elt is None: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
314 raise ValueError( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
315 "You have to specify a reason if text is specified" |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
316 ) |
3527
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
317 reason_elt.addElement("text", content=text) |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
318 if not self.host.trigger.point( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
319 "XEP-0166_terminate", |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
320 client, session, reason_elt |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
321 ): |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
322 return defer.succeed(None) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
323 self.delete_session(client, session["id"]) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
324 d = iq_elt.send() |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
325 d.addErrback(self._terminate_eb) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
326 return d |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
327 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
328 ## errors which doesn't imply a stanza sending ## |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
329 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
330 def _iq_error(self, failure_, sid, client): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
331 """Called when we got an <iq/> error |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
332 |
1614
1ced93821c35
plugin XEP-0166: sendError now manage jingle conditions
Goffi <goffi@goffi.org>
parents:
1585
diff
changeset
|
333 @param failure_(failure.Failure): the exceptions raised |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
334 @param sid(unicode): jingle session id |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
335 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
336 log.warning( |
3028 | 337 "Error while sending jingle <iq/> stanza: {failure_}".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
338 failure_=failure_.value |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
339 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
340 ) |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
341 self.delete_session(client, sid) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
342 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
343 def _jingle_error_cb(self, failure_, session, request, client): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
344 """Called when something is going wrong while parsing jingle request |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
345 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
346 The error condition depend of the exceptions raised: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
347 exceptions.DataError raise a bad-request condition |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
348 @param fail(failure.Failure): the exceptions raised |
3040 | 349 @param session(dict): data of the session |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
350 @param request(domsih.Element): jingle request |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
351 @param client: %(doc_client)s |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
352 """ |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
353 del session["jingle_elt"] |
3040 | 354 log.warning(f"Error while processing jingle request [{client.profile}]") |
3527
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
355 if isinstance(failure_.value, defer.FirstError): |
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
356 failure_ = failure_.value.subFailure.value |
3040 | 357 if isinstance(failure_, exceptions.DataError): |
3527
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
358 return self.sendError(client, "bad-request", session["id"], request) |
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
359 elif isinstance(failure_, error.StanzaError): |
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
360 return self.terminate(client, self.REASON_FAILED_APPLICATION, session, |
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
361 text=str(failure_)) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
362 else: |
3040 | 363 log.error(f"Unmanaged jingle exception: {failure_}") |
3527
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
364 return self.terminate(client, self.REASON_FAILED_APPLICATION, session, |
bbf92ef05f38
plugin XEP-0166, XEP-0234: better management of `terminate`:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
365 text=str(failure_)) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
366 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
367 ## methods used by other plugins ## |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
368 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
369 def register_application( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
370 self, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
371 namespace: str, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
372 handler: BaseApplicationHandler |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
373 ) -> None: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
374 """Register an application plugin |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
375 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
376 @param namespace(unicode): application namespace managed by the plugin |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
377 @param handler(object): instance of a class which manage the application. |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
378 May have the following methods: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
379 - request_confirmation(session, desc_elt, client): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
380 - if present, it is called on when session must be accepted. |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
381 - if it return True the session is accepted, else rejected. |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
382 A Deferred can be returned |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
383 - if not present, a generic accept dialog will be used |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
384 - jingle_session_init( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
385 client, self, session, content_name[, *args, **kwargs] |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
386 ): must return the domish.Element used for initial content |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
387 - jingle_handler( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
388 client, self, action, session, content_name, transport_elt |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
389 ): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
390 called on several action to negociate the application or transport |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
391 - jingle_terminate: called on session terminate, with reason_elt |
1754
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
392 May be used to clean session |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
393 """ |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
394 if namespace in self._applications: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
395 raise exceptions.ConflictError( |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
396 f"Trying to register already registered namespace {namespace}" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
397 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
398 self._applications[namespace] = ApplicationData( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
399 namespace=namespace, handler=handler |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
400 ) |
3028 | 401 log.debug("new jingle application registered") |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
402 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
403 def register_transport( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
404 self, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
405 namespace: str, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
406 transport_type: str, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
407 handler: BaseTransportHandler, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
408 priority: int = 0 |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
409 ) -> None: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
410 """Register a transport plugin |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
411 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
412 @param namespace: the XML namespace used for this transport |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
413 @param transport_type: type of transport to use (see XEP-0166 §8) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
414 @param handler: instance of a class which manage the application. |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
415 @param priority: priority of this transport |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
416 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
417 assert transport_type in ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
418 XEP_0166.TRANSPORT_DATAGRAM, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
419 XEP_0166.TRANSPORT_STREAMING, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
420 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
421 if namespace in self._transports: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
422 raise exceptions.ConflictError( |
3028 | 423 "Trying to register already registered namespace {}".format(namespace) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
424 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
425 transport_data = TransportData( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
426 namespace=namespace, handler=handler, priority=priority |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
427 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
428 self._type_transports[transport_type].append(transport_data) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
429 self._type_transports[transport_type].sort( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
430 key=lambda transport_data: transport_data.priority, reverse=True |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
431 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
432 self._transports[namespace] = transport_data |
3028 | 433 log.debug("new jingle transport registered") |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
434 |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
435 @defer.inlineCallbacks |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
436 def transport_replace(self, client, transport_ns, session, content_name): |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
437 """Replace a transport |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
438 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
439 @param transport_ns(unicode): namespace of the new transport to use |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
440 @param session(dict): jingle session data |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
441 @param content_name(unicode): name of the content |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
442 """ |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
443 # XXX: for now we replace the transport before receiving confirmation from other peer |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
444 # this is acceptable because we terminate the session if transport is rejected. |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
445 # this behavious may change in the future. |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
446 content_data = session["contents"][content_name] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
447 transport_data = content_data["transport_data"] |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
448 try: |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
449 transport = self._transports[transport_ns] |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
450 except KeyError: |
3028 | 451 raise exceptions.InternalError("Unkown transport") |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
452 yield content_data["transport"].handler.jingle_handler( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
453 client, XEP_0166.A_DESTROY, session, content_name, None |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
454 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
455 content_data["transport"] = transport |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
456 transport_data.clear() |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
457 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
458 iq_elt, jingle_elt = self._build_jingle_elt( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
459 client, session, XEP_0166.A_TRANSPORT_REPLACE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
460 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
461 content_elt = jingle_elt.addElement("content") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
462 content_elt["name"] = content_name |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
463 content_elt["creator"] = content_data["creator"] |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
464 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
465 transport_elt = transport.handler.jingle_session_init(client, session, content_name) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
466 content_elt.addChild(transport_elt) |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
467 iq_elt.send() |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
468 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
469 def build_action( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
470 self, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
471 client: SatXMPPEntity, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
472 action: str, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
473 session: dict, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
474 content_name: str, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
475 iq_elt: Optional[xmlstream.IQ] = None, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
476 context_elt: Optional[domish.Element] = None |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
477 ) -> Tuple[xmlstream.IQ, domish.Element]: |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
478 """Build an element according to requested action |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
479 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
480 @param action: a jingle action (see XEP-0166 §7.2), |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
481 session-* actions are not managed here |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
482 transport-replace is managed in the dedicated [transport_replace] method |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
483 @param session: jingle session data |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
484 @param content_name: name of the content |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
485 @param iq_elt: use this IQ instead of creating a new one if provided |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
486 @param context_elt: use this element instead of creating a new one if provided |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
487 @return: parent <iq> element, <transport> or <description> element, according to action |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
488 """ |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
489 # we first build iq, jingle and content element which are the same in every cases |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
490 if iq_elt is not None: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
491 try: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
492 jingle_elt = next(iq_elt.elements(NS_JINGLE, "jingle")) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
493 except StopIteration: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
494 raise exceptions.InternalError( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
495 "The <iq> element provided doesn't have a <jingle> element" |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
496 ) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
497 else: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
498 iq_elt, jingle_elt = self._build_jingle_elt(client, session, action) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
499 # FIXME: XEP-0260 § 2.3 Ex 5 has an initiator attribute, but it should not according to XEP-0166 §7.1 table 1, must be checked |
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 content_elt = jingle_elt.addElement("content") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
502 content_elt["name"] = content_name |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
503 content_elt["creator"] = content_data["creator"] |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
504 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
505 if context_elt is not None: |
4116
23fa52acf72c
plugin XEP-0167, XEP-0176: transport-info and ICE candidate sending are delayed if session is not active yet
Goffi <goffi@goffi.org>
parents:
4114
diff
changeset
|
506 if context_elt.parent is None: |
23fa52acf72c
plugin XEP-0167, XEP-0176: transport-info and ICE candidate sending are delayed if session is not active yet
Goffi <goffi@goffi.org>
parents:
4114
diff
changeset
|
507 content_elt.addChild(context_elt) |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
508 elif action == XEP_0166.A_TRANSPORT_INFO: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
509 context_elt = transport_elt = content_elt.addElement( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
510 "transport", content_data["transport"].namespace |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
511 ) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
512 else: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
513 raise exceptions.InternalError(f"unmanaged action {action}") |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
514 |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
515 return iq_elt, context_elt |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
516 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
517 def build_session_info(self, client, session): |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
518 """Build a session-info action |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
519 |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
520 @param session(dict): jingle session data |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
521 @return (tuple[domish.Element, domish.Element]): parent <iq> element, <jingle> element |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
522 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
523 return self._build_jingle_elt(client, session, XEP_0166.A_SESSION_INFO) |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
524 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
525 def get_application(self, namespace: str) -> ApplicationData: |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
526 """Retreive application corresponding to a namespace |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
527 |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
528 @raise exceptions.NotFound if application can't be found |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
529 """ |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
530 try: |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
531 return self._applications[namespace] |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
532 except KeyError: |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
533 raise exceptions.NotFound( |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
534 f"No application registered for {namespace}" |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
535 ) |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
536 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
537 def get_content_data(self, content: dict) -> ContentData: |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
538 """"Retrieve application and its argument from content""" |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
539 app_ns = content["app_ns"] |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
540 try: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
541 application = self.get_application(app_ns) |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
542 except exceptions.NotFound as e: |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
543 raise exceptions.InternalError(str(e)) |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
544 app_args = content.get("app_args", []) |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
545 app_kwargs = content.get("app_kwargs", {}) |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
546 transport_data = content.get("transport_data", {}) |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
547 try: |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
548 content_name = content["name"] |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
549 except KeyError: |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
550 content_name = content["name"] = str(uuid.uuid4()) |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
551 return ContentData( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
552 application, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
553 app_args, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
554 app_kwargs, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
555 transport_data, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
556 content_name |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
557 ) |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
558 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
559 async def initiate( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
560 self, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
561 client: SatXMPPEntity, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
562 peer_jid: jid.JID, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
563 contents: List[dict], |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
564 encrypted: bool = False, |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
565 sid: str|None = None, |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
566 **extra_data: Any |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
567 ) -> str: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
568 """Send a session initiation request |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
569 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
570 @param peer_jid: jid to establith session with |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
571 @param contents: list of contents to use: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
572 The dict must have the following keys: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
573 - app_ns(str): namespace of the application |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
574 the following keys are optional: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
575 - transport_type(str): type of transport to use (see XEP-0166 §8) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
576 default to TRANSPORT_STREAMING |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
577 - name(str): name of the content |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
578 - senders(str): One of XEP_0166.ROLE_INITIATOR, XEP_0166.ROLE_RESPONDER, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
579 both or none |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
580 Defaults to BOTH (see XEP-0166 §7.3) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
581 - app_args(list): args to pass to the application plugin |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
582 - app_kwargs(dict): keyword args to pass to the application plugin |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
583 @param encrypted: if True, session must be encrypted and "encryption" must be set |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
584 to all content data of session |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
585 @param sid: Session ID. |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
586 If None, one will be generated (and used as return value) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
587 @return: Sesson ID |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
588 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
589 assert contents # there must be at least one content |
2927
69e4716d6268
plugins (jingle) file transfer: use initial "from" attribute as local jid instead of client.jid:
Goffi <goffi@goffi.org>
parents:
2920
diff
changeset
|
590 if (peer_jid == client.jid |
69e4716d6268
plugins (jingle) file transfer: use initial "from" attribute as local jid instead of client.jid:
Goffi <goffi@goffi.org>
parents:
2920
diff
changeset
|
591 or client.is_component and peer_jid.host == client.jid.host): |
3028 | 592 raise ValueError(_("You can't do a jingle session with yourself")) |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
593 if sid is None: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
594 sid = str(uuid.uuid4()) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
595 session = self.create_session( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
596 client, sid, XEP_0166.ROLE_INITIATOR, peer_jid, **extra_data |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
597 ) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
598 initiator = session["initiator"] |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
599 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
600 if not await self.host.trigger.async_point( |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
601 "XEP-0166_initiate", |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
602 client, session, contents |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
603 ): |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
604 return sid |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
605 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
606 iq_elt, jingle_elt = self._build_jingle_elt( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
607 client, session, XEP_0166.A_SESSION_INITIATE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
608 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
609 jingle_elt["initiator"] = initiator.full() |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
610 session["jingle_elt"] = jingle_elt |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
611 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
612 session_contents = session["contents"] |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
613 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
614 for content in contents: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
615 # we get the application plugin |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
616 content_data = self.get_content_data(content) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
617 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
618 # and the transport plugin |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
619 transport_type = content.get("transport_type", XEP_0166.TRANSPORT_STREAMING) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
620 try: |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
621 transport = self._type_transports[transport_type][0] |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
622 except IndexError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
623 raise exceptions.InternalError( |
3028 | 624 "No transport registered for {}".format(transport_type) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
625 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
626 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
627 # we build the session data for this content |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
628 application_data = {} |
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
629 transport_data = content_data.transport_data |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
630 session_content = { |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
631 "application": content_data.application, |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
632 "application_data": application_data, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
633 "transport": transport, |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
634 "transport_data": transport_data, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
635 "creator": XEP_0166.ROLE_INITIATOR, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
636 "senders": content.get("senders", "both"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
637 } |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
638 if content_data.content_name in session_contents: |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
639 raise exceptions.InternalError( |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
640 "There is already a content with this name" |
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
641 ) |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
642 session_contents[content_data.content_name] = session_content |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
643 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
644 # we construct the content element |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
645 content_elt = jingle_elt.addElement("content") |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
646 content_elt["creator"] = session_content["creator"] |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
647 content_elt["name"] = content_data.content_name |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
648 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
649 content_elt["senders"] = content["senders"] |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
650 except KeyError: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
651 pass |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
652 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
653 # then the description element |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
654 application_data["desc_elt"] = desc_elt = await utils.as_deferred( |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
655 content_data.application.handler.jingle_session_init, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
656 client, session, content_data.content_name, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
657 *content_data.app_args, **content_data.app_kwargs |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
658 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
659 content_elt.addChild(desc_elt) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
660 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
661 # and the transport one |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
662 transport_data["transport_elt"] = transport_elt = await utils.as_deferred( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
663 transport.handler.jingle_session_init, |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
664 client, session, content_data.content_name, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
665 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
666 content_elt.addChild(transport_elt) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
667 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
668 if not await self.host.trigger.async_point( |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
669 "XEP-0166_initiate_elt_built", |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
670 client, session, iq_elt, jingle_elt |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
671 ): |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
672 return sid |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
673 |
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
674 # processing is done, we can remove elements |
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
675 for content_data in session_contents.values(): |
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
676 del content_data["application_data"]["desc_elt"] |
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
677 del content_data["transport_data"]["transport_elt"] |
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
678 del session["jingle_elt"] |
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
679 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
680 if encrypted: |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
681 for content in session["contents"].values(): |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
682 if "encryption" not in content: |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
683 raise exceptions.EncryptionError( |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
684 "Encryption is requested, but no encryption has been set" |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
685 ) |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
686 |
2502
7ad5f2c4e34a
XEP-0065,XEP-0096,XEP-0166,XEP-0235,XEP-0300: file transfer improvments:
Goffi <goffi@goffi.org>
parents:
2489
diff
changeset
|
687 try: |
3404
26a0af6e32c1
plugin XEP-0166: new trigger point + coroutines + helper methods:
Goffi <goffi@goffi.org>
parents:
3333
diff
changeset
|
688 await iq_elt.send() |
2502
7ad5f2c4e34a
XEP-0065,XEP-0096,XEP-0166,XEP-0235,XEP-0300: file transfer improvments:
Goffi <goffi@goffi.org>
parents:
2489
diff
changeset
|
689 except Exception as e: |
7ad5f2c4e34a
XEP-0065,XEP-0096,XEP-0166,XEP-0235,XEP-0300: file transfer improvments:
Goffi <goffi@goffi.org>
parents:
2489
diff
changeset
|
690 failure_ = failure.Failure(e) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
691 self._iq_error(failure_, sid, client) |
2502
7ad5f2c4e34a
XEP-0065,XEP-0096,XEP-0166,XEP-0235,XEP-0300: file transfer improvments:
Goffi <goffi@goffi.org>
parents:
2489
diff
changeset
|
692 raise failure_ |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
693 return sid |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
694 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
695 def delayed_content_terminate(self, *args, **kwargs): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
696 """Put content_terminate in queue but don't execute immediately |
1617
d05f9179fe22
plugin XEP-0166: added delayedContentTerminate to terminate a content inside a handler
Goffi <goffi@goffi.org>
parents:
1616
diff
changeset
|
697 |
d05f9179fe22
plugin XEP-0166: added delayedContentTerminate to terminate a content inside a handler
Goffi <goffi@goffi.org>
parents:
1616
diff
changeset
|
698 This is used to terminate a content inside a handler, to avoid modifying contents |
d05f9179fe22
plugin XEP-0166: added delayedContentTerminate to terminate a content inside a handler
Goffi <goffi@goffi.org>
parents:
1616
diff
changeset
|
699 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
700 reactor.callLater(0, self.content_terminate, *args, **kwargs) |
1617
d05f9179fe22
plugin XEP-0166: added delayedContentTerminate to terminate a content inside a handler
Goffi <goffi@goffi.org>
parents:
1616
diff
changeset
|
701 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
702 def content_terminate(self, client, session, content_name, reason=REASON_SUCCESS): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
703 """Terminate and remove a content |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
704 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
705 if there is no more content, then session is terminated |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
706 @param session(dict): jingle session |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
707 @param content_name(unicode): name of the content terminated |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
708 @param reason(unicode): reason of the termination |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
709 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
710 contents = session["contents"] |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
711 del contents[content_name] |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
712 if not contents: |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
713 self.terminate(client, reason, session) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
714 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
715 ## defaults methods called when plugin doesn't have them ## |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
716 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
717 def jingle_request_confirmation_default( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
718 self, client, action, session, content_name, desc_elt |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
719 ): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
720 """This method request confirmation for a jingle session""" |
3028 | 721 log.debug("Using generic jingle confirmation method") |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
722 return xml_tools.defer_confirm( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
723 self.host, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
724 _(CONFIRM_TXT).format(entity=session["peer_jid"].full()), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
725 _("Confirm Jingle session"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
726 profile=client.profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
727 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
728 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
729 ## jingle events ## |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
730 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
731 def _on_jingle_request(self, request: domish.Element, client: SatXMPPEntity) -> None: |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
732 defer.ensureDeferred(self.on_jingle_request(client, request)) |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
733 |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
734 async def on_jingle_request( |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
735 self, |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
736 client: SatXMPPEntity, |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
737 request: domish.Element |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
738 ) -> None: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
739 """Called when any jingle request is received |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
740 |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
741 The request will then be dispatched to appropriate method |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
742 according to current state |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
743 @param request(domish.Element): received IQ request |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
744 """ |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
745 request.handled = True |
3028 | 746 jingle_elt = next(request.elements(NS_JINGLE, "jingle")) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
747 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
748 # first we need the session id |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
749 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
750 sid = jingle_elt["sid"] |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
751 if not sid: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
752 raise KeyError |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
753 except KeyError: |
3028 | 754 log.warning("Received jingle request has no sid attribute") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
755 self.sendError(client, "bad-request", None, request) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
756 return |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
757 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
758 # then the action |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
759 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
760 action = jingle_elt["action"] |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
761 if not action: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
762 raise KeyError |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
763 except KeyError: |
3028 | 764 log.warning("Received jingle request has no action") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
765 self.sendError(client, "bad-request", None, request) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
766 return |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
767 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
768 peer_jid = jid.JID(request["from"]) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
769 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
770 # we get or create the session |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
771 try: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
772 session = client.jingle_sessions[sid] |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
773 except KeyError: |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
774 if action == XEP_0166.A_SESSION_INITIATE: |
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
775 pass |
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
776 elif action == XEP_0166.A_SESSION_TERMINATE: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
777 log.debug( |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
778 "ignoring session terminate action (inexisting session id): " |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
779 "{request_id} [{profile}]".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
780 request_id=sid, profile=client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
781 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
782 ) |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
783 return |
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
784 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
785 log.warning( |
3028 | 786 "Received request for an unknown session id: {request_id} [{profile}]".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
787 request_id=sid, profile=client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
788 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
789 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
790 self.sendError(client, "item-not-found", None, request, "unknown-session") |
1615
a1e5bcd9a6eb
jingle XEP-0166: fixed session creation on non session-initiate actions
Goffi <goffi@goffi.org>
parents:
1614
diff
changeset
|
791 return |
a1e5bcd9a6eb
jingle XEP-0166: fixed session creation on non session-initiate actions
Goffi <goffi@goffi.org>
parents:
1614
diff
changeset
|
792 |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
793 try: |
4112
bc60875cb3b8
plugin XEP-0166, XEP-0167, XEP-0234, XEP-0353: call events management to prepare for UI:
Goffi <goffi@goffi.org>
parents:
4111
diff
changeset
|
794 # session may have been already created in a jingle_preflight, in this |
bc60875cb3b8
plugin XEP-0166, XEP-0167, XEP-0234, XEP-0353: call events management to prepare for UI:
Goffi <goffi@goffi.org>
parents:
4111
diff
changeset
|
795 # case we re-use it. |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
796 session = self.get_session(client, sid) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
797 except exceptions.NotFound: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
798 # XXX: we store local_jid using request['to'] because for a component the |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
799 # jid used may not be client.jid (if a local part is used). |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
800 session = self.create_session( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
801 client, sid, XEP_0166.ROLE_RESPONDER, peer_jid, jid.JID(request['to']) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
802 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
803 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
804 if session["peer_jid"] != peer_jid: |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
805 log.warning( |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
806 "sid conflict ({}), the jid doesn't match. Can be a collision, a " |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
807 "hack attempt, or a bad sid generation".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
808 sid |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
809 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
810 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
811 self.sendError(client, "service-unavailable", sid, request) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
812 return |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
813 if session["id"] != sid: |
3028 | 814 log.error("session id doesn't match") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
815 self.sendError(client, "service-unavailable", sid, request) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
816 raise exceptions.InternalError |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
817 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
818 if action == XEP_0166.A_SESSION_INITIATE: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
819 await self.on_session_initiate(client, request, jingle_elt, session) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
820 elif action == XEP_0166.A_SESSION_TERMINATE: |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
821 await self.on_session_terminate(client, request, jingle_elt, session) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
822 elif action == XEP_0166.A_SESSION_ACCEPT: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
823 await self.on_session_accept(client, request, jingle_elt, session) |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
824 elif action == XEP_0166.A_SESSION_INFO: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
825 self.on_session_info(client, request, jingle_elt, session) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
826 elif action == XEP_0166.A_TRANSPORT_INFO: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
827 self.on_transport_info(client, request, jingle_elt, session) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
828 elif action == XEP_0166.A_TRANSPORT_REPLACE: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
829 await self.on_transport_replace(client, request, jingle_elt, session) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
830 elif action == XEP_0166.A_TRANSPORT_ACCEPT: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
831 self.on_transport_accept(client, request, jingle_elt, session) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
832 elif action == XEP_0166.A_TRANSPORT_REJECT: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
833 self.on_transport_reject(client, request, jingle_elt, session) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
834 else: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
835 raise exceptions.InternalError(f"Unknown action {action}") |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
836 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
837 ## Actions callbacks ## |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
838 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
839 def _parse_elements( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
840 self, |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
841 jingle_elt: domish.Element, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
842 session: dict, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
843 request: domish.Element, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
844 client: SatXMPPEntity, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
845 new: bool = False, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
846 creator: str = ROLE_INITIATOR, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
847 with_application: bool =True, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
848 with_transport: bool = True, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
849 store_in_session: bool = True, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
850 ) -> Dict[str, dict]: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
851 """Parse contents elements and fill contents_dict accordingly |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
852 |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
853 after the parsing, contents_dict will containt handlers, "desc_elt" and |
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
854 "transport_elt" |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
855 @param jingle_elt: parent <jingle> element, containing one or more <content> |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
856 @param session: session data |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
857 @param request: the whole request |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
858 @param client: %(doc_client)s |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
859 @param new: True if the content is new and must be created, |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
860 else the content must exists, and session data will be filled |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
861 @param creator: only used if new is True: creating pear (see § 7.3) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
862 @param with_application: if True, raise an error if there is no <description> |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
863 element else ignore it |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
864 @param with_transport: if True, raise an error if there is no <transport> element |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
865 else ignore it |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
866 @param store_in_session: if True, the ``session`` contents will be updated with |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
867 the parsed elements. |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
868 Use False when you parse an action which can happen at any time (e.g. |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
869 transport-info) and meaning that a parsed element may already be present in |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
870 the session (e.g. if an authorisation request is waiting for user answer), |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
871 This can't be used when ``new`` is set. |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
872 @return: contents_dict (from session, or a new one if "store_in_session" is False) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
873 @raise exceptions.CancelError: the error is treated and the calling method can |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
874 cancel the treatment (i.e. return) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
875 """ |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
876 if store_in_session: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
877 contents_dict = session["contents"] |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
878 else: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
879 if new: |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
880 raise exceptions.InternalError( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
881 '"store_in_session" must not be used when "new" is set' |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
882 ) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
883 contents_dict = {n: {} for n in session["contents"]} |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
884 content_elts = jingle_elt.elements(NS_JINGLE, "content") |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
885 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
886 for content_elt in content_elts: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
887 name = content_elt["name"] |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
888 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
889 if new: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
890 # the content must not exist, we check it |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
891 if not name or name in contents_dict: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
892 self.sendError(client, "bad-request", session["id"], request) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
893 raise exceptions.CancelError |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
894 content_data = contents_dict[name] = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
895 "creator": creator, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
896 "senders": content_elt.attributes.get("senders", "both"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
897 } |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
898 else: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
899 # the content must exist, we check it |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
900 try: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
901 content_data = contents_dict[name] |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
902 except KeyError: |
3028 | 903 log.warning("Other peer try to access an unknown content") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
904 self.sendError(client, "bad-request", session["id"], request) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
905 raise exceptions.CancelError |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
906 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
907 # application |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
908 if with_application: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
909 desc_elt = content_elt.description |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
910 if not desc_elt: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
911 self.sendError(client, "bad-request", session["id"], request) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
912 raise exceptions.CancelError |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
913 |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
914 if new: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
915 # the content is new, we need to check and link the application |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
916 app_ns = desc_elt.uri |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
917 if not app_ns or app_ns == NS_JINGLE: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
918 self.sendError(client, "bad-request", session["id"], request) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
919 raise exceptions.CancelError |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
920 |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
921 try: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
922 application = self._applications[app_ns] |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
923 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
924 log.warning( |
3028 | 925 "Unmanaged application namespace [{}]".format(app_ns) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
926 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
927 self.sendError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
928 client, "service-unavailable", session["id"], request |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
929 ) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
930 raise exceptions.CancelError |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
931 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
932 content_data["application"] = application |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
933 content_data["application_data"] = {} |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
934 else: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
935 # the content exists, we check that we have not a former desc_elt |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
936 if "desc_elt" in content_data: |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
937 raise exceptions.InternalError( |
3028 | 938 "desc_elt should not exist at this point" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
939 ) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
940 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
941 content_data["desc_elt"] = desc_elt |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
942 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
943 # transport |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
944 if with_transport: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
945 transport_elt = content_elt.transport |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
946 if not transport_elt: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
947 self.sendError(client, "bad-request", session["id"], request) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
948 raise exceptions.CancelError |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
949 |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
950 if new: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
951 # the content is new, we need to check and link the transport |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
952 transport_ns = transport_elt.uri |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
953 if not app_ns or app_ns == NS_JINGLE: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
954 self.sendError(client, "bad-request", session["id"], request) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
955 raise exceptions.CancelError |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
956 |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
957 try: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
958 transport = self._transports[transport_ns] |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
959 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
960 raise exceptions.InternalError( |
3028 | 961 "No transport registered for namespace {}".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
962 transport_ns |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
963 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
964 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
965 content_data["transport"] = transport |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
966 content_data["transport_data"] = {} |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
967 else: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
968 # the content exists, we check that we have not a former transport_elt |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
969 if "transport_elt" in content_data: |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
970 raise exceptions.InternalError( |
3028 | 971 "transport_elt should not exist at this point" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
972 ) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
973 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
974 content_data["transport_elt"] = transport_elt |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
975 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
976 return contents_dict |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
977 |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
978 def _ignore(self, client, action, session, content_name, elt): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
979 """Dummy method used when not exception must be raised if a method is not implemented in _call_plugins |
1754
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
980 |
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
981 must be used as app_default_cb and/or transp_default_cb |
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
982 """ |
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
983 return elt |
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
984 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
985 def _call_plugins( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
986 self, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
987 client: SatXMPPEntity, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
988 action: str, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
989 session: dict, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
990 app_method_name: Optional[str] = "jingle_handler", |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
991 transp_method_name: Optional[str] = "jingle_handler", |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
992 app_default_cb: Optional[Callable] = None, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
993 transp_default_cb: Optional[Callable] = None, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
994 delete: bool = True, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
995 elements: bool = True, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
996 force_element: Optional[domish.Element] = None |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
997 ) -> List[defer.Deferred]: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
998 """Call application and transport plugin methods for all contents |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
999 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1000 @param action: jingle action name |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1001 @param session: jingle session data |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1002 @param app_method_name: name of the method to call for applications |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1003 None to ignore |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1004 @param transp_method_name: name of the method to call for transports |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1005 None to ignore |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1006 @param app_default_cb: default callback to use if plugin has not app_method_name |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1007 None to raise an exception instead |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1008 @param transp_default_cb: default callback to use if plugin has not transp_method_name |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1009 None to raise an exception instead |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1010 @param delete: if True, remove desc_elt and transport_elt from session |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1011 ignored if elements is False |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1012 @param elements: True if elements(desc_elt and tranport_elt) must be managed |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1013 must be True if _call_plugins is used in a request, and False if it is used |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1014 after a request (i.e. on <iq> result or error) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1015 @param force_element: if elements is False, it is used as element parameter |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1016 else it is ignored |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1017 @return : list of launched Deferred |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1018 @raise exceptions.NotFound: method is not implemented |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1019 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1020 contents_dict = session["contents"] |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1021 defers_list = [] |
3028 | 1022 for content_name, content_data in contents_dict.items(): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1023 for method_name, handler_key, default_cb, elt_name in ( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1024 (app_method_name, "application", app_default_cb, "desc_elt"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1025 (transp_method_name, "transport", transp_default_cb, "transport_elt"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1026 ): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1027 if method_name is None: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1028 continue |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1029 |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1030 handler = content_data[handler_key].handler |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1031 try: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1032 method = getattr(handler, method_name) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1033 except AttributeError: |
1754
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
1034 if default_cb is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1035 raise exceptions.NotFound( |
3028 | 1036 "{} not implemented !".format(method_name) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1037 ) |
1754
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
1038 else: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1039 method = default_cb |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1040 if elements: |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1041 elt = content_data.pop(elt_name) if delete else content_data[elt_name] |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1042 else: |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1043 elt = force_element |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1044 d = utils.as_deferred( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1045 method, client, action, session, content_name, elt |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1046 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1047 defers_list.append(d) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1048 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1049 return defers_list |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1050 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1051 async def on_session_initiate( |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1052 self, |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1053 client: SatXMPPEntity, |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1054 request: domish.Element, |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1055 jingle_elt: domish.Element, |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1056 session: Dict[str, Any] |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1057 ) -> None: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1058 """Called on session-initiate action |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1059 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1060 The "jingle_request_confirmation" method of each application will be called |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1061 (or self.jingle_request_confirmation_default if the former doesn't exist). |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1062 The session is only accepted if all application are confirmed. |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1063 The application must manage itself multiple contents scenari (e.g. audio/video). |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1064 @param client: %(doc_client)s |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1065 @param request(domish.Element): full request |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1066 @param jingle_elt(domish.Element): <jingle> element |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1067 @param session(dict): session data |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1068 """ |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1069 contents_dict = session["contents"] |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1070 if contents_dict: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1071 raise exceptions.InternalError( |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1072 "Contents dict should not already be set at this point" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1073 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1074 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1075 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1076 self._parse_elements( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1077 jingle_elt, session, request, client, True, XEP_0166.ROLE_INITIATOR |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1078 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1079 except exceptions.CancelError: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1080 return |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1081 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1082 if not contents_dict: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1083 # there MUST be at least one content |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1084 self.sendError(client, "bad-request", session["id"], request) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1085 return |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1086 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1087 # at this point we can send the <iq/> result to confirm reception of the request |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1088 client.send(xmlstream.toResponse(request, "result")) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1089 |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1090 |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
1091 assert "jingle_elt" not in session |
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
1092 session["jingle_elt"] = jingle_elt |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1093 if not await self.host.trigger.async_point( |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1094 "XEP-0166_on_session_initiate", |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1095 client, session, request, jingle_elt |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1096 ): |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1097 return |
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1098 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1099 await defer.DeferredList(self._call_plugins( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1100 client, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1101 XEP_0166.A_PREPARE_CONFIRMATION, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1102 session, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1103 delete=False |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1104 )) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1105 |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1106 # we now request each application plugin confirmation |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1107 # and if all are accepted, we can accept the session |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1108 confirm_defers = self._call_plugins( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1109 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1110 XEP_0166.A_SESSION_INITIATE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1111 session, |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1112 "jingle_request_confirmation", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1113 None, |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1114 self.jingle_request_confirmation_default, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1115 delete=False, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1116 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1117 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1118 confirm_dlist = defer.gatherResults(confirm_defers) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1119 confirm_dlist.addCallback(self._confirmation_cb, session, jingle_elt, client) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1120 confirm_dlist.addErrback(self._jingle_error_cb, session, request, client) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1121 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1122 def _confirmation_cb(self, confirm_results, session, jingle_elt, client): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1123 """Method called when confirmation from user has been received |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1124 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1125 This method is only called for the responder |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1126 @param confirm_results(list[bool]): all True if session is accepted |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1127 @param session(dict): session data |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1128 @param jingle_elt(domish.Element): jingle data of this session |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1129 @param client: %(doc_client)s |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1130 """ |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
1131 del session["jingle_elt"] |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1132 confirmed = all(confirm_results) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1133 if not confirmed: |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2487
diff
changeset
|
1134 return self.terminate(client, XEP_0166.REASON_DECLINE, session) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1135 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1136 iq_elt, jingle_elt = self._build_jingle_elt( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1137 client, session, XEP_0166.A_SESSION_ACCEPT |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1138 ) |
2927
69e4716d6268
plugins (jingle) file transfer: use initial "from" attribute as local jid instead of client.jid:
Goffi <goffi@goffi.org>
parents:
2920
diff
changeset
|
1139 jingle_elt["responder"] = session['local_jid'].full() |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
1140 session["jingle_elt"] = jingle_elt |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1141 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1142 # contents |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1143 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1144 def addElement(domish_elt, content_elt): |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1145 content_elt.addChild(domish_elt) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1146 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1147 defers_list = [] |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1148 |
3028 | 1149 for content_name, content_data in session["contents"].items(): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1150 content_elt = jingle_elt.addElement("content") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1151 content_elt["creator"] = XEP_0166.ROLE_INITIATOR |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1152 content_elt["name"] = content_name |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1153 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1154 application = content_data["application"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1155 app_session_accept_cb = application.handler.jingle_handler |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1156 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1157 app_d = utils.as_deferred( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1158 app_session_accept_cb, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1159 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1160 XEP_0166.A_SESSION_INITIATE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1161 session, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1162 content_name, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1163 content_data.pop("desc_elt"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1164 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1165 app_d.addCallback(addElement, content_elt) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1166 defers_list.append(app_d) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1167 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1168 transport = content_data["transport"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1169 transport_session_accept_cb = transport.handler.jingle_handler |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1170 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1171 transport_d = utils.as_deferred( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1172 transport_session_accept_cb, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1173 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1174 XEP_0166.A_SESSION_INITIATE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1175 session, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1176 content_name, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1177 content_data.pop("transport_elt"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1178 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1179 transport_d.addCallback(addElement, content_elt) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1180 defers_list.append(transport_d) |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1181 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1182 d_list = defer.DeferredList(defers_list) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1183 d_list.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1184 lambda __: self._call_plugins( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1185 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1186 XEP_0166.A_PREPARE_RESPONDER, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1187 session, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1188 app_method_name=None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1189 elements=False, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1190 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1191 ) |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
1192 d_list.addCallback(lambda __: session.pop("jingle_elt")) |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
1193 d_list.addCallback(lambda __: iq_elt.send()) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1194 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1195 def change_state(__, session): |
4116
23fa52acf72c
plugin XEP-0167, XEP-0176: transport-info and ICE candidate sending are delayed if session is not active yet
Goffi <goffi@goffi.org>
parents:
4114
diff
changeset
|
1196 session["state"] = XEP_0166.STATE_ACTIVE |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1197 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1198 d_list.addCallback(change_state, session) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1199 d_list.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1200 lambda __: self._call_plugins( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1201 client, XEP_0166.A_ACCEPTED_ACK, session, elements=False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1202 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1203 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1204 d_list.addErrback(self._iq_error, session["id"], client) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1205 return d_list |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1206 |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1207 def get_reason_elt(self, parent_elt: domish.Element) -> domish.Element: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1208 """Find a <reason> element in parent_elt |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1209 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1210 if none is found, add an empty one to the element |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1211 @return: the <reason> element |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1212 """ |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1213 try: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1214 return next(parent_elt.elements(NS_JINGLE, "reason")) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1215 except StopIteration: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1216 log.warning("No reason given for session termination") |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1217 reason_elt = parent_elt.addElement("reason") |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1218 return reason_elt |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1219 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1220 def parse_reason_elt(self, reason_elt: domish.Element) -> tuple[str|None, str|None]: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1221 """Parse a <reason> element |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1222 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1223 @return: reason found, and text if any |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1224 """ |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1225 reason, text = None, None |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1226 for elt in reason_elt.elements(): |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1227 if elt.uri == NS_JINGLE: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1228 if elt.name == "text": |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1229 text = str(elt) |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1230 else: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1231 reason = elt.name |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1232 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1233 if reason is None: |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1234 log.debug("no reason specified,") |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1235 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1236 return reason, text |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1237 |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1238 async def on_session_terminate( |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1239 self, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1240 client: SatXMPPEntity, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1241 request: domish.Element, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1242 jingle_elt: domish.Element, |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1243 session: dict |
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1244 ) -> None: |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1245 # TODO: check reason, display a message to user if needed |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
1246 log.debug(f"Jingle Session {session['id']} terminated") |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1247 reason_elt = self.get_reason_elt(jingle_elt) |
1754
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
1248 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1249 terminate_defers = self._call_plugins( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1250 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1251 XEP_0166.A_SESSION_TERMINATE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1252 session, |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1253 "jingle_terminate", |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1254 "jingle_terminate", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1255 self._ignore, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1256 self._ignore, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1257 elements=False, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1258 force_element=reason_elt, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1259 ) |
1754
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
1260 terminate_dlist = defer.DeferredList(terminate_defers) |
f4e9f2f7fe0f
plugin XEP-0166: jingleTerminate is called (if present) on applications and transports plugins on session-terminate action, can be used to do some cleaning
Goffi <goffi@goffi.org>
parents:
1630
diff
changeset
|
1261 |
4111
a8ac5e1e5848
plugin XEP-0166: `jingle_terminate`, session handling and reason parsing:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
1262 terminate_dlist.addCallback(lambda __: self.delete_session(client, session["id"])) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1263 client.send(xmlstream.toResponse(request, "result")) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1264 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1265 async def on_session_accept(self, client, request, jingle_elt, session): |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1266 """Method called once session is accepted |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1267 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1268 This method is only called for initiator |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1269 @param client: %(doc_client)s |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1270 @param request(domish.Element): full <iq> request |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1271 @param jingle_elt(domish.Element): the <jingle> element |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1272 @param session(dict): session data |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1273 """ |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1274 log.debug(f"Jingle session {session['id']} has been accepted") |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1275 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1276 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1277 self._parse_elements(jingle_elt, session, request, client) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1278 except exceptions.CancelError: |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1279 return |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1280 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1281 # at this point we can send the <iq/> result to confirm reception of the request |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1282 client.send(xmlstream.toResponse(request, "result")) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1283 # and change the state |
4116
23fa52acf72c
plugin XEP-0167, XEP-0176: transport-info and ICE candidate sending are delayed if session is not active yet
Goffi <goffi@goffi.org>
parents:
4114
diff
changeset
|
1284 session["state"] = XEP_0166.STATE_ACTIVE |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
1285 session["jingle_elt"] = jingle_elt |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1286 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1287 await defer.DeferredList(self._call_plugins( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1288 client, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1289 XEP_0166.A_PREPARE_INITIATOR, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1290 session, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1291 delete=False |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1292 )) |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1293 |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1294 negociate_defers = [] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1295 negociate_defers = self._call_plugins(client, XEP_0166.A_SESSION_ACCEPT, session) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1296 |
3040 | 1297 negociate_dlist = defer.gatherResults(negociate_defers) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1298 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1299 # after negociations we start the transfer |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1300 negociate_dlist.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1301 lambda __: self._call_plugins( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1302 client, XEP_0166.A_START, session, app_method_name=None, elements=False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1303 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1304 ) |
4053
dd39e60ca2aa
plugin XEP-0166: set `jingle_elt`, `desc_elt` and `transport_elt`:
Goffi <goffi@goffi.org>
parents:
4044
diff
changeset
|
1305 negociate_dlist.addCallback(lambda __: session.pop("jingle_elt")) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1306 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1307 def _on_session_cb(self, result, client, request, jingle_elt, session): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1308 client.send(xmlstream.toResponse(request, "result")) |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1309 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1310 def _on_session_eb(self, failure_, client, request, jingle_elt, session): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1311 log.error("Error while handling on_session_info: {}".format(failure_.value)) |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1312 # XXX: only error managed so far, maybe some applications/transports need more |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1313 self.sendError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1314 client, "feature-not-implemented", None, request, "unsupported-info" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1315 ) |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1316 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1317 def on_session_info(self, client, request, jingle_elt, session): |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1318 """Method called when a session-info action is received from other peer |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1319 |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1320 This method is only called for initiator |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1321 @param client: %(doc_client)s |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1322 @param request(domish.Element): full <iq> request |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1323 @param jingle_elt(domish.Element): the <jingle> element |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1324 @param session(dict): session data |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1325 """ |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1326 if not jingle_elt.children: |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1327 # this is a session ping, see XEP-0166 §6.8 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1328 client.send(xmlstream.toResponse(request, "result")) |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1329 return |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1330 |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1331 try: |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1332 # XXX: session-info is most likely only used for application, so we don't call transport plugins |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1333 # if a future transport use it, this behaviour must be adapted |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1334 defers = self._call_plugins( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1335 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1336 XEP_0166.A_SESSION_INFO, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1337 session, |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1338 "jingle_session_info", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1339 None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1340 elements=False, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1341 force_element=jingle_elt, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1342 ) |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1343 except exceptions.NotFound as e: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1344 self._on_session_eb(failure.Failure(e), client, request, jingle_elt, session) |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1345 return |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1346 |
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1347 dlist = defer.DeferredList(defers, fireOnOneErrback=True) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1348 dlist.addCallback(self._on_session_cb, client, request, jingle_elt, session) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1349 dlist.addErrback(self._on_session_cb, client, request, jingle_elt, session) |
1616
1e05b776a55b
plugin XEP-0166: session-info action handling
Goffi <goffi@goffi.org>
parents:
1615
diff
changeset
|
1350 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1351 async def on_transport_replace(self, client, request, jingle_elt, session): |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1352 """A transport change is requested |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1353 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1354 The request is parsed, and jingle_handler is called on concerned transport plugin(s) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1355 @param client: %(doc_client)s |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1356 @param request(domish.Element): full <iq> request |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1357 @param jingle_elt(domish.Element): the <jingle> element |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1358 @param session(dict): session data |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1359 """ |
3028 | 1360 log.debug("Other peer wants to replace the transport") |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1361 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1362 self._parse_elements( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1363 jingle_elt, session, request, client, with_application=False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1364 ) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1365 except exceptions.CancelError: |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1366 defer.returnValue(None) |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1367 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1368 client.send(xmlstream.toResponse(request, "result")) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1369 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1370 content_name = None |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1371 to_replace = [] |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1372 |
3028 | 1373 for content_name, content_data in session["contents"].items(): |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1374 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1375 transport_elt = content_data.pop("transport_elt") |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1376 except KeyError: |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1377 continue |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1378 transport_ns = transport_elt.uri |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1379 try: |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1380 transport = self._transports[transport_ns] |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1381 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1382 log.warning( |
3028 | 1383 "Other peer want to replace current transport with an unknown one: {}".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1384 transport_ns |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1385 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1386 ) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1387 content_name = None |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1388 break |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1389 to_replace.append((content_name, content_data, transport, transport_elt)) |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1390 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1391 if content_name is None: |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1392 # wa can't accept the replacement |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1393 iq_elt, reject_jingle_elt = self._build_jingle_elt( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1394 client, session, XEP_0166.A_TRANSPORT_REJECT |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1395 ) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1396 for child in jingle_elt.children: |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1397 reject_jingle_elt.addChild(child) |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1398 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1399 iq_elt.send() |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1400 defer.returnValue(None) |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1401 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1402 # at this point, everything is alright and we can replace the transport(s) |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1403 # this is similar to an session-accept action, but for transports only |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1404 iq_elt, accept_jingle_elt = self._build_jingle_elt( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1405 client, session, XEP_0166.A_TRANSPORT_ACCEPT |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1406 ) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1407 for content_name, content_data, transport, transport_elt in to_replace: |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1408 # we can now actually replace the transport |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1409 await utils.as_deferred( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1410 content_data["transport"].handler.jingle_handler, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1411 client, XEP_0166.A_DESTROY, session, content_name, None |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1412 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1413 content_data["transport"] = transport |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1414 content_data["transport_data"].clear() |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1415 # and build the element |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1416 content_elt = accept_jingle_elt.addElement("content") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1417 content_elt["name"] = content_name |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1418 content_elt["creator"] = content_data["creator"] |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1419 # we notify the transport and insert its <transport/> in the answer |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1420 accept_transport_elt = await utils.as_deferred( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1421 transport.handler.jingle_handler, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1422 client, XEP_0166.A_TRANSPORT_REPLACE, session, content_name, transport_elt |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1423 ) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1424 content_elt.addChild(accept_transport_elt) |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1425 # there is no confirmation needed here, so we can directly prepare it |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1426 await utils.as_deferred( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1427 transport.handler.jingle_handler, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1428 client, XEP_0166.A_PREPARE_RESPONDER, session, content_name, None |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1429 ) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1430 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1431 iq_elt.send() |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1432 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1433 def on_transport_accept(self, client, request, jingle_elt, session): |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1434 """Method called once transport replacement is accepted |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1435 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1436 @param client: %(doc_client)s |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1437 @param request(domish.Element): full <iq> request |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1438 @param jingle_elt(domish.Element): the <jingle> element |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1439 @param session(dict): session data |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1440 """ |
3028 | 1441 log.debug("new transport has been accepted") |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1442 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1443 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1444 self._parse_elements( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1445 jingle_elt, session, request, client, with_application=False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1446 ) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1447 except exceptions.CancelError: |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1448 return |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1449 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1450 # at this point we can send the <iq/> result to confirm reception of the request |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1451 client.send(xmlstream.toResponse(request, "result")) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1452 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1453 negociate_defers = [] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1454 negociate_defers = self._call_plugins( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1455 client, XEP_0166.A_TRANSPORT_ACCEPT, session, app_method_name=None |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1456 ) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1457 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1458 negociate_dlist = defer.DeferredList(negociate_defers) |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1459 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1460 # after negociations we start the transfer |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1461 negociate_dlist.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1462 lambda __: self._call_plugins( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1463 client, XEP_0166.A_START, session, app_method_name=None, elements=False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1464 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1465 ) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1466 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3969
diff
changeset
|
1467 def on_transport_reject(self, client, request, jingle_elt, session): |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1468 """Method called when a transport replacement is refused |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1469 |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1470 @param client: %(doc_client)s |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1471 @param request(domish.Element): full <iq> request |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1472 @param jingle_elt(domish.Element): the <jingle> element |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1473 @param session(dict): session data |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1474 """ |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1475 # XXX: for now, we terminate the session in case of transport-reject |
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1476 # this behaviour may change in the future |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1477 self.terminate(client, "failed-transport", session) |
1630
c25f63215632
plugin XEP-0166: transport replacement:
Goffi <goffi@goffi.org>
parents:
1617
diff
changeset
|
1478 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1479 def on_transport_info( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1480 self, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1481 client: SatXMPPEntity, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1482 request: domish.Element, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1483 jingle_elt: domish.Element, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1484 session: dict |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1485 ) -> None: |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1486 """Method called when a transport-info action is received from other peer |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1487 |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1488 The request is parsed, and jingle_handler is called on concerned transport |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1489 plugin(s) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1490 @param client: %(doc_client)s |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1491 @param request: full <iq> request |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1492 @param jingle_elt: the <jingle> element |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1493 @param session: session data |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1494 """ |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1495 log.debug(f"Jingle session {session['id']} has been accepted") |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1496 |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1497 try: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1498 parsed_contents = self._parse_elements( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1499 jingle_elt, session, request, client, with_application=False, |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1500 store_in_session=False |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1501 ) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1502 except exceptions.CancelError: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1503 return |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1504 |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1505 # The parsing was OK, we send the <iq> result |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1506 client.send(xmlstream.toResponse(request, "result")) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1507 |
3028 | 1508 for content_name, content_data in session["contents"].items(): |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1509 try: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1510 transport_elt = parsed_contents[content_name]["transport_elt"] |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1511 except KeyError: |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1512 continue |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1513 else: |
4044
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1514 utils.as_deferred( |
3900626bc100
plugin XEP-0166: refactoring, and various improvments:
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
1515 content_data["transport"].handler.jingle_handler, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1516 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1517 XEP_0166.A_TRANSPORT_INFO, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1518 session, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1519 content_name, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1520 transport_elt, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1521 ) |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1523
diff
changeset
|
1522 |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1523 |
3028 | 1524 @implementer(iwokkel.IDisco) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1525 class XEP_0166_handler(xmlstream.XMPPHandler): |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1526 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1527 def __init__(self, plugin_parent): |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1528 self.plugin_parent = plugin_parent |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1529 |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1530 def connectionInitialized(self): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1531 self.xmlstream.addObserver( |
3969
8e7d5796fb23
plugin XEP-0391: implement XEP-0391 (Jingle Encrypted Transports) + XEP-0396 (JET-OMEMO):
Goffi <goffi@goffi.org>
parents:
3527
diff
changeset
|
1532 JINGLE_REQUEST, self.plugin_parent._on_jingle_request, client=self.parent |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1533 ) |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1534 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1535 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1536 return [disco.DiscoFeature(NS_JINGLE)] |
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1537 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1538 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
1523
0209f8d35873
plugin XEP-0166: (jingle) first draft. Not all actions are managed yet
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1539 return [] |