annotate src/plugins/plugin_xep_0095.py @ 1198:16ce9a6580a3

misc (install): Lower default setuptools version From 0d607b6ed49eab758fd9b272e148f032e65fb2e2 Mon Sep 17 00:00:00 2001 python-setuptools 5.7 is not yet in Debian, so we need to set the default version to 5.5 (the current version in sid) to avoid the newer version to be downloaded from pypi.
author Matteo Cypriani <mcy@lm7.fr>
date Tue, 09 Sep 2014 22:09:51 -0400
parents 301b342c697a
children 069ad98b360d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
3
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
4 # SAT plugin for managing xep-0095
811
1fe00f0c9a91 dates update
Goffi <goffi@goffi.org>
parents: 771
diff changeset
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
6
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
7 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
10 # (at your option) any later version.
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
11
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
12 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
15 # GNU Affero General Public License for more details.
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
16
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
19
771
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 609
diff changeset
20 from sat.core.i18n import _
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 811
diff changeset
21 from sat.core.constants import Const as C
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 941
diff changeset
22 from sat.core.log import getLogger
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 941
diff changeset
23 log = getLogger(__name__)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from twisted.words.xish import domish
941
c6d8fc63b1db core, plugins: host.getClient now raise an exception instead of returning None when no profile is found, plugins have been adapted consequently and a bit cleaned
Goffi <goffi@goffi.org>
parents: 916
diff changeset
25 from twisted.words.protocols.jabber import client
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
26 import uuid
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
27
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from zope.interface import implements
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
29
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
30 try:
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
31 from twisted.words.protocols.xmlstream import XMPPHandler
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
32 except ImportError:
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
33 from wokkel.subprotocols import XMPPHandler
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
34
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
35 from wokkel import disco, iwokkel
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
36
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
37 IQ_SET = '/iq[@type="set"]'
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
38 NS_SI = 'http://jabber.org/protocol/si'
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
39 SI_REQUEST = IQ_SET + '/si[@xmlns="' + NS_SI + '"]'
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
40 SI_PROFILE_HEADER = "http://jabber.org/protocol/si/profile/"
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
41
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
42 PLUGIN_INFO = {
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
43 "name": "XEP 0095 Plugin",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
44 "import_name": "XEP-0095",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
45 "type": "XEP",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
46 "protocols": ["XEP-0095"],
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
47 "main": "XEP_0095",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
48 "handler": "yes",
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
49 "description": _("""Implementation of Stream Initiation""")
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
50 }
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
51
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
52
588
beaf6bec2fcd Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
53 class XEP_0095(object):
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
54
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
55 def __init__(self, host):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 941
diff changeset
56 log.info(_("Plugin XEP_0095 initialization"))
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
57 self.host = host
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
58 self.si_profiles = {} # key: SI profile, value: callback
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
59
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
60 def getHandler(self, profile):
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
61 return XEP_0095_handler(self)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
62
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
63 def registerSIProfile(self, si_profile, callback):
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
64 """Add a callback for a SI Profile
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
65 param si_profile: SI profile name (e.g. file-transfer)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
66 param callback: method to call when the profile name is asked"""
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
67 self.si_profiles[si_profile] = callback
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
68
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
69 def streamInit(self, iq_el, profile):
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
70 """This method is called on stream initiation (XEP-0095 #3.2)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
71 @param iq_el: IQ element
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
72 @param profile: %(doc_profile)s"""
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 941
diff changeset
73 log.info(_("XEP-0095 Stream initiation"))
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
74 iq_el.handled = True
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
75 si_el = iq_el.firstChildElement()
398
cb0285372818 File transfer:
Goffi <goffi@goffi.org>
parents: 394
diff changeset
76 si_id = si_el.getAttribute('id')
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
77 si_mime_type = iq_el.getAttribute('mime-type', 'application/octet-stream')
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
78 si_profile = si_el.getAttribute('profile')
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
79 si_profile_key = si_profile[len(SI_PROFILE_HEADER):] if si_profile.startswith(SI_PROFILE_HEADER) else si_profile
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
80 if si_profile_key in self.si_profiles:
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
81 #We know this SI profile, we call the callback
398
cb0285372818 File transfer:
Goffi <goffi@goffi.org>
parents: 394
diff changeset
82 self.si_profiles[si_profile_key](iq_el['id'], iq_el['from'], si_id, si_mime_type, si_el, profile)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
83 else:
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
84 #We don't know this profile, we send an error
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
85 self.sendBadProfileError(iq_el['id'], iq_el['from'], profile)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
86
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 811
diff changeset
87 def sendRejectedError(self, iq_id, to_jid, reason='Offer Declined', profile=C.PROF_KEY_NONE):
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
88 """Helper method to send when the stream is rejected
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
89 @param iq_id: IQ id
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
90 @param to_jid: recipient
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
91 @param reason: human readable reason (string)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
92 @param profile: %(doc_profile)s"""
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
93 self.sendError(iq_id, to_jid, 403, 'cancel', {'text': reason}, profile=profile)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
94
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
95 def sendBadProfileError(self, iq_id, to_jid, profile):
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
96 """Helper method to send when we don't know the SI profile
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
97 @param iq_id: IQ id
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
98 @param to_jid: recipient
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
99 @param profile: %(doc_profile)s"""
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
100 self.sendError(iq_id, to_jid, 400, 'modify', profile=profile)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
101
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
102 def sendBadRequestError(self, iq_id, to_jid, profile):
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
103 """Helper method to send when we don't know the SI profile
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
104 @param iq_id: IQ id
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
105 @param to_jid: recipient
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
106 @param profile: %(doc_profile)s"""
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
107 self.sendError(iq_id, to_jid, 400, 'cancel', profile=profile)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
108
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
109 def sendFailedError(self, iq_id, to_jid, profile):
391
c34fd9d6242e spelling
Goffi <goffi@goffi.org>
parents: 385
diff changeset
110 """Helper method to send when we transfer failed
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
111 @param iq_id: IQ id
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
112 @param to_jid: recipient
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
113 @param profile: %(doc_profile)s"""
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 941
diff changeset
114 self.sendError(iq_id, to_jid, 500, 'cancel', {'custom': 'failed'}, profile=profile) # as there is no lerror code for failed transfer, we use 500 (undefined-condition)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
115
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 811
diff changeset
116 def sendError(self, iq_id, to_jid, err_code, err_type='cancel', data={}, profile=C.PROF_KEY_NONE):
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
117 """Send IQ error as a result
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
118 @param iq_id: IQ id
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
119 @param to_jid: recipient
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
120 @param err_code: error err_code (see XEP-0095 #4.2)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
121 @param err_type: one of cancel, modify
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
122 @param data: error specific data (dictionary)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
123 @param profile: %(doc_profile)s
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
124 """
941
c6d8fc63b1db core, plugins: host.getClient now raise an exception instead of returning None when no profile is found, plugins have been adapted consequently and a bit cleaned
Goffi <goffi@goffi.org>
parents: 916
diff changeset
125 client_ = self.host.getClient(profile)
536
a31abb97310d core, plugins: fixed bad namespace in stanza creation
Goffi <goffi@goffi.org>
parents: 480
diff changeset
126 result = domish.Element((None, 'iq'))
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
127 result['type'] = 'result'
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
128 result['id'] = iq_id
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
129 result['to'] = to_jid
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
130 error_el = result.addElement('error')
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
131 error_el['err_code'] = str(err_code)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
132 error_el['type'] = err_type
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
133 if err_code == 400 and err_type == 'cancel':
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
134 error_el.addElement(('urn:ietf:params:xml:ns:xmpp-stanzas', 'bad-request'))
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
135 error_el.addElement((NS_SI, 'no-valid-streams'))
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
136 elif err_code == 400 and err_type == 'modify':
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
137 error_el.addElement(('urn:ietf:params:xml:ns:xmpp-stanzas', 'bad-request'))
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
138 error_el.addElement((NS_SI, 'bad-profile'))
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
139 elif err_code == 403 and err_type == 'cancel':
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
140 error_el.addElement(('urn:ietf:params:xml:ns:xmpp-stanzas', 'forbidden'))
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
141 if 'text' in data:
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
142 error_el.addElement(('urn:ietf:params:xml:ns:xmpp-stanzas', 'text'), content=data['text'])
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
143 elif err_code == 500 and err_type == 'cancel':
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
144 condition_el = error_el.addElement((NS_SI, 'undefined-condition'))
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
145 if 'custom' in data and data['custom'] == 'failed':
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
146 condition_el.addContent('Stream failed')
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
147
941
c6d8fc63b1db core, plugins: host.getClient now raise an exception instead of returning None when no profile is found, plugins have been adapted consequently and a bit cleaned
Goffi <goffi@goffi.org>
parents: 916
diff changeset
148 client_.xmlstream.send(result)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
149
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 811
diff changeset
150 def acceptStream(self, iq_id, to_jid, feature_elt, misc_elts=[], profile=C.PROF_KEY_NONE):
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
151 """Send the accept stream initiation answer
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
152 @param iq_id: IQ id
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
153 @param feature_elt: domish element 'feature' containing stream method to use
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
154 @param misc_elts: list of domish element to add
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
155 @param profile: %(doc_profile)s"""
536
a31abb97310d core, plugins: fixed bad namespace in stanza creation
Goffi <goffi@goffi.org>
parents: 480
diff changeset
156 _client = self.host.getClient(profile)
a31abb97310d core, plugins: fixed bad namespace in stanza creation
Goffi <goffi@goffi.org>
parents: 480
diff changeset
157 assert(_client)
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 941
diff changeset
158 log.info(_("sending stream initiation accept answer"))
536
a31abb97310d core, plugins: fixed bad namespace in stanza creation
Goffi <goffi@goffi.org>
parents: 480
diff changeset
159 result = domish.Element((None, 'iq'))
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
160 result['type'] = 'result'
394
8f3551ceee17 plugin XEP-0065: refactored and misc stuff fixed. Still not finished
Goffi <goffi@goffi.org>
parents: 391
diff changeset
161 result['id'] = iq_id
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
162 result['to'] = to_jid
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
163 si = result.addElement('si', NS_SI)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
164 si.addChild(feature_elt)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
165 for elt in misc_elts:
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
166 si.addChild(elt)
536
a31abb97310d core, plugins: fixed bad namespace in stanza creation
Goffi <goffi@goffi.org>
parents: 480
diff changeset
167 _client.xmlstream.send(result)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
168
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 811
diff changeset
169 def proposeStream(self, to_jid, si_profile, feature_elt, misc_elts, mime_type='application/octet-stream', profile_key=C.PROF_KEY_NONE):
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
170 """Propose a stream initiation
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
171 @param to_jid: recipient (JID)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
172 @param si_profile: Stream initiation profile (XEP-0095)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
173 @param feature_elt: feature domish element, according to XEP-0020
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
174 @param misc_elts: list of domish element to add for this profile
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
175 @param mime_type: stream mime type
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
176 @param profile: %(doc_profile)s
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
177 @return: session id, offer"""
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
178 current_jid, xmlstream = self.host.getJidNStream(profile_key)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
179 if not xmlstream:
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 941
diff changeset
180 log.error(_('Asking for an non-existant or not connected profile'))
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
181 return ""
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
182
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
183 offer = client.IQ(xmlstream, 'set')
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
184 sid = str(uuid.uuid4())
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 941
diff changeset
185 log.debug(_("Stream Session ID: %s") % offer["id"])
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
186
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
187 offer["from"] = current_jid.full()
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
188 offer["to"] = to_jid.full()
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
189 si = offer.addElement('si', NS_SI)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
190 si['id'] = sid
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
191 si["mime-type"] = mime_type
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
192 si["profile"] = si_profile
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
193 for elt in misc_elts:
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
194 si.addChild(elt)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
195 si.addChild(feature_elt)
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
196
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
197 offer.send()
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
198 return sid, offer
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
199
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
200
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
201 class XEP_0095_handler(XMPPHandler):
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
202 implements(iwokkel.IDisco)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
203
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
204 def __init__(self, plugin_parent):
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
205 self.plugin_parent = plugin_parent
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
206 self.host = plugin_parent.host
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
207
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
208 def connectionInitialized(self):
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
209 self.xmlstream.addObserver(SI_REQUEST, self.plugin_parent.streamInit, profile=self.parent.profile)
385
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
210
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
211 def getDiscoInfo(self, requestor, target, nodeIdentifier=''):
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
212 return [disco.DiscoFeature(NS_SI)] + [disco.DiscoFeature("http://jabber.org/protocol/si/profile/%s" % profile_name) for profile_name in self.plugin_parent.si_profiles]
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
213
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
214 def getDiscoItems(self, requestor, target, nodeIdentifier=''):
41fdaeb005bc plugins: Stream initiation (xep-0095) implementation
Goffi <goffi@goffi.org>
parents:
diff changeset
215 return []