basexmpp: Add a message_error event

The "message" event only receives messages with a body, and error
messages don’t necessarily have it. Removing the body requirement from
the "message" event could lean to unhandled conditions in existing code.
This commit is contained in:
mathieui 2015-04-13 15:08:04 +02:00
parent d5b1904ebb
commit bdb1f66ac9
No known key found for this signature in database
GPG key ID: C59F84CEEFD616E3
2 changed files with 20 additions and 0 deletions

View file

@ -152,6 +152,13 @@ Event Index
Makes the contents of message stanzas available whenever one is received. Be
sure to check the message type in order to handle error messages.
message_error
- **Data:** :py:class:`~slixmpp.Message`
- **Source:** :py:class:`BaseXMPP <slixmpp.BaseXMPP>`
Makes the contents of message stanzas available whenever one is received.
Only handler messages with an ``error`` type.
message_form
- **Data:** :py:class:`~slixmpp.plugins.xep_0004.Form`
- **Source:** :py:class:`~slixmpp.plugins.xep_0004.xep_0004`

View file

@ -143,6 +143,13 @@ class BaseXMPP(XMLStream):
MatchXPath('{%s}message/{%s}body' % (self.default_ns,
self.default_ns)),
self._handle_message))
self.register_handler(
Callback('IMError',
MatchXPath('{%s}message/{%s}error' % (self.default_ns,
self.default_ns)),
self._handle_message_error))
self.register_handler(
Callback('Presence',
MatchXPath("{%s}presence" % self.default_ns),
@ -690,6 +697,12 @@ class BaseXMPP(XMLStream):
msg['to'] = self.boundjid
self.event('message', msg)
def _handle_message_error(self, msg):
"""Process incoming message error stanzas."""
if not self.is_component and not msg['to'].bare:
msg['to'] = self.boundjid
self.event('message_error', msg)
def _handle_available(self, pres):
self.roster[pres['to']][pres['from']].handle_available(pres)