[Telepathy-commits] [telepathy-gabble/master] rename gabble-error.c to error.c

Dafydd Harries dafydd.harries at collabora.co.uk
Tue Aug 19 10:53:17 PDT 2008


20080714115832-c9803-6977c5b97dc072f856d7b4b67f1f14852a888761.gz
---
 src/Makefile.am    |    2 +-
 src/error.c        |  478 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/gabble-error.c |  478 ----------------------------------------------------
 3 files changed, 479 insertions(+), 479 deletions(-)
 create mode 100644 src/error.c
 delete mode 100644 src/gabble-error.c

diff --git a/src/Makefile.am b/src/Makefile.am
index a80b7ae..25133ae 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -47,7 +47,7 @@ libgabble_convenience_la_our_sources = \
     disco.c \
     gabble.c \
     gabble.h \
-    gabble-error.c \
+    error.c \
     error.h \
     connection-manager.h \
     connection-manager.c \
diff --git a/src/error.c b/src/error.c
new file mode 100644
index 0000000..cc89e50
--- /dev/null
+++ b/src/error.c
@@ -0,0 +1,478 @@
+/*
+ * gabble-error.c - Source for Gabble's error handling API
+ * Copyright (C) 2006-2007 Collabora Ltd.
+ * Copyright (C) 2006 Nokia Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "error.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "namespaces.h"
+#include "util.h"
+
+#define MAX_LEGACY_ERRORS 3
+
+typedef struct {
+    const gchar *name;
+    const gchar *description;
+    const gchar *type;
+    guint specialises;
+    const gchar *namespace;
+    const guint16 legacy_errors[MAX_LEGACY_ERRORS];
+} XmppErrorSpec;
+
+static const XmppErrorSpec xmpp_errors[NUM_XMPP_ERRORS] =
+{
+    {
+      "undefined-condition",
+      "application-specific condition",
+      NULL,
+      0,
+      NS_XMPP_STANZAS,
+      { 500, 0, },
+    },
+
+    {
+      "redirect",
+      "the recipient or server is redirecting requests for this information "
+      "to another entity",
+      "modify",
+      0,
+      NS_XMPP_STANZAS,
+      { 302, 0, },
+    },
+
+    {
+      "gone",
+      "the recipient or server can no longer be contacted at this address",
+      "modify",
+      0,
+      NS_XMPP_STANZAS,
+      { 302, 0, },
+    },
+
+    {
+      "bad-request",
+      "the sender has sent XML that is malformed or that cannot be processed",
+      "modify",
+      0,
+      NS_XMPP_STANZAS,
+      { 400, 0, },
+    },
+    {
+      "unexpected-request",
+      "the recipient or server understood the request but was not expecting "
+      "it at this time",
+      "wait",
+      0,
+      NS_XMPP_STANZAS,
+      { 400, 0, },
+    },
+    {
+      "jid-malformed",
+      "the sending entity has provided or communicated an XMPP address or "
+      "aspect thereof (e.g., a resource identifier) that does not adhere "
+      "to the syntax defined in Addressing Scheme (Section 3)",
+      "modify",
+      0,
+      NS_XMPP_STANZAS,
+      { 400, 0, },
+    },
+
+    {
+      "not-authorized",
+      "the sender must provide proper credentials before being allowed to "
+      "perform the action, or has provided improper credentials",
+      "auth",
+      0,
+      NS_XMPP_STANZAS,
+      { 401, 0, },
+    },
+
+    {
+      "payment-required",
+      "the requesting entity is not authorized to access the requested "
+      "service because payment is required",
+      "auth",
+      0,
+      NS_XMPP_STANZAS,
+      { 402, 0, },
+    },
+
+    {
+      "forbidden",
+      "the requesting entity does not possess the required permissions to "
+      "perform the action",
+      "auth",
+      0,
+      NS_XMPP_STANZAS,
+      { 403, 0, },
+    },
+
+    {
+      "item-not-found",
+      "the addressed JID or item requested cannot be found",
+      "cancel",
+      0,
+      NS_XMPP_STANZAS,
+      { 404, 0, },
+    },
+    {
+      "recipient-unavailable",
+      "the intended recipient is temporarily unavailable",
+      "wait",
+      0,
+      NS_XMPP_STANZAS,
+      { 404, 0, },
+    },
+    {
+      "remote-server-not-found",
+      "a remote server or service specified as part or all of the JID of the "
+      "intended recipient (or required to fulfill a request) could not be "
+      "contacted within a reasonable amount of time",
+      "cancel",
+      0,
+      NS_XMPP_STANZAS,
+      { 404, 0, },
+    },
+
+    {
+      "not-allowed",
+      "the recipient or server does not allow any entity to perform the action",
+      "cancel",
+      0,
+      NS_XMPP_STANZAS,
+      { 405, 0, },
+    },
+
+    {
+      "not-acceptable",
+      "the recipient or server understands the request but is refusing to "
+      "process it because it does not meet criteria defined by the recipient "
+      "or server (e.g., a local policy regarding acceptable words in messages)",
+      "modify",
+      0,
+      NS_XMPP_STANZAS,
+      { 406, 0, },
+    },
+
+    {
+      "registration-required",
+      "the requesting entity is not authorized to access the requested service "
+      "because registration is required",
+      "auth",
+      0,
+      NS_XMPP_STANZAS,
+      { 407, 0, },
+    },
+    {
+      "subscription-required",
+      "the requesting entity is not authorized to access the requested service "
+      "because a subscription is required",
+      "auth",
+      0,
+      NS_XMPP_STANZAS,
+      { 407, 0, },
+    },
+
+    {
+      "remote-server-timeout",
+      "a remote server or service specified as part or all of the JID of the "
+      "intended recipient (or required to fulfill a request) could not be "
+      "contacted within a reasonable amount of time",
+      "wait",
+      0,
+      NS_XMPP_STANZAS,
+      { 408, 504, 0, },
+    },
+
+    {
+      "conflict",
+      "access cannot be granted because an existing resource or session exists "
+      "with the same name or address",
+      "cancel",
+      0,
+      NS_XMPP_STANZAS,
+      { 409, 0, },
+    },
+
+    {
+      "internal-server-error",
+      "the server could not process the stanza because of a misconfiguration "
+      "or an otherwise-undefined internal server error",
+      "wait",
+      0,
+      NS_XMPP_STANZAS,
+      { 500, 0, },
+    },
+    {
+      "resource-constraint",
+      "the server or recipient lacks the system resources necessary to service "
+      "the request",
+      "wait",
+      0,
+      NS_XMPP_STANZAS,
+      { 500, 0, },
+    },
+
+    {
+      "feature-not-implemented",
+      "the feature requested is not implemented by the recipient or server and "
+      "therefore cannot be processed",
+      "cancel",
+      0,
+      NS_XMPP_STANZAS,
+      { 501, 0, },
+    },
+
+    {
+      "service-unavailable",
+      "the server or recipient does not currently provide the requested "
+      "service",
+      "cancel",
+      0,
+      NS_XMPP_STANZAS,
+      { 502, 503, 510, },
+    },
+
+    {
+      "out-of-order",
+      "the request cannot occur at this point in the state machine",
+      "cancel",
+      XMPP_ERROR_UNEXPECTED_REQUEST,
+      NS_JINGLE_ERRORS,
+      { 0, },
+    },
+
+    {
+      "unknown-session",
+      "the 'sid' attribute specifies a session that is unknown to the "
+      "recipient",
+      "cancel",
+      XMPP_ERROR_BAD_REQUEST,
+      NS_JINGLE_ERRORS,
+      { 0, },
+    },
+
+    {
+      "unsupported-transports",
+      "the recipient does not support any of the desired content transport "
+      "methods",
+      "cancel",
+      XMPP_ERROR_FEATURE_NOT_IMPLEMENTED,
+      NS_JINGLE_ERRORS,
+      { 0, },
+    },
+
+    {
+      "unsupported-content",
+      "the recipient does not support any of the desired content description"
+      "formats",
+      "cancel",
+      XMPP_ERROR_FEATURE_NOT_IMPLEMENTED,
+      NS_JINGLE_ERRORS,
+      { 0, },
+    },
+
+    {
+      "no-valid-streams",
+      "None of the available streams are acceptable.",
+      "cancel",
+      XMPP_ERROR_BAD_REQUEST,
+      NS_SI,
+      { 400, 0 },
+    },
+
+    {
+      "bad-profile",
+      "The profile is not understood or invalid.",
+      "modify",
+      XMPP_ERROR_BAD_REQUEST,
+      NS_SI,
+      { 400, 0 },
+    },
+};
+
+GQuark
+gabble_xmpp_error_quark (void)
+{
+  static GQuark quark = 0;
+  if (!quark)
+    quark = g_quark_from_static_string ("gabble-xmpp-error");
+  return quark;
+}
+
+GabbleXmppError
+gabble_xmpp_error_from_node (LmMessageNode *error_node)
+{
+  gint i, j;
+  const gchar *error_code_str;
+
+  g_return_val_if_fail (error_node != NULL, XMPP_ERROR_UNDEFINED_CONDITION);
+
+  /* First, try to look it up the modern way */
+  if (error_node->children)
+    {
+      /* we loop backwards because the most specific errors are the larger
+       * numbers; the >= 0 test is OK because i is signed */
+      for (i = NUM_XMPP_ERRORS - 1; i >= 0; i--)
+        {
+          if (lm_message_node_get_child_with_namespace (error_node,
+                xmpp_errors[i].name, xmpp_errors[i].namespace))
+            {
+              return i;
+            }
+        }
+    }
+
+  /* Ok, do it the legacy way */
+  error_code_str = lm_message_node_get_attribute (error_node, "code");
+  if (error_code_str)
+    {
+      gint error_code;
+
+      error_code = atoi (error_code_str);
+
+      /* skip UNDEFINED_CONDITION, we want code 500 to be translated
+       * to INTERNAL_SERVER_ERROR */
+      for (i = 1; i < NUM_XMPP_ERRORS; i++)
+        {
+          const XmppErrorSpec *spec = &xmpp_errors[i];
+
+          for (j = 0; j < MAX_LEGACY_ERRORS; j++)
+            {
+              gint cur_code = spec->legacy_errors[j];
+              if (cur_code == 0)
+                break;
+
+              if (cur_code == error_code)
+                return i;
+            }
+        }
+    }
+
+  return XMPP_ERROR_UNDEFINED_CONDITION;
+}
+
+static GError *
+gabble_xmpp_error_to_g_error (GabbleXmppError error)
+{
+  if (error >= NUM_XMPP_ERRORS)
+      return g_error_new (GABBLE_XMPP_ERROR, XMPP_ERROR_UNDEFINED_CONDITION,
+          "Unknown or invalid XMPP error");
+
+  return g_error_new (GABBLE_XMPP_ERROR,
+                      error,
+                      xmpp_errors[error].description);
+}
+
+/*
+ * See RFC 3920: 4.7 Stream Errors, 9.3 Stanza Errors.
+ */
+LmMessageNode *
+gabble_xmpp_error_to_node (GabbleXmppError error,
+                           LmMessageNode *parent_node,
+                           const gchar *errmsg)
+{
+  const XmppErrorSpec *spec, *extra;
+  LmMessageNode *error_node, *node;
+  gchar str[6];
+
+  g_return_val_if_fail (error != XMPP_ERROR_UNDEFINED_CONDITION &&
+      error < NUM_XMPP_ERRORS, NULL);
+
+  if (xmpp_errors[error].specialises)
+    {
+      extra = &xmpp_errors[error];
+      spec = &xmpp_errors[extra->specialises];
+    }
+  else
+    {
+      extra = NULL;
+      spec = &xmpp_errors[error];
+    }
+
+  error_node = lm_message_node_add_child (parent_node, "error", NULL);
+
+  sprintf (str, "%d", spec->legacy_errors[0]);
+  lm_message_node_set_attribute (error_node, "code", str);
+
+  if (spec->type)
+    {
+      lm_message_node_set_attribute (error_node, "type", spec->type);
+    }
+
+  node = lm_message_node_add_child (error_node, spec->name, NULL);
+  lm_message_node_set_attribute (node, "xmlns", NS_XMPP_STANZAS);
+
+  if (extra != NULL)
+    {
+      node = lm_message_node_add_child (error_node, extra->name, NULL);
+      lm_message_node_set_attribute (node, "xmlns", extra->namespace);
+    }
+
+  if (NULL != errmsg)
+    lm_message_node_add_child (error_node, "text", errmsg);
+
+  return error_node;
+}
+
+const gchar *
+gabble_xmpp_error_string (GabbleXmppError error)
+{
+  if (error < NUM_XMPP_ERRORS)
+    return xmpp_errors[error].name;
+  else
+    return NULL;
+}
+
+const gchar *
+gabble_xmpp_error_description (GabbleXmppError error)
+{
+  if (error < NUM_XMPP_ERRORS)
+    return xmpp_errors[error].description;
+  else
+    return NULL;
+}
+
+GError *
+gabble_message_get_xmpp_error (LmMessage *msg)
+{
+  g_return_val_if_fail (msg != NULL, NULL);
+
+  if (lm_message_get_sub_type (msg) == LM_MESSAGE_SUB_TYPE_ERROR)
+    {
+      LmMessageNode *error_node = lm_message_node_get_child (msg->node,
+          "error");
+
+      if (error_node != NULL)
+        {
+          return gabble_xmpp_error_to_g_error
+              (gabble_xmpp_error_from_node (error_node));
+        }
+      else
+        {
+          return g_error_new (GABBLE_XMPP_ERROR,
+              XMPP_ERROR_UNDEFINED_CONDITION, "Unknown or invalid XMPP error");
+        }
+    }
+
+  /* no error */
+  return NULL;
+}
diff --git a/src/gabble-error.c b/src/gabble-error.c
deleted file mode 100644
index cc89e50..0000000
--- a/src/gabble-error.c
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * gabble-error.c - Source for Gabble's error handling API
- * Copyright (C) 2006-2007 Collabora Ltd.
- * Copyright (C) 2006 Nokia Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include "error.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "namespaces.h"
-#include "util.h"
-
-#define MAX_LEGACY_ERRORS 3
-
-typedef struct {
-    const gchar *name;
-    const gchar *description;
-    const gchar *type;
-    guint specialises;
-    const gchar *namespace;
-    const guint16 legacy_errors[MAX_LEGACY_ERRORS];
-} XmppErrorSpec;
-
-static const XmppErrorSpec xmpp_errors[NUM_XMPP_ERRORS] =
-{
-    {
-      "undefined-condition",
-      "application-specific condition",
-      NULL,
-      0,
-      NS_XMPP_STANZAS,
-      { 500, 0, },
-    },
-
-    {
-      "redirect",
-      "the recipient or server is redirecting requests for this information "
-      "to another entity",
-      "modify",
-      0,
-      NS_XMPP_STANZAS,
-      { 302, 0, },
-    },
-
-    {
-      "gone",
-      "the recipient or server can no longer be contacted at this address",
-      "modify",
-      0,
-      NS_XMPP_STANZAS,
-      { 302, 0, },
-    },
-
-    {
-      "bad-request",
-      "the sender has sent XML that is malformed or that cannot be processed",
-      "modify",
-      0,
-      NS_XMPP_STANZAS,
-      { 400, 0, },
-    },
-    {
-      "unexpected-request",
-      "the recipient or server understood the request but was not expecting "
-      "it at this time",
-      "wait",
-      0,
-      NS_XMPP_STANZAS,
-      { 400, 0, },
-    },
-    {
-      "jid-malformed",
-      "the sending entity has provided or communicated an XMPP address or "
-      "aspect thereof (e.g., a resource identifier) that does not adhere "
-      "to the syntax defined in Addressing Scheme (Section 3)",
-      "modify",
-      0,
-      NS_XMPP_STANZAS,
-      { 400, 0, },
-    },
-
-    {
-      "not-authorized",
-      "the sender must provide proper credentials before being allowed to "
-      "perform the action, or has provided improper credentials",
-      "auth",
-      0,
-      NS_XMPP_STANZAS,
-      { 401, 0, },
-    },
-
-    {
-      "payment-required",
-      "the requesting entity is not authorized to access the requested "
-      "service because payment is required",
-      "auth",
-      0,
-      NS_XMPP_STANZAS,
-      { 402, 0, },
-    },
-
-    {
-      "forbidden",
-      "the requesting entity does not possess the required permissions to "
-      "perform the action",
-      "auth",
-      0,
-      NS_XMPP_STANZAS,
-      { 403, 0, },
-    },
-
-    {
-      "item-not-found",
-      "the addressed JID or item requested cannot be found",
-      "cancel",
-      0,
-      NS_XMPP_STANZAS,
-      { 404, 0, },
-    },
-    {
-      "recipient-unavailable",
-      "the intended recipient is temporarily unavailable",
-      "wait",
-      0,
-      NS_XMPP_STANZAS,
-      { 404, 0, },
-    },
-    {
-      "remote-server-not-found",
-      "a remote server or service specified as part or all of the JID of the "
-      "intended recipient (or required to fulfill a request) could not be "
-      "contacted within a reasonable amount of time",
-      "cancel",
-      0,
-      NS_XMPP_STANZAS,
-      { 404, 0, },
-    },
-
-    {
-      "not-allowed",
-      "the recipient or server does not allow any entity to perform the action",
-      "cancel",
-      0,
-      NS_XMPP_STANZAS,
-      { 405, 0, },
-    },
-
-    {
-      "not-acceptable",
-      "the recipient or server understands the request but is refusing to "
-      "process it because it does not meet criteria defined by the recipient "
-      "or server (e.g., a local policy regarding acceptable words in messages)",
-      "modify",
-      0,
-      NS_XMPP_STANZAS,
-      { 406, 0, },
-    },
-
-    {
-      "registration-required",
-      "the requesting entity is not authorized to access the requested service "
-      "because registration is required",
-      "auth",
-      0,
-      NS_XMPP_STANZAS,
-      { 407, 0, },
-    },
-    {
-      "subscription-required",
-      "the requesting entity is not authorized to access the requested service "
-      "because a subscription is required",
-      "auth",
-      0,
-      NS_XMPP_STANZAS,
-      { 407, 0, },
-    },
-
-    {
-      "remote-server-timeout",
-      "a remote server or service specified as part or all of the JID of the "
-      "intended recipient (or required to fulfill a request) could not be "
-      "contacted within a reasonable amount of time",
-      "wait",
-      0,
-      NS_XMPP_STANZAS,
-      { 408, 504, 0, },
-    },
-
-    {
-      "conflict",
-      "access cannot be granted because an existing resource or session exists "
-      "with the same name or address",
-      "cancel",
-      0,
-      NS_XMPP_STANZAS,
-      { 409, 0, },
-    },
-
-    {
-      "internal-server-error",
-      "the server could not process the stanza because of a misconfiguration "
-      "or an otherwise-undefined internal server error",
-      "wait",
-      0,
-      NS_XMPP_STANZAS,
-      { 500, 0, },
-    },
-    {
-      "resource-constraint",
-      "the server or recipient lacks the system resources necessary to service "
-      "the request",
-      "wait",
-      0,
-      NS_XMPP_STANZAS,
-      { 500, 0, },
-    },
-
-    {
-      "feature-not-implemented",
-      "the feature requested is not implemented by the recipient or server and "
-      "therefore cannot be processed",
-      "cancel",
-      0,
-      NS_XMPP_STANZAS,
-      { 501, 0, },
-    },
-
-    {
-      "service-unavailable",
-      "the server or recipient does not currently provide the requested "
-      "service",
-      "cancel",
-      0,
-      NS_XMPP_STANZAS,
-      { 502, 503, 510, },
-    },
-
-    {
-      "out-of-order",
-      "the request cannot occur at this point in the state machine",
-      "cancel",
-      XMPP_ERROR_UNEXPECTED_REQUEST,
-      NS_JINGLE_ERRORS,
-      { 0, },
-    },
-
-    {
-      "unknown-session",
-      "the 'sid' attribute specifies a session that is unknown to the "
-      "recipient",
-      "cancel",
-      XMPP_ERROR_BAD_REQUEST,
-      NS_JINGLE_ERRORS,
-      { 0, },
-    },
-
-    {
-      "unsupported-transports",
-      "the recipient does not support any of the desired content transport "
-      "methods",
-      "cancel",
-      XMPP_ERROR_FEATURE_NOT_IMPLEMENTED,
-      NS_JINGLE_ERRORS,
-      { 0, },
-    },
-
-    {
-      "unsupported-content",
-      "the recipient does not support any of the desired content description"
-      "formats",
-      "cancel",
-      XMPP_ERROR_FEATURE_NOT_IMPLEMENTED,
-      NS_JINGLE_ERRORS,
-      { 0, },
-    },
-
-    {
-      "no-valid-streams",
-      "None of the available streams are acceptable.",
-      "cancel",
-      XMPP_ERROR_BAD_REQUEST,
-      NS_SI,
-      { 400, 0 },
-    },
-
-    {
-      "bad-profile",
-      "The profile is not understood or invalid.",
-      "modify",
-      XMPP_ERROR_BAD_REQUEST,
-      NS_SI,
-      { 400, 0 },
-    },
-};
-
-GQuark
-gabble_xmpp_error_quark (void)
-{
-  static GQuark quark = 0;
-  if (!quark)
-    quark = g_quark_from_static_string ("gabble-xmpp-error");
-  return quark;
-}
-
-GabbleXmppError
-gabble_xmpp_error_from_node (LmMessageNode *error_node)
-{
-  gint i, j;
-  const gchar *error_code_str;
-
-  g_return_val_if_fail (error_node != NULL, XMPP_ERROR_UNDEFINED_CONDITION);
-
-  /* First, try to look it up the modern way */
-  if (error_node->children)
-    {
-      /* we loop backwards because the most specific errors are the larger
-       * numbers; the >= 0 test is OK because i is signed */
-      for (i = NUM_XMPP_ERRORS - 1; i >= 0; i--)
-        {
-          if (lm_message_node_get_child_with_namespace (error_node,
-                xmpp_errors[i].name, xmpp_errors[i].namespace))
-            {
-              return i;
-            }
-        }
-    }
-
-  /* Ok, do it the legacy way */
-  error_code_str = lm_message_node_get_attribute (error_node, "code");
-  if (error_code_str)
-    {
-      gint error_code;
-
-      error_code = atoi (error_code_str);
-
-      /* skip UNDEFINED_CONDITION, we want code 500 to be translated
-       * to INTERNAL_SERVER_ERROR */
-      for (i = 1; i < NUM_XMPP_ERRORS; i++)
-        {
-          const XmppErrorSpec *spec = &xmpp_errors[i];
-
-          for (j = 0; j < MAX_LEGACY_ERRORS; j++)
-            {
-              gint cur_code = spec->legacy_errors[j];
-              if (cur_code == 0)
-                break;
-
-              if (cur_code == error_code)
-                return i;
-            }
-        }
-    }
-
-  return XMPP_ERROR_UNDEFINED_CONDITION;
-}
-
-static GError *
-gabble_xmpp_error_to_g_error (GabbleXmppError error)
-{
-  if (error >= NUM_XMPP_ERRORS)
-      return g_error_new (GABBLE_XMPP_ERROR, XMPP_ERROR_UNDEFINED_CONDITION,
-          "Unknown or invalid XMPP error");
-
-  return g_error_new (GABBLE_XMPP_ERROR,
-                      error,
-                      xmpp_errors[error].description);
-}
-
-/*
- * See RFC 3920: 4.7 Stream Errors, 9.3 Stanza Errors.
- */
-LmMessageNode *
-gabble_xmpp_error_to_node (GabbleXmppError error,
-                           LmMessageNode *parent_node,
-                           const gchar *errmsg)
-{
-  const XmppErrorSpec *spec, *extra;
-  LmMessageNode *error_node, *node;
-  gchar str[6];
-
-  g_return_val_if_fail (error != XMPP_ERROR_UNDEFINED_CONDITION &&
-      error < NUM_XMPP_ERRORS, NULL);
-
-  if (xmpp_errors[error].specialises)
-    {
-      extra = &xmpp_errors[error];
-      spec = &xmpp_errors[extra->specialises];
-    }
-  else
-    {
-      extra = NULL;
-      spec = &xmpp_errors[error];
-    }
-
-  error_node = lm_message_node_add_child (parent_node, "error", NULL);
-
-  sprintf (str, "%d", spec->legacy_errors[0]);
-  lm_message_node_set_attribute (error_node, "code", str);
-
-  if (spec->type)
-    {
-      lm_message_node_set_attribute (error_node, "type", spec->type);
-    }
-
-  node = lm_message_node_add_child (error_node, spec->name, NULL);
-  lm_message_node_set_attribute (node, "xmlns", NS_XMPP_STANZAS);
-
-  if (extra != NULL)
-    {
-      node = lm_message_node_add_child (error_node, extra->name, NULL);
-      lm_message_node_set_attribute (node, "xmlns", extra->namespace);
-    }
-
-  if (NULL != errmsg)
-    lm_message_node_add_child (error_node, "text", errmsg);
-
-  return error_node;
-}
-
-const gchar *
-gabble_xmpp_error_string (GabbleXmppError error)
-{
-  if (error < NUM_XMPP_ERRORS)
-    return xmpp_errors[error].name;
-  else
-    return NULL;
-}
-
-const gchar *
-gabble_xmpp_error_description (GabbleXmppError error)
-{
-  if (error < NUM_XMPP_ERRORS)
-    return xmpp_errors[error].description;
-  else
-    return NULL;
-}
-
-GError *
-gabble_message_get_xmpp_error (LmMessage *msg)
-{
-  g_return_val_if_fail (msg != NULL, NULL);
-
-  if (lm_message_get_sub_type (msg) == LM_MESSAGE_SUB_TYPE_ERROR)
-    {
-      LmMessageNode *error_node = lm_message_node_get_child (msg->node,
-          "error");
-
-      if (error_node != NULL)
-        {
-          return gabble_xmpp_error_to_g_error
-              (gabble_xmpp_error_from_node (error_node));
-        }
-      else
-        {
-          return g_error_new (GABBLE_XMPP_ERROR,
-              XMPP_ERROR_UNDEFINED_CONDITION, "Unknown or invalid XMPP error");
-        }
-    }
-
-  /* no error */
-  return NULL;
-}
-- 
1.5.6.3




More information about the Telepathy-commits mailing list