summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2015-04-13 15:08:04 +0200
committermathieui <mathieui@mathieui.net>2015-04-13 15:08:04 +0200
commitbdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9 (patch)
tree7b52ff21617caf3d7b1ef987b5853df058aec104
parentd5b1904ebb816560a7a0cecf51ac74c6fe9dd6b6 (diff)
downloadslixmpp-bdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9.tar.gz
slixmpp-bdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9.tar.bz2
slixmpp-bdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9.tar.xz
slixmpp-bdb1f66ac96ff19b236f4ad5d57df6f83cdf27e9.zip
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.
-rw-r--r--docs/event_index.rst7
-rw-r--r--slixmpp/basexmpp.py13
2 files changed, 20 insertions, 0 deletions
diff --git a/docs/event_index.rst b/docs/event_index.rst
index 3dd45ce8..07a4fbd0 100644
--- a/docs/event_index.rst
+++ b/docs/event_index.rst
@@ -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`
diff --git a/slixmpp/basexmpp.py b/slixmpp/basexmpp.py
index 8419a676..f60ba560 100644
--- a/slixmpp/basexmpp.py
+++ b/slixmpp/basexmpp.py
@@ -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)