diff options
Diffstat (limited to 'xmpp-vala/src')
-rw-r--r-- | xmpp-vala/src/module/message/module.vala | 7 | ||||
-rw-r--r-- | xmpp-vala/src/module/stanza.vala | 2 | ||||
-rw-r--r-- | xmpp-vala/src/module/stanza_error.vala | 7 |
3 files changed, 12 insertions, 4 deletions
diff --git a/xmpp-vala/src/module/message/module.vala b/xmpp-vala/src/module/message/module.vala index 5f7d40f0..2eced5c1 100644 --- a/xmpp-vala/src/module/message/module.vala +++ b/xmpp-vala/src/module/message/module.vala @@ -12,6 +12,7 @@ namespace Xmpp { public StanzaListenerHolder<MessageStanza> send_pipeline = new StanzaListenerHolder<MessageStanza>(); public signal void received_message(XmppStream stream, MessageStanza message); + public signal void received_error(XmppStream stream, MessageStanza message, ErrorStanza error); public signal void received_message_unprocessed(XmppStream stream, MessageStanza message); public async void send_message(XmppStream stream, MessageStanza message) throws IOStreamError { @@ -24,7 +25,11 @@ namespace Xmpp { received_message_unprocessed(stream, message); - if (!message.is_error()) { + if (message.is_error()) { + ErrorStanza? error_stanza = message.get_error(); + if (error_stanza == null) return; + received_error(stream, message, error_stanza); + } else { bool abort = yield received_pipeline.run(stream, message); if (abort) return; diff --git a/xmpp-vala/src/module/stanza.vala b/xmpp-vala/src/module/stanza.vala index f4e40f84..3b029197 100644 --- a/xmpp-vala/src/module/stanza.vala +++ b/xmpp-vala/src/module/stanza.vala @@ -74,7 +74,7 @@ public class Stanza : Object { } public ErrorStanza? get_error() { - return new ErrorStanza.from_stanza(this.stanza); + return ErrorStanza.from_stanza(this.stanza); } } diff --git a/xmpp-vala/src/module/stanza_error.vala b/xmpp-vala/src/module/stanza_error.vala index a5c3956c..5e872291 100644 --- a/xmpp-vala/src/module/stanza_error.vala +++ b/xmpp-vala/src/module/stanza_error.vala @@ -60,8 +60,11 @@ namespace Xmpp { public StanzaNode error_node; - public ErrorStanza.from_stanza(StanzaNode stanza) { - error_node = stanza.get_subnode("error"); + public static ErrorStanza? from_stanza(StanzaNode stanza) { + var error_stanza = new ErrorStanza(); + error_stanza.error_node = stanza.get_subnode("error"); + if (error_stanza.error_node == null) return null; + return error_stanza; } public ErrorStanza.build(string type, string condition, string? human_readable, StanzaNode? application_condition) { |