Correctly set stanza-id for received MAM messages
The gaol why we need to determine what ID should be used as stanza-id, is so we can use the stanza-id in the future for deduplication. Case we are the sender: Either we look for a origin-id element, which we will include in the Future in all messages we send, or until then the ID we set on the message as attr. Case we are the receiver: If our server supports mam:2 we take the ID of the result element, because mam:2 injects the archive ID live into every message we receive. If we dont have mam:2 we fall back to the ID of the message attr.
This commit is contained in:
parent
3a4a97dbf8
commit
7f0bcbb5bf
1 changed files with 27 additions and 19 deletions
|
@ -1069,10 +1069,34 @@ class MamMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
self.msgtxt = self.msg_.getTagData('body')
|
self.msgtxt = self.msg_.getTagData('body')
|
||||||
self.stanza_id = self.msg_.getID()
|
|
||||||
self.mam_id = self.result.getID()
|
|
||||||
self.query_id = self.result.getAttr('queryid')
|
self.query_id = self.result.getAttr('queryid')
|
||||||
|
|
||||||
|
frm = self.msg_.getFrom()
|
||||||
|
to = self.msg_.getTo()
|
||||||
|
|
||||||
|
if frm.bareMatch(own_jid):
|
||||||
|
self.stanza_id = self.msg_.getTag('origin-id',
|
||||||
|
namespace=nbxmpp.NS_SID)
|
||||||
|
if not self.stanza_id:
|
||||||
|
self.stanza_id = self.msg_.getID()
|
||||||
|
|
||||||
|
self.with_ = str(to)
|
||||||
|
self.direction = 'to'
|
||||||
|
self.resource = to.getResource()
|
||||||
|
else:
|
||||||
|
if self.result.getNamespace() == nbxmpp.NS_MAM_2:
|
||||||
|
self.stanza_id = self.result.getID()
|
||||||
|
else:
|
||||||
|
self.stanza_id = self.msg_.getID()
|
||||||
|
|
||||||
|
self.with_ = str(frm)
|
||||||
|
self.direction = 'from'
|
||||||
|
self.resource = frm.getResource()
|
||||||
|
|
||||||
|
if not self.stanza_id:
|
||||||
|
log.error('Could not retrieve stanza-id')
|
||||||
|
return False
|
||||||
|
|
||||||
# Use timestamp provided by archive,
|
# Use timestamp provided by archive,
|
||||||
# Fallback: Use timestamp provided by user and issue a warning
|
# Fallback: Use timestamp provided by user and issue a warning
|
||||||
delay = self.forwarded.getTag('delay', namespace=nbxmpp.NS_DELAY2)
|
delay = self.forwarded.getTag('delay', namespace=nbxmpp.NS_DELAY2)
|
||||||
|
@ -1085,23 +1109,7 @@ class MamMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
|
|
||||||
self.timestamp = helpers.parse_delay(delay)
|
self.timestamp = helpers.parse_delay(delay)
|
||||||
|
|
||||||
frm = self.msg_.getFrom()
|
log.debug('Received mam-message: stanza id: %s', self.stanza_id)
|
||||||
to = self.msg_.getTo()
|
|
||||||
|
|
||||||
if not to or to.bareMatch(own_jid):
|
|
||||||
self.with_ = str(frm)
|
|
||||||
self.direction = 'from'
|
|
||||||
self.resource = frm.getResource()
|
|
||||||
else:
|
|
||||||
self.with_ = str(to)
|
|
||||||
self.direction = 'to'
|
|
||||||
self.resource = to.getResource()
|
|
||||||
|
|
||||||
log_message = \
|
|
||||||
'received: mam-message: ' \
|
|
||||||
'stanza id: {:15} - mam id: {:15} - query id: {}'.format(
|
|
||||||
self.stanza_id, self.mam_id, self.query_id)
|
|
||||||
log.debug(log_message)
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class MamDecryptedMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
class MamDecryptedMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
|
||||||
|
|
Loading…
Add table
Reference in a new issue