Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0261.py @ 2617:81b70eeb710f
quick_frontend(contact list): refactored update:
update is now called with appropriate constant value (C.UPDATE_ADD, C.UPDATE_DELETE, C.UPDATE_MODIFY and so on) when a widget change visibility according to current options.
Before it was linked to cache only (C.UPDATE_ADD was only called when contact was first added to cache).
This make widget handling in frontends more easy.
Renamed entityToShow to entityVisible, which seems to correspond better.
Started reducing lines lenght to 90 chars as a test. May become the new coding style soon.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 24 Jun 2018 21:59:29 +0200 |
parents | 26edcf3a30eb |
children | 56f94936df1e |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
1 #!/usr/bin/env python2 |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # SAT plugin for Jingle (XEP-0261) |
2483 | 5 # Copyright (C) 2009-2018 Jérôme Poisson (goffi@goffi.org) |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 from sat.core.i18n import _ |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
21 from sat.core.constants import Const as C |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from sat.core.log import getLogger |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 log = getLogger(__name__) |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 from wokkel import disco, iwokkel |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from zope.interface import implements |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 from twisted.words.xish import domish |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 import uuid |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 try: |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 from twisted.words.protocols.xmlstream import XMPPHandler |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 except ImportError: |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 from wokkel.subprotocols import XMPPHandler |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
33 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 NS_JINGLE_IBB = 'urn:xmpp:jingle:transports:ibb:1' |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 PLUGIN_INFO = { |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
38 C.PI_NAME: "Jingle In-Band Bytestreams", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
39 C.PI_IMPORT_NAME: "XEP-0261", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
40 C.PI_TYPE: "XEP", |
2504
67cc54b01a12
plugin file sharing component: first draft:
Goffi <goffi@goffi.org>
parents:
2489
diff
changeset
|
41 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
|
42 C.PI_PROTOCOLS: ["XEP-0261"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
43 C.PI_DEPENDENCIES: ["XEP-0166", "XEP-0047"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
44 C.PI_MAIN: "XEP_0261", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
45 C.PI_HANDLER: "yes", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
46 C.PI_DESCRIPTION: _("""Implementation of Jingle In-Band Bytestreams""") |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 } |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 class XEP_0261(object): |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
51 NAMESPACE = NS_JINGLE_IBB # used by XEP-0260 plugin for transport-replace |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 def __init__(self, host): |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 log.info(_("plugin Jingle In-Band Bytestreams")) |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 self.host = host |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 self._j = host.plugins["XEP-0166"] # shortcut to access jingle |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 self._ibb = host.plugins["XEP-0047"] # and in-band bytestream |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 self._j.registerTransport(NS_JINGLE_IBB, self._j.TRANSPORT_STREAMING, self, -10000) # must be the lowest priority |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
60 def getHandler(self, client): |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 return XEP_0261_handler() |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
63 def jingleSessionInit(self, client, session, content_name): |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 transport_elt = domish.Element((NS_JINGLE_IBB, "transport")) |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 content_data = session['contents'][content_name] |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1527
diff
changeset
|
66 transport_data = content_data['transport_data'] |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1527
diff
changeset
|
67 transport_data['block_size'] = self._ibb.BLOCK_SIZE |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1527
diff
changeset
|
68 transport_elt['block-size'] = unicode(transport_data['block_size']) |
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1527
diff
changeset
|
69 transport_elt['sid'] = transport_data['sid'] = unicode(uuid.uuid4()) |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 return transport_elt |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
72 def jingleHandler(self, client, action, session, content_name, transport_elt): |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 content_data = session['contents'][content_name] |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1527
diff
changeset
|
74 transport_data = content_data['transport_data'] |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
75 if action in (self._j.A_SESSION_ACCEPT, |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
76 self._j.A_ACCEPTED_ACK, |
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
77 self._j.A_TRANSPORT_ACCEPT): |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 pass |
1631
25906c0dbc63
plugin XEP-0260, XEP-0261: fallback from S5B to IBB is implemented
Goffi <goffi@goffi.org>
parents:
1571
diff
changeset
|
79 elif action in (self._j.A_SESSION_INITIATE, self._j.A_TRANSPORT_REPLACE): |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1527
diff
changeset
|
80 transport_data['sid'] = transport_elt['sid'] |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 elif action in (self._j.A_START, self._j.A_PREPARE_RESPONDER): |
1567
268fda4236ca
plugins XE0166, XEP-0234, XEP-0260, XEP-0261: renamed session key managing other peer's jid to "peer_jid" instead of "to_jid"
Goffi <goffi@goffi.org>
parents:
1556
diff
changeset
|
82 peer_jid = session['peer_jid'] |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1527
diff
changeset
|
83 sid = transport_data['sid'] |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
84 stream_object = content_data['stream_object'] |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 if action == self._j.A_START: |
1556
cbfbe028d099
plugin XEP-0166, XEP-0234, XEP-0261:
Goffi <goffi@goffi.org>
parents:
1527
diff
changeset
|
86 block_size = transport_data['block_size'] |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
87 d = self._ibb.startStream(client, stream_object, peer_jid, sid, block_size) |
1571
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
88 d.chainDeferred(content_data['finished_d']) |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 else: |
2489
e2a7bb875957
plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
90 d = self._ibb.createSession(client, stream_object, peer_jid, sid) |
1571
c668081eba1c
plugins XEP-0234, XEP-0260, XEP-0261: jingle session termination is managed by application (XEP-0234) instead of transport
Goffi <goffi@goffi.org>
parents:
1567
diff
changeset
|
91 d.chainDeferred(content_data['finished_d']) |
1527
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
92 else: |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 log.warning(u"FIXME: unmanaged action {}".format(action)) |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 return transport_elt |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 class XEP_0261_handler(XMPPHandler): |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 implements(iwokkel.IDisco) |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 def getDiscoInfo(self, requestor, target, nodeIdentifier=''): |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 return [disco.DiscoFeature(NS_JINGLE_IBB)] |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 def getDiscoItems(self, requestor, target, nodeIdentifier=''): |
bfef1934a8f3
plugin XEP-0261: jingle in-band bystream first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 return [] |