annotate src/plugins/plugin_xep_0033.py @ 2444:30278ea1ca7c

plugin XEP-0060: added node watching methods to bridge: new methods psNodeWatchAdd and psNodeWatchRemove allows to set a watch for the time of the session on one node, to have a signal called when something change on this node. This signal (psEventRaw) send raw data (raw XML), in opposition to psEvent which is there to send high level data (e.g. parsed blog data). Those method are primarely there to let frontends manage local cache for pubsub nodes.
author Goffi <goffi@goffi.org>
date Sun, 19 Nov 2017 16:51:39 +0100
parents 6a004a22dd9e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
3
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # SAT plugin for Extended Stanza Addressing (xep-0033)
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1552
diff changeset
5 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
6
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # (at your option) any later version.
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
11
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
16
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
19
771
bfabeedbf32e core: i18n refactoring:
Goffi <goffi@goffi.org>
parents: 750
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
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 922
diff changeset
22 from sat.core.log import getLogger
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 922
diff changeset
23 log = getLogger(__name__)
1052
e88bff4c8b77 core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents: 999
diff changeset
24 from sat.core import exceptions
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
25 from wokkel import disco, iwokkel
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
26 from zope.interface import implements
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
27 from twisted.words.protocols.jabber.jid import JID
1052
e88bff4c8b77 core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents: 999
diff changeset
28 from twisted.python import failure
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
29 import copy
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
30 try:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
31 from twisted.words.protocols.xmlstream import XMPPHandler
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
32 except ImportError:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
33 from wokkel.subprotocols import XMPPHandler
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
34 from twisted.words.xish import domish
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 922
diff changeset
35 from twisted.internet import defer
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
36
1374
0befb14ecf62 renamed tools.misc to tools.trigger
Goffi <goffi@goffi.org>
parents: 1205
diff changeset
37 from sat.tools import trigger
749
192b804ee446 plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers
souliane <souliane@mailoo.org>
parents: 742
diff changeset
38 from time import time
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
39
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
40 # TODO: fix Prosody "addressing" plugin to leave the concerned bcc according to the spec:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
41 #
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
42 # http://xmpp.org/extensions/xep-0033.html#addr-type-bcc
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
43 # "This means that the server MUST remove these addresses before the stanza is delivered to anyone other than the given bcc addressee or the multicast service of the bcc addressee."
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
44 #
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
45 # http://xmpp.org/extensions/xep-0033.html#multicast
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
46 # "Each 'bcc' recipient MUST receive only the <address type='bcc'/> associated with that addressee."
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
47
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
48 # TODO: fix Prosody "addressing" plugin to determine itself if remote servers supports this XEP
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
49
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
50
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
51 NS_XMPP_CLIENT = "jabber:client"
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
52 NS_ADDRESS = "http://jabber.org/protocol/address"
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
53 ATTRIBUTES = ["jid", "uri", "node", "desc", "delivered", "type"]
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
54 ADDRESS_TYPES = ["to", "cc", "bcc", "replyto", "replyroom", "noreply"]
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
55
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
56 PLUGIN_INFO = {
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
57 C.PI_NAME: "Extended Stanza Addressing Protocol Plugin",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
58 C.PI_IMPORT_NAME: "XEP-0033",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
59 C.PI_TYPE: "XEP",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
60 C.PI_PROTOCOLS: ["XEP-0033"],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
61 C.PI_DEPENDENCIES: [],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
62 C.PI_MAIN: "XEP_0033",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
63 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
64 C.PI_DESCRIPTION: _("""Implementation of Extended Stanza Addressing""")
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
65 }
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
66
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
67
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
68 class XEP_0033(object):
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
69 """
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
70 Implementation for XEP 0033
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
71 """
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
72 def __init__(self, host):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 922
diff changeset
73 log.info(_("Extended Stanza Addressing plugin initialization"))
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
74 self.host = host
749
192b804ee446 plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers
souliane <souliane@mailoo.org>
parents: 742
diff changeset
75 self.internal_data = {}
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
76 host.trigger.add("sendMessage", self.sendMessageTrigger, trigger.TriggerManager.MIN_PRIORITY)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
77 host.trigger.add("MessageReceived", self.messageReceivedTrigger)
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
78
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
79 def sendMessageTrigger(self, client, mess_data, pre_xml_treatments, post_xml_treatments):
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
80 """Process the XEP-0033 related data to be sent"""
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
81 profile = client.profile
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
82
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
83 def treatment(mess_data):
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
84 if not 'address' in mess_data['extra']:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
85 return mess_data
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
86
999
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
87 def discoCallback(entities):
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
88 if not entities:
1052
e88bff4c8b77 core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents: 999
diff changeset
89 log.warning(_("XEP-0033 is being used but the server doesn't support it!"))
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
90 raise failure.Failure(exceptions.CancelError(u'Cancelled by XEP-0033'))
999
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
91 if mess_data["to"] not in entities:
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
92 expected = _(' or ').join([entity.userhost() for entity in entities])
1409
3265a2639182 massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
93 log.warning(_(u"Stanzas using XEP-0033 should be addressed to %(expected)s, not %(current)s!") % {'expected': expected, 'current': mess_data["to"]})
3265a2639182 massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
94 log.warning(_(u"TODO: addressing has been fixed by the backend... fix it in the frontend!"))
999
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
95 mess_data["to"] = list(entities)[0].userhostJID()
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
96 element = mess_data['xml'].addElement('addresses', NS_ADDRESS)
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
97 entries = [entry.split(':') for entry in mess_data['extra']['address'].split('\n') if entry != '']
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
98 for type_, jid_ in entries:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
99 element.addChild(domish.Element((None, 'address'), None, {'type': type_, 'jid': jid_}))
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
100 # when the prosody plugin is completed, we can immediately return mess_data from here
750
c8b9f675ac17 plugin XEP-0033: avoid the controlled error to explode (use return Failure(...) instead of raise)
souliane <souliane@mailoo.org>
parents: 749
diff changeset
101 self.sendAndStoreMessage(mess_data, entries, profile)
1052
e88bff4c8b77 core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents: 999
diff changeset
102 log.debug("XEP-0033 took over")
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
103 raise failure.Failure(exceptions.CancelError(u'Cancelled by XEP-0033'))
2148
a543eda2c923 core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents: 2145
diff changeset
104 d = self.host.findFeaturesSet(client, [NS_ADDRESS])
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
105 d.addCallbacks(discoCallback, lambda dummy: discoCallback(None))
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
106 return d
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
107
922
c897c8d321b3 core: sendMessageTrigger now manage pre and post treatments, which happen before or after XML generation
Goffi <goffi@goffi.org>
parents: 844
diff changeset
108 post_xml_treatments.addCallback(treatment)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
109 return True
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
110
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
111 def sendAndStoreMessage(self, mess_data, entries, profile):
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
112 """Check if target servers support XEP-0033, send and store the messages
750
c8b9f675ac17 plugin XEP-0033: avoid the controlled error to explode (use return Failure(...) instead of raise)
souliane <souliane@mailoo.org>
parents: 749
diff changeset
113 @return: a friendly failure to let the core know that we sent the message already
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
114
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
115 Later we should be able to remove this method because:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
116 # XXX: sending the messages should be done by the local server
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
117 # FIXME: for now we duplicate the messages in the history for each recipient, this should change
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
118 # FIXME: for now we duplicate the echoes to the sender, this should also change
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
119 Ideas:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
120 - fix Prosody plugin to check if target server support the feature
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
121 - redesign the database to save only one entry to the database
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
122 - change the messageNew signal to eventually pass more than one recipient
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
123 """
2148
a543eda2c923 core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents: 2145
diff changeset
124 client = self.host.getClient(profile)
1205
3e234902177a plugin XEP-0033: fixes sending the message after the changes made in rev 1052 (e88bff4c8b77)
souliane <souliane@mailoo.org>
parents: 1052
diff changeset
125 def send(mess_data, skip_send=False):
3e234902177a plugin XEP-0033: fixes sending the message after the changes made in rev 1052 (e88bff4c8b77)
souliane <souliane@mailoo.org>
parents: 1052
diff changeset
126 d = defer.Deferred()
3e234902177a plugin XEP-0033: fixes sending the message after the changes made in rev 1052 (e88bff4c8b77)
souliane <souliane@mailoo.org>
parents: 1052
diff changeset
127 if not skip_send:
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
128 d.addCallback(client.sendMessageData)
2152
6a004a22dd9e plugins XEP-0033, XEP-0280, text commands: fixed method renaming after client refactoring
Goffi <goffi@goffi.org>
parents: 2148
diff changeset
129 d.addCallback(client.messageAddToHistory)
6a004a22dd9e plugins XEP-0033, XEP-0280, text commands: fixed method renaming after client refactoring
Goffi <goffi@goffi.org>
parents: 2148
diff changeset
130 d.addCallback(client.messageSendToBridge)
1205
3e234902177a plugin XEP-0033: fixes sending the message after the changes made in rev 1052 (e88bff4c8b77)
souliane <souliane@mailoo.org>
parents: 1052
diff changeset
131 d.addErrback(lambda failure: failure.trap(exceptions.CancelError))
3e234902177a plugin XEP-0033: fixes sending the message after the changes made in rev 1052 (e88bff4c8b77)
souliane <souliane@mailoo.org>
parents: 1052
diff changeset
132 return d.callback(mess_data)
3e234902177a plugin XEP-0033: fixes sending the message after the changes made in rev 1052 (e88bff4c8b77)
souliane <souliane@mailoo.org>
parents: 1052
diff changeset
133
999
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
134 def discoCallback(entities, to_jid_s):
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
135 history_data = copy.deepcopy(mess_data)
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
136 history_data['to'] = JID(to_jid_s)
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
137 history_data['xml']['to'] = to_jid_s
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
138 if entities:
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
139 if entities not in self.internal_data[timestamp]:
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
140 sent_data = copy.deepcopy(mess_data)
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
141 sent_data['to'] = JID(JID(to_jid_s).host)
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
142 sent_data['xml']['to'] = JID(to_jid_s).host
1205
3e234902177a plugin XEP-0033: fixes sending the message after the changes made in rev 1052 (e88bff4c8b77)
souliane <souliane@mailoo.org>
parents: 1052
diff changeset
143 send(sent_data)
999
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
144 self.internal_data[timestamp].append(entities)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
145 # we still need to fill the history and signal the echo...
1205
3e234902177a plugin XEP-0033: fixes sending the message after the changes made in rev 1052 (e88bff4c8b77)
souliane <souliane@mailoo.org>
parents: 1052
diff changeset
146 send(history_data, skip_send=True)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
147 else:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
148 # target server misses the addressing feature
1205
3e234902177a plugin XEP-0033: fixes sending the message after the changes made in rev 1052 (e88bff4c8b77)
souliane <souliane@mailoo.org>
parents: 1052
diff changeset
149 send(history_data)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
150
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
151 def errback(failure, to_jid):
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
152 discoCallback(None, to_jid)
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
153
749
192b804ee446 plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers
souliane <souliane@mailoo.org>
parents: 742
diff changeset
154 timestamp = time()
192b804ee446 plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers
souliane <souliane@mailoo.org>
parents: 742
diff changeset
155 self.internal_data[timestamp] = []
192b804ee446 plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers
souliane <souliane@mailoo.org>
parents: 742
diff changeset
156 defer_list = []
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
157 for type_, jid_ in entries:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
158 d = defer.Deferred()
2148
a543eda2c923 core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents: 2145
diff changeset
159 d.addCallback(self.host.findFeaturesSet, client=client, jid_=JID(JID(jid_).host))
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
160 d.addCallbacks(discoCallback, errback, callbackArgs=[jid_], errbackArgs=[jid_])
999
c37a24922f27 plugin XEP_0033: fixes the server part and the tests
souliane <souliane@mailoo.org>
parents: 993
diff changeset
161 d.callback([NS_ADDRESS])
749
192b804ee446 plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers
souliane <souliane@mailoo.org>
parents: 742
diff changeset
162 defer_list.append(d)
192b804ee446 plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers
souliane <souliane@mailoo.org>
parents: 742
diff changeset
163 d = defer.Deferred().addCallback(lambda dummy: self.internal_data.pop(timestamp))
192b804ee446 plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers
souliane <souliane@mailoo.org>
parents: 742
diff changeset
164 defer.DeferredList(defer_list).chainDeferred(d)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
165
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
166 def messageReceivedTrigger(self, client, message, post_treat):
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
167 """In order to save the addressing information in the history"""
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
168 def post_treat_addr(data, addresses):
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
169 data['extra']['addresses'] = ""
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
170 for address in addresses:
787
dd656d745d6a test: added tests for XEP-0033
souliane <souliane@mailoo.org>
parents: 785
diff changeset
171 # Depending how message has been constructed, we could get here
dd656d745d6a test: added tests for XEP-0033
souliane <souliane@mailoo.org>
parents: 785
diff changeset
172 # some noise like "\n " instead of an address element.
dd656d745d6a test: added tests for XEP-0033
souliane <souliane@mailoo.org>
parents: 785
diff changeset
173 if isinstance(address, domish.Element):
dd656d745d6a test: added tests for XEP-0033
souliane <souliane@mailoo.org>
parents: 785
diff changeset
174 data['extra']['addresses'] += '%s:%s\n' % (address['type'], address['jid'])
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
175 return data
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
176
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
177 try:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
178 addresses = message.elements(NS_ADDRESS, 'addresses').next()
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
179 except StopIteration:
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
180 pass # no addresses
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
181 else:
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
182 post_treat.addCallback(post_treat_addr, addresses.children)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
183 return True
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
184
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
185 def getHandler(self, client):
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
186 return XEP_0033_handler(self, client.profile)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
187
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
188
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
189 class XEP_0033_handler(XMPPHandler):
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
190 implements(iwokkel.IDisco)
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
191
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
192 def __init__(self, plugin_parent, profile):
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
193 self.plugin_parent = plugin_parent
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
194 self.host = plugin_parent.host
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
195 self.profile = profile
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
196
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
197 def getDiscoInfo(self, requestor, target, nodeIdentifier=''):
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
198 return [disco.DiscoFeature(NS_ADDRESS)]
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
199
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
200 def getDiscoItems(self, requestor, target, nodeIdentifier=''):
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents:
diff changeset
201 return []