diff options
Diffstat (limited to 'vala-xmpp/src/module/stream_error.vala')
-rw-r--r-- | vala-xmpp/src/module/stream_error.vala | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/vala-xmpp/src/module/stream_error.vala b/vala-xmpp/src/module/stream_error.vala deleted file mode 100644 index 73e2bb36..00000000 --- a/vala-xmpp/src/module/stream_error.vala +++ /dev/null @@ -1,119 +0,0 @@ -using Gee; - -using Xmpp.Core; - -namespace Xmpp.StreamError { - private const string NS_URI = "jabber:client"; - private const string NS_ERROR = "urn:ietf:params:xml:ns:xmpp-streams"; - - public class Module : XmppStreamModule { - public const string ID = "stream_error_module"; - - public override void attach(XmppStream stream) { - stream.received_nonza.connect(on_received_nonstanza); - } - - public override void detach(XmppStream stream) { - stream.received_nonza.disconnect(on_received_nonstanza); - } - - public static Module? get_module(XmppStream stream) { - return (Module?) stream.get_module(NS_URI, ID); - } - - public static void require(XmppStream stream) { - if (get_module(stream) == null) stream.add_module(new StreamError.Module()); - } - - public override string get_ns() { return NS_URI; } - public override string get_id() { return ID; } - - private void on_received_nonstanza(XmppStream stream, StanzaNode node) { - if (node.name == "error" && node.ns_uri == "http://etherx.jabber.org/streams") { - stream.add_flag(generate_error_flag(node)); - } - } - - private Flag generate_error_flag(StanzaNode node) { - string? subnode_name = null; - ArrayList<StanzaNode> subnodes = node.sub_nodes; - foreach (StanzaNode subnode in subnodes) { // TODO get subnode by ns - if (subnode.ns_uri == "urn:ietf:params:xml:ns:xmpp-streams" && subnode.name != "text") { - subnode_name = subnode.name; - } - } - Flag flag = new StreamError.Flag(); - flag.error_type = subnode_name; - switch (subnode_name) { - case "bad-format": - case "conflict": - case "connection-timeout": - case "bad-namespace-prefix": - flag.reconnection_recomendation = StreamError.Flag.Reconnect.NOW; - break; - case "host-gone": - case "host-unknown": - flag.reconnection_recomendation = StreamError.Flag.Reconnect.LATER; - break; - case "improper-addressing": - case "internal-server-error": - case "invalid-from": - case "invalid-namespace": - case "invalid-xml": - case "not-authorized": - case "not-well-formed": - case "policy-violation": - case "remote-connection-failed": - case "reset": - flag.reconnection_recomendation = StreamError.Flag.Reconnect.NOW; - break; - case "resource-constraint": - flag.reconnection_recomendation = StreamError.Flag.Reconnect.LATER; - break; - case "restricted-xml": - flag.reconnection_recomendation = StreamError.Flag.Reconnect.NOW; - break; - case "see-other-host": - case "system-shutdown": - flag.reconnection_recomendation = StreamError.Flag.Reconnect.LATER; - break; - case "undefined-condition": - case "unsupported-encoding": - case "unsupported-feature": - case "unsupported-stanza-type": - case "unsupported-version": - flag.reconnection_recomendation = StreamError.Flag.Reconnect.NOW; - break; - } - - if (subnode_name == "conflict") flag.resource_rejected = true; - return flag; - } - } - - public class Flag : XmppStreamFlag { - public const string ID = "stream_error"; - - public enum Reconnect { - UNKNOWN, - NOW, - LATER, - NEVER - } - - public string? error_type; - public Reconnect reconnection_recomendation = Reconnect.UNKNOWN; - public bool resource_rejected = false; - - public static Flag? get_flag(XmppStream stream) { - return (Flag?) stream.get_flag(NS_URI, ID); - } - - public static bool has_flag(XmppStream stream) { - return get_flag(stream) != null; - } - - public override string get_ns() { return NS_URI; } - public override string get_id() { return ID; } - } -} |