From 18321ed15ce782ff5d1f24de9f2fb459d714d125 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Tue, 31 Jan 2023 15:12:39 +0100 Subject: [PATCH] Collapse most stream releated errors into IOError --- libdino/src/service/message_processor.vala | 2 +- libdino/src/service/reactions.vala | 12 ++-- .../src/core/direct_tls_xmpp_stream.vala | 6 +- xmpp-vala/src/core/io_xmpp_stream.vala | 50 +++++--------- xmpp-vala/src/core/namespace_state.vala | 8 +-- xmpp-vala/src/core/stanza_attribute.vala | 4 +- xmpp-vala/src/core/stanza_node.vala | 2 +- xmpp-vala/src/core/stanza_reader.vala | 69 ++++++++----------- xmpp-vala/src/core/stanza_writer.vala | 13 ++-- xmpp-vala/src/core/starttls_xmpp_stream.vala | 6 +- xmpp-vala/src/core/stream_connect.vala | 6 +- xmpp-vala/src/core/xmpp_stream.vala | 24 +++---- xmpp-vala/src/module/message/module.vala | 8 +-- .../module/xep/0198_stream_management.vala | 8 +-- xmpp-vala/src/module/xep/0444_reactions.vala | 2 +- xmpp-vala/src/util.vala | 8 --- xmpp-vala/tests/stanza.vala | 2 +- 17 files changed, 95 insertions(+), 135 deletions(-) diff --git a/libdino/src/service/message_processor.vala b/libdino/src/service/message_processor.vala index 247206f3..ecac4004 100644 --- a/libdino/src/service/message_processor.vala +++ b/libdino/src/service/message_processor.vala @@ -459,7 +459,7 @@ public class MessageProcessor : StreamInteractionModule, Object { if (!conversation.type_.is_muc_semantic() && current_own_jid != null && !current_own_jid.equals(message.ourpart)) { message.ourpart = current_own_jid; } - } catch (IOStreamError e) { + } catch (IOError e) { message.marked = Entities.Message.Marked.UNSENT; if (stream != stream_interactor.get_stream(conversation.account)) { diff --git a/libdino/src/service/reactions.vala b/libdino/src/service/reactions.vala index 7cd7c146..3621dab1 100644 --- a/libdino/src/service/reactions.vala +++ b/libdino/src/service/reactions.vala @@ -37,7 +37,7 @@ public class Dino.Reactions : StreamInteractionModule, Object { try { send_reactions(conversation, content_item, reactions); reaction_added(conversation.account, content_item.id, conversation.account.bare_jid, reaction); - } catch (SendError e) {} + } catch (IOError e) {} } public void remove_reaction(Conversation conversation, ContentItem content_item, string reaction) { @@ -46,7 +46,7 @@ public class Dino.Reactions : StreamInteractionModule, Object { try { send_reactions(conversation, content_item, reactions); reaction_removed(conversation.account, content_item.id, conversation.account.bare_jid, reaction); - } catch (SendError e) {} + } catch (IOError e) {} } public Gee.List get_item_reactions(Conversation conversation, ContentItem content_item) { @@ -74,12 +74,12 @@ public class Dino.Reactions : StreamInteractionModule, Object { } } - private void send_reactions(Conversation conversation, ContentItem content_item, Gee.List reactions) throws SendError { + private void send_reactions(Conversation conversation, ContentItem content_item, Gee.List reactions) throws IOError { string? message_id = stream_interactor.get_module(ContentItemStore.IDENTITY).get_message_id_for_content_item(conversation, content_item); - if (message_id == null) throw new SendError.Misc("No message for content_item"); + if (message_id == null) throw new IOError.FAILED("No message for content_item"); XmppStream? stream = stream_interactor.get_stream(conversation.account); - if (stream == null) throw new SendError.NoStream(""); + if (stream == null) throw new IOError.NOT_CONNECTED("No stream"); var reactions_module = stream.get_module(Xmpp.Xep.Reactions.Module.IDENTITY); @@ -94,7 +94,7 @@ public class Dino.Reactions : StreamInteractionModule, Object { try { reactions_module.send_reaction.end(res); save_chat_reactions(conversation.account, conversation.account.bare_jid, content_item.id, now_millis, reactions); - } catch (SendError e) {} + } catch (IOError e) {} }); } } diff --git a/xmpp-vala/src/core/direct_tls_xmpp_stream.vala b/xmpp-vala/src/core/direct_tls_xmpp_stream.vala index aec17acd..26adc90f 100644 --- a/xmpp-vala/src/core/direct_tls_xmpp_stream.vala +++ b/xmpp-vala/src/core/direct_tls_xmpp_stream.vala @@ -13,7 +13,7 @@ public class Xmpp.DirectTlsXmppStream : TlsXmppStream { this.on_invalid_cert = on_invalid_cert; } - public override async void connect() throws IOStreamError { + public override async void connect() throws IOError { SocketClient client = new SocketClient(); try { debug("Connecting to %s:%i (tls)", host, port); @@ -29,8 +29,10 @@ public class Xmpp.DirectTlsXmppStream : TlsXmppStream { yield setup(); attach_negotation_modules(); + } catch (IOError e) { + throw e; } catch (Error e) { - throw new IOStreamError.CONNECT("Failed connecting to %s:%i (tls): %s", host, port, e.message); + throw new IOError.CONNECTION_REFUSED("Failed connecting to %s:%i (tls): %s", host, port, e.message); } } } diff --git a/xmpp-vala/src/core/io_xmpp_stream.vala b/xmpp-vala/src/core/io_xmpp_stream.vala index 02653720..208e8053 100644 --- a/xmpp-vala/src/core/io_xmpp_stream.vala +++ b/xmpp-vala/src/core/io_xmpp_stream.vala @@ -1,7 +1,7 @@ using Gee; public interface Xmpp.WriteNodeFunc : Object { - public abstract async void write_stanza(XmppStream stream, StanzaNode node) throws IOStreamError; + public abstract async void write_stanza(XmppStream stream, StanzaNode node) throws IOError; } public abstract class Xmpp.IoXmppStream : XmppStream { @@ -15,10 +15,10 @@ public abstract class Xmpp.IoXmppStream : XmppStream { base(remote_name); } - public override async void disconnect() throws IOStreamError, XmlError, IOError { + public override async void disconnect() throws IOError { disconnected = true; if (writer == null || reader == null || stream == null) { - throw new IOStreamError.DISCONNECT("trying to disconnect, but no stream open"); + throw new IOError.CLOSED("trying to disconnect, but no stream open"); } log.str("OUT", "", this); yield writer.write(""); @@ -35,16 +35,12 @@ public abstract class Xmpp.IoXmppStream : XmppStream { require_setup(); } - public override async StanzaNode read() throws IOStreamError { + public override async StanzaNode read() throws IOError { StanzaReader? reader = this.reader; - if (reader == null) throw new IOStreamError.READ("trying to read, but no stream open"); - try { - StanzaNode node = yield ((!)reader).read_node(); - log.node("IN", node, this); - return node; - } catch (XmlError e) { - throw new IOStreamError.READ(e.message); - } + if (reader == null) throw new IOError.NOT_CONNECTED("trying to read, but no stream open"); + StanzaNode node = yield ((!)reader).read_node(); + log.node("IN", node, this); + return node; } [Version (deprecated = true, deprecated_since = "0.1", replacement = "write_async")] @@ -56,18 +52,14 @@ public abstract class Xmpp.IoXmppStream : XmppStream { }); } - public override async void write_async(StanzaNode node) throws IOStreamError { + public override async void write_async(StanzaNode node) throws IOError { if (write_obj != null) { yield write_obj.write_stanza(this, node); } else { StanzaWriter? writer = this.writer; - if (writer == null) throw new IOStreamError.WRITE("trying to write, but no stream open"); - try { - log.node("OUT", node, this); - yield ((!)writer).write_node(node); - } catch (XmlError e) { - throw new IOStreamError.WRITE(e.message); - } + if (writer == null) throw new IOError.NOT_CONNECTED("trying to write, but no stream open"); + log.node("OUT", node, this); + yield ((!)writer).write_node(node); } } @@ -75,7 +67,7 @@ public abstract class Xmpp.IoXmppStream : XmppStream { return stream; } - public override async void setup() throws IOStreamError { + public override async void setup() throws IOError { StanzaNode outs = new StanzaNode.build("stream", "http://etherx.jabber.org/streams") .put_attribute("to", remote_name.to_string()) .put_attribute("version", "1.0") @@ -89,17 +81,11 @@ public abstract class Xmpp.IoXmppStream : XmppStream { setup_needed = false; } - private async StanzaNode read_root() throws IOStreamError { + private async StanzaNode read_root() throws IOError { StanzaReader? reader = this.reader; - if (reader == null) throw new IOStreamError.READ("trying to read, but no stream open"); - try { - StanzaNode node = yield ((!)reader).read_root_node(); - log.node("IN ROOT", node, this); - return node; - } catch (XmlError.TLS e) { - throw new IOStreamError.TLS(e.message); - } catch (Error e) { - throw new IOStreamError.READ(e.message); - } + if (reader == null) throw new IOError.NOT_CONNECTED("trying to read, but no stream open"); + StanzaNode node = yield ((!)reader).read_root_node(); + log.node("IN ROOT", node, this); + return node; } } \ No newline at end of file diff --git a/xmpp-vala/src/core/namespace_state.vala b/xmpp-vala/src/core/namespace_state.vala index fe83ad09..306b515e 100644 --- a/xmpp-vala/src/core/namespace_state.vala +++ b/xmpp-vala/src/core/namespace_state.vala @@ -52,18 +52,18 @@ public class NamespaceState { this.current_ns_uri = current_ns_uri; } - public string find_name(string ns_uri) throws XmlError { + public string find_name(string ns_uri) throws IOError { if (uri_to_name.has_key(ns_uri)) { return uri_to_name[ns_uri]; } - throw new XmlError.NS_DICT_ERROR(@"NS URI $ns_uri not found."); + throw new IOError.INVALID_DATA(@"XML: NS URI $ns_uri not found."); } - public string find_uri(string name) throws XmlError { + public string find_uri(string name) throws IOError { if (name_to_uri.has_key(name)) { return name_to_uri[name]; } - throw new XmlError.NS_DICT_ERROR(@"NS name $name not found."); + throw new IOError.INVALID_DATA(@"XML: NS name $name not found."); } public NamespaceState push() { diff --git a/xmpp-vala/src/core/stanza_attribute.vala b/xmpp-vala/src/core/stanza_attribute.vala index c2edeba0..6c6ac579 100644 --- a/xmpp-vala/src/core/stanza_attribute.vala +++ b/xmpp-vala/src/core/stanza_attribute.vala @@ -51,7 +51,7 @@ public class StanzaAttribute : StanzaEntry { } } - public string to_xml(NamespaceState? state_ = null) throws XmlError { + public string to_xml(NamespaceState? state_ = null) { NamespaceState state = state_ ?? new NamespaceState(); if (ns_uri == state.current_ns_uri || (ns_uri == XMLNS_URI && name == "xmlns")) { return printf(ATTRIBUTE_XML_NO_NS_FORMAT, true); @@ -60,7 +60,7 @@ public class StanzaAttribute : StanzaEntry { } } - public string to_ansi_xml(NamespaceState? state_ = null) throws XmlError { + public string to_ansi_xml(NamespaceState? state_ = null) { NamespaceState state = state_ ?? new NamespaceState(); if (ns_uri == state.current_ns_uri || (ns_uri == XMLNS_URI && name == "xmlns")) { return printf(ATTRIBUTE_XML_ANSI_NO_NS_FORMAT, true); diff --git a/xmpp-vala/src/core/stanza_node.vala b/xmpp-vala/src/core/stanza_node.vala index 6ef3f0aa..502717c8 100644 --- a/xmpp-vala/src/core/stanza_node.vala +++ b/xmpp-vala/src/core/stanza_node.vala @@ -377,7 +377,7 @@ public class StanzaNode : StanzaEntry { } } - public string to_xml(NamespaceState? state = null) throws XmlError { + public string to_xml(NamespaceState? state = null) throws IOError { NamespaceState my_state = state ?? new NamespaceState.for_stanza(); if (name == "#text") return val == null ? "" : (!)encoded_val; my_state = my_state.push(); diff --git a/xmpp-vala/src/core/stanza_reader.vala b/xmpp-vala/src/core/stanza_reader.vala index 0c07948d..17f0b7b0 100644 --- a/xmpp-vala/src/core/stanza_reader.vala +++ b/xmpp-vala/src/core/stanza_reader.vala @@ -6,15 +6,6 @@ public const string XMLNS_URI = "http://www.w3.org/2000/xmlns/"; public const string XML_URI = "http://www.w3.org/XML/1998/namespace"; public const string JABBER_URI = "jabber:client"; -public errordomain XmlError { - NS_DICT_ERROR, - UNSUPPORTED, - EOF, - BAD_XML, - IO, - TLS -} - public class StanzaReader { private static int BUFFER_MAX = 4096; @@ -44,27 +35,23 @@ public class StanzaReader { cancellable.cancel(); } - private async void update_buffer() throws XmlError { - try { - InputStream? input = this.input; - if (input == null) throw new XmlError.EOF("No input stream specified and end of buffer reached."); - if (cancellable.is_cancelled()) throw new XmlError.EOF("Input stream is canceled."); - buffer_fill = (int) yield ((!)input).read_async(buffer, GLib.Priority.DEFAULT, cancellable); - if (buffer_fill == 0) throw new XmlError.EOF("End of input stream reached."); - buffer_pos = 0; - } catch (GLib.IOError e) { - throw new XmlError.IO("GLib.IOError: %s".printf(e.message)); - } + private async void update_buffer() throws IOError { + InputStream? input = this.input; + if (input == null) throw new IOError.CLOSED("No input stream specified and end of buffer reached."); + if (cancellable.is_cancelled()) throw new IOError.CANCELLED("Input stream is canceled."); + buffer_fill = (int) yield ((!)input).read_async(buffer, GLib.Priority.DEFAULT, cancellable); + if (buffer_fill == 0) throw new IOError.CLOSED("End of input stream reached."); + buffer_pos = 0; } - private async char read_single() throws XmlError { + private async char read_single() throws IOError { if (buffer_pos >= buffer_fill) { yield update_buffer(); } return (char) buffer[buffer_pos++]; } - private async char peek_single() throws XmlError { + private async char peek_single() throws IOError { if (buffer_pos >= buffer_fill) { yield update_buffer(); } @@ -79,7 +66,7 @@ public class StanzaReader { buffer_pos++; } - private async void skip_until_non_ws() throws XmlError { + private async void skip_until_non_ws() throws IOError { if (buffer_pos >= buffer_fill) { yield update_buffer(); } @@ -91,7 +78,7 @@ public class StanzaReader { } } - private async string read_until_ws() throws XmlError { + private async string read_until_ws() throws IOError { var res = new StringBuilder(); if (buffer_pos >= buffer_fill) { yield update_buffer(); @@ -105,7 +92,7 @@ public class StanzaReader { return res.str; } - private async string read_until_char_or_ws(char x, char y = 0) throws XmlError { + private async string read_until_char_or_ws(char x, char y = 0) throws IOError { var res = new StringBuilder(); if (buffer_pos >= buffer_fill) { yield update_buffer(); @@ -119,7 +106,7 @@ public class StanzaReader { return res.str; } - private async string read_until_char(char x) throws XmlError { + private async string read_until_char(char x) throws IOError { var res = new StringBuilder(); if (buffer_pos >= buffer_fill) { yield update_buffer(); @@ -133,7 +120,7 @@ public class StanzaReader { return res.str; } - private async StanzaAttribute read_attribute() throws XmlError { + private async StanzaAttribute read_attribute() throws IOError { var res = new StanzaAttribute(); res.name = yield read_until_char_or_ws('='); if ((yield read_single()) == '=') { @@ -149,7 +136,7 @@ public class StanzaReader { return res; } - private void handle_entry_ns(StanzaEntry entry, string default_uri = ns_state.current_ns_uri) throws XmlError { + private void handle_entry_ns(StanzaEntry entry, string default_uri = ns_state.current_ns_uri) throws IOError { if (entry.ns_uri != null) return; if (entry.name.contains(":")) { var split = entry.name.split(":"); @@ -160,7 +147,7 @@ public class StanzaReader { } } - private void handle_stanza_ns(StanzaNode res) throws XmlError { + private void handle_stanza_ns(StanzaNode res) throws IOError { foreach (StanzaAttribute attr in res.attributes) { if (attr.name == "xmlns" && attr.val != null) { attr.ns_uri = XMLNS_URI; @@ -180,7 +167,7 @@ public class StanzaReader { } } - public async StanzaNode read_node_start() throws XmlError { + public async StanzaNode read_node_start() throws IOError { var res = new StanzaNode(); res.attributes = new ArrayList(); var eof = false; @@ -217,7 +204,7 @@ public class StanzaReader { return res; } - public async StanzaNode read_text_node() throws XmlError { + public async StanzaNode read_text_node() throws IOError { var res = new StanzaNode(); res.name = "#text"; res.ns_uri = ns_state.current_ns_uri; @@ -225,7 +212,7 @@ public class StanzaReader { return res; } - public async StanzaNode read_root_node() throws XmlError { + public async StanzaNode read_root_node() throws IOError { yield skip_until_non_ws(); if ((yield peek_single()) == '<') { var res = yield read_node_start(); @@ -234,11 +221,11 @@ public class StanzaReader { } return res; } else { - throw new XmlError.BAD_XML("Content before root node"); + throw new IOError.INVALID_DATA("XML: Content before root node"); } } - public async StanzaNode read_stanza_node() throws XmlError { + public async StanzaNode read_stanza_node() throws IOError { try { ns_state = ns_state.push(); var res = yield read_node_start(); @@ -255,11 +242,11 @@ public class StanzaReader { skip_single(); if (desc.contains(":")) { var split = desc.split(":"); - if (split[0] != ns_state.find_name((!)res.ns_uri)) throw new XmlError.BAD_XML(""); - if (split[1] != res.name) throw new XmlError.BAD_XML(""); + if (split[0] != ns_state.find_name((!)res.ns_uri)) throw new IOError.INVALID_DATA("XML: Closing namespace prefix mismatch"); + if (split[1] != res.name) throw new IOError.INVALID_DATA("XML: Closing element name mismatch"); } else { - if (ns_state.current_ns_uri != res.ns_uri) throw new XmlError.BAD_XML(""); - if (desc != res.name) throw new XmlError.BAD_XML(""); + if (ns_state.current_ns_uri != res.ns_uri) throw new IOError.INVALID_DATA("XML: Closing element namespace mismatch"); + if (desc != res.name) throw new IOError.INVALID_DATA("XML: Closing element name mismatch"); } finish_node_seen = true; } else { @@ -277,15 +264,15 @@ public class StanzaReader { } ns_state = ns_state.pop(); return res; - } catch (XmlError e) { + } catch (IOError.INVALID_DATA e) { uint8[] buffer_cpy = new uint8[buffer.length + 1]; Memory.copy(buffer_cpy, buffer, buffer.length); - warning("XmlError at: %s".printf((string)buffer_cpy) + "\n"); + warning("invalid data at: %s".printf((string)buffer_cpy) + "\n"); throw e; } } - public async StanzaNode read_node() throws XmlError { + public async StanzaNode read_node() throws IOError { yield skip_until_non_ws(); if ((yield peek_single()) == '<') { return yield read_stanza_node(); diff --git a/xmpp-vala/src/core/stanza_writer.vala b/xmpp-vala/src/core/stanza_writer.vala index 62fe022a..5b926a93 100644 --- a/xmpp-vala/src/core/stanza_writer.vala +++ b/xmpp-vala/src/core/stanza_writer.vala @@ -12,11 +12,11 @@ public class StanzaWriter { this.output = output; } - public async void write_node(StanzaNode node) throws XmlError { + public async void write_node(StanzaNode node) throws IOError { yield write_data(node.to_xml().data); } - public async void write_nodes(StanzaNode node1, StanzaNode node2) throws XmlError { + public async void write_nodes(StanzaNode node1, StanzaNode node2) throws IOError { var data1 = node1.to_xml().data; var data2 = node2.to_xml().data; @@ -32,11 +32,11 @@ public class StanzaWriter { yield write_data(concat); } - public async void write(string s) throws XmlError { + public async void write(string s) throws IOError { yield write_data(s.data); } - private async void write_data(owned uint8[] data) throws XmlError { + private async void write_data(owned uint8[] data) throws IOError { if (running) { queue.push_tail(new SourceFuncWrapper(write_data.callback)); yield; @@ -44,9 +44,12 @@ public class StanzaWriter { running = true; try { yield output.write_all_async(data, 0, null, null); + } catch (IOError e) { + cancel(); + throw e; } catch (GLib.Error e) { cancel(); - throw new XmlError.IO(@"IOError in GLib: $(e.message)"); + throw new IOError.FAILED("Error in GLib: %s".printf(e.message)); } finally { SourceFuncWrapper? sfw = queue.pop_head(); if (sfw != null) { diff --git a/xmpp-vala/src/core/starttls_xmpp_stream.vala b/xmpp-vala/src/core/starttls_xmpp_stream.vala index 2334f664..0d4fbc7d 100644 --- a/xmpp-vala/src/core/starttls_xmpp_stream.vala +++ b/xmpp-vala/src/core/starttls_xmpp_stream.vala @@ -13,7 +13,7 @@ public class Xmpp.StartTlsXmppStream : TlsXmppStream { this.on_invalid_cert = on_invalid_cert; } - public override async void connect() throws IOStreamError { + public override async void connect() throws IOError { try { SocketClient client = new SocketClient(); debug("Connecting to %s:%i (starttls)", host, port); @@ -50,8 +50,10 @@ public class Xmpp.StartTlsXmppStream : TlsXmppStream { yield setup(); attach_negotation_modules(); + } catch (IOError e) { + throw e; } catch (Error e) { - throw new IOStreamError.CONNECT("Failed connecting to %s:%i (starttls): %s", host, port, e.message); + throw new IOError.CONNECTION_REFUSED("Failed connecting to %s:%i (starttls): %s", host, port, e.message); } } } diff --git a/xmpp-vala/src/core/stream_connect.vala b/xmpp-vala/src/core/stream_connect.vala index 833c5131..a4c5b82e 100644 --- a/xmpp-vala/src/core/stream_connect.vala +++ b/xmpp-vala/src/core/stream_connect.vala @@ -10,7 +10,7 @@ namespace Xmpp { public class XmppStreamResult { public TlsXmppStream? stream { get; set; } public TlsCertificateFlags? tls_errors { get; set; } - public IOStreamError? io_error { get; set; } + public IOError? io_error { get; set; } } public async XmppStreamResult establish_stream(Jid bare_jid, Gee.List modules, string? log_options, owned TlsXmppStream.OnInvalidCert on_invalid_cert) { @@ -55,7 +55,7 @@ namespace Xmpp { // Try all connection options from lowest to highest priority TlsXmppStream? stream = null; TlsCertificateFlags? tls_errors = null; - IOStreamError? io_error = null; + IOError? io_error = null; foreach (SrvTargetInfo target in targets) { try { if (target.service == "xmpp-client") { @@ -72,7 +72,7 @@ namespace Xmpp { yield stream.connect(); return new XmppStreamResult() { stream=stream }; - } catch (IOStreamError e) { + } catch (IOError e) { warning("Could not establish XMPP session with %s:%i: %s", target.host, target.port, e.message); if (stream != null) { diff --git a/xmpp-vala/src/core/xmpp_stream.vala b/xmpp-vala/src/core/xmpp_stream.vala index 0f0793e9..6370554f 100644 --- a/xmpp-vala/src/core/xmpp_stream.vala +++ b/xmpp-vala/src/core/xmpp_stream.vala @@ -1,13 +1,5 @@ using Gee; -public errordomain Xmpp.IOStreamError { - READ, - WRITE, - CONNECT, - DISCONNECT, - TLS -} - public abstract class Xmpp.XmppStream { public signal void received_node(XmppStream stream, StanzaNode node); @@ -38,18 +30,18 @@ public abstract class Xmpp.XmppStream { this.remote_name = remote_name; } - public abstract async void connect() throws IOStreamError; + public abstract async void connect() throws IOError; - public abstract async void disconnect() throws IOStreamError, XmlError, IOError; + public abstract async void disconnect() throws IOError; - public abstract async StanzaNode read() throws IOStreamError; + public abstract async StanzaNode read() throws IOError; [Version (deprecated = true, deprecated_since = "0.1", replacement = "write_async")] public abstract void write(StanzaNode node); - public abstract async void write_async(StanzaNode node) throws IOStreamError; + public abstract async void write_async(StanzaNode node) throws IOError; - public abstract async void setup() throws IOStreamError; + public abstract async void setup() throws IOError; public void require_setup() { setup_needed = true; @@ -105,7 +97,7 @@ public abstract class Xmpp.XmppStream { return null; } - public async void loop() throws IOStreamError { + public async void loop() throws IOError { while (true) { if (setup_needed) { yield setup(); @@ -168,7 +160,7 @@ public abstract class Xmpp.XmppStream { return false; } - private bool negotiation_modules_done() throws IOStreamError { + private bool negotiation_modules_done() throws IOError { if (setup_needed) return false; if (is_negotiation_active()) return false; @@ -176,7 +168,7 @@ public abstract class Xmpp.XmppStream { if (module is XmppStreamNegotiationModule) { XmppStreamNegotiationModule negotiation_module = (XmppStreamNegotiationModule) module; if (negotiation_module.mandatory_outstanding(this)) { - throw new IOStreamError.CONNECT("mandatory-to-negotiate feature not negotiated: " + negotiation_module.get_id()); + throw new IOError.FAILED("mandatory-to-negotiate feature not negotiated: " + negotiation_module.get_id()); } } } diff --git a/xmpp-vala/src/module/message/module.vala b/xmpp-vala/src/module/message/module.vala index ef39a663..bb63bca4 100644 --- a/xmpp-vala/src/module/message/module.vala +++ b/xmpp-vala/src/module/message/module.vala @@ -15,13 +15,9 @@ namespace Xmpp { 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 { + public async void send_message(XmppStream stream, MessageStanza message) throws IOError { yield send_pipeline.run(stream, message); - try { - yield stream.write_async(message.stanza); - } catch (IOStreamError e) { - throw new SendError.IO(e.message); - } + yield stream.write_async(message.stanza); } public async void received_message_stanza_async(XmppStream stream, StanzaNode node) { diff --git a/xmpp-vala/src/module/xep/0198_stream_management.vala b/xmpp-vala/src/module/xep/0198_stream_management.vala index 5ce208f1..340c4e6f 100644 --- a/xmpp-vala/src/module/xep/0198_stream_management.vala +++ b/xmpp-vala/src/module/xep/0198_stream_management.vala @@ -25,7 +25,7 @@ public class Module : XmppStreamNegotiationModule, WriteNodeFunc { } } - public async void write_stanza(XmppStream stream, StanzaNode node) throws IOStreamError { + public async void write_stanza(XmppStream stream, StanzaNode node) throws IOError { var promise = new Promise(); node_queue.add(new QueueItem(node, promise)); @@ -34,7 +34,7 @@ public class Module : XmppStreamNegotiationModule, WriteNodeFunc { try { yield promise.future.wait_async(); } catch (FutureError e) { - throw new IOStreamError.WRITE("Future returned error %i".printf(e.code)); + throw new IOError.FAILED("Future returned error %i".printf(e.code)); } } @@ -50,7 +50,7 @@ public class Module : XmppStreamNegotiationModule, WriteNodeFunc { } else { yield ((!)writer).write_node(node); } - } catch (XmlError e) { } + } catch (IOError e) { } } private void check_queue(XmppStream stream) { @@ -158,7 +158,7 @@ public class Module : XmppStreamNegotiationModule, WriteNodeFunc { handle_incoming_h(stream, h_outbound); } foreach (var id in in_flight_stanzas.keys) { - in_flight_stanzas[id].promise.set_exception(new IOStreamError.WRITE("Stanza not acked and session not resumed")); + in_flight_stanzas[id].promise.set_exception(new IOError.FAILED("Stanza not acked and session not resumed")); } in_flight_stanzas.clear(); check_queue(stream); diff --git a/xmpp-vala/src/module/xep/0444_reactions.vala b/xmpp-vala/src/module/xep/0444_reactions.vala index 6e76f1f0..877d3070 100644 --- a/xmpp-vala/src/module/xep/0444_reactions.vala +++ b/xmpp-vala/src/module/xep/0444_reactions.vala @@ -11,7 +11,7 @@ public class Module : XmppStreamModule { private ReceivedPipelineListener received_pipeline_listener = new ReceivedPipelineListener(); - public async void send_reaction(XmppStream stream, Jid jid, string stanza_type, string message_id, Gee.List reactions) throws SendError { + public async void send_reaction(XmppStream stream, Jid jid, string stanza_type, string message_id, Gee.List reactions) throws IOError { StanzaNode reactions_node = new StanzaNode.build("reactions", NS_URI).add_self_xmlns(); reactions_node.put_attribute("id", message_id); foreach (string reaction in reactions) { diff --git a/xmpp-vala/src/util.vala b/xmpp-vala/src/util.vala index fda21f88..6c0d0c9b 100644 --- a/xmpp-vala/src/util.vala +++ b/xmpp-vala/src/util.vala @@ -38,11 +38,3 @@ public long from_hex(string numeral) { } } - -namespace Xmpp { - public errordomain SendError { - IO, - NoStream, - Misc - } -} diff --git a/xmpp-vala/tests/stanza.vala b/xmpp-vala/tests/stanza.vala index b1fce46d..cd374912 100644 --- a/xmpp-vala/tests/stanza.vala +++ b/xmpp-vala/tests/stanza.vala @@ -65,7 +65,7 @@ class StanzaTest : Gee.TestCase { try { yield reader.read_node(); fail_if_reached("end of stream should be reached"); - } catch (XmlError.EOF e) { + } catch (IOError.CLOSED e) { return; } catch (Error e) { fail_if_reached("Unexpected error");