plugin XEP-0033: bug fix for sending messages with the addressing feature to several servers

This commit is contained in:
souliane 2013-12-16 14:48:28 +01:00
commit d12cf069f8

View file

@ -29,10 +29,11 @@ except ImportError:
from wokkel.subprotocols import XMPPHandler
from threading import Timer
from twisted.words.xish import domish
from twisted.internet import defer
from twisted.internet import defer, threads
from sat.core.sat_main import MessageSentAndStored, AbortSendMessage
from sat.tools.misc import TriggerManager
from time import time
# TODO: fix Prosody "addressing" plugin to leave the concerned bcc according to the spec:
#
@ -69,6 +70,7 @@ class XEP_0033(object):
def __init__(self, host):
logging.info(_("Extended Stanza Addressing plugin initialization"))
self.host = host
self.internal_data = {}
host.trigger.add("sendMessage", self.sendMessageTrigger, TriggerManager.MIN_PRIORITY)
host.trigger.add("MessageReceived", self.messageReceivedTrigger)
@ -119,10 +121,9 @@ class XEP_0033(object):
new_data['to'] = JID(to_jid)
new_data['xml']['to'] = to_jid
if entity:
if 'address' in mess_data['extra']:
if entity not in self.internal_data[timestamp]:
self.host.sendAndStoreMessage(mess_data, False, profile)
# just to remember that the message has been sent
del mess_data['extra']['address']
self.internal_data[timestamp].append(entity)
# we still need to fill the history and signal the echo...
self.host.sendAndStoreMessage(new_data, True, profile)
else:
@ -132,11 +133,17 @@ class XEP_0033(object):
def errback(failure, to_jid):
discoCallback(None, to_jid)
timestamp = time()
self.internal_data[timestamp] = []
defer_list = []
for type_, jid_ in entries:
d = defer.Deferred()
d.addCallback(self.host.requestServerDisco, JID(JID(jid_).host), profile_key=profile)
d.addCallbacks(discoCallback, errback, callbackArgs=[jid_], errbackArgs=[jid_])
d.callback(NS_ADDRESS)
defer_list.append(d)
d = defer.Deferred().addCallback(lambda dummy: self.internal_data.pop(timestamp))
defer.DeferredList(defer_list).chainDeferred(d)
raise MessageSentAndStored("XEP-0033 took over")