changeset 420:04a0b450380b

Display error code/message when receiving a message packet with "error" type
author Mikael Berthe <mikael@lilotux.net>
date Fri, 02 Sep 2005 21:47:14 +0200
parents 2f9852610cf4
children 569f333e51e2
files mcabber/src/jabglue.c
diffstat 1 files changed, 60 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/jabglue.c	Fri Sep 02 20:34:17 2005 +0200
+++ b/mcabber/src/jabglue.c	Fri Sep 02 21:47:14 2005 +0200
@@ -577,6 +577,50 @@
   g_free(buffer);
 }
 
+const char *errormsg(int code)
+{
+  const char *desc;
+
+  switch(code) {
+    case 401: desc = "Unauthorized";
+              break;
+    case 302: desc = "Redirect";
+              break;
+    case 400: desc = "Bad request";
+              break;
+    case 402: desc = "Payment Required";
+              break;
+    case 403: desc = "Forbidden";
+              break;
+    case 404: desc = "Not Found";
+              break;
+    case 405: desc = "Not Allowed";
+              break;
+    case 406: desc = "Not Acceptable";
+              break;
+    case 407: desc = "Registration Required";
+              break;
+    case 408: desc = "Request Timeout";
+              break;
+    case 409: desc = "Conflict";
+              break;
+    case 500: desc = "Internal Server Error";
+              break;
+    case 501: desc = "Not Implemented";
+              break;
+    case 502: desc = "Remote Server Error";
+              break;
+    case 503: desc = "Service Unavailable";
+              break;
+    case 504: desc = "Remote Server Timeout";
+              break;
+    default:
+              desc = NULL;
+  }
+
+  return desc;
+}
+
 void statehandler(jconn conn, int state)
 {
   static int previous_state = -1;
@@ -658,7 +702,8 @@
           /* there can be multiple <x> tags. we're looking for one with
              xmlns = jabber:x:encrypted */
 
-          for (x = xmlnode_get_firstchild(packet->x); x; x = xmlnode_get_nextsibling(x)) {
+          x = xmlnode_get_firstchild(packet->x);
+          for ( ; x; x = xmlnode_get_nextsibling(x)) {
             if ((p = xmlnode_get_name(x)) && !strcmp(p, "x"))
               if ((p = xmlnode_get_attrib(x, "xmlns")) &&
                       !strcasecmp(p, "jabber:x:encrypted"))
@@ -674,6 +719,17 @@
               timestamp = from_iso8601(p, 1);
           }
 
+          if (type && !strcmp(type, "error")) {
+            if ((x = xmlnode_get_tag(packet->x, "error")) != NULL) {
+              if ((p = xmlnode_get_attrib(x, "code")) != NULL) {
+                const char *desc;
+                int code = atoi(p);
+                desc = errormsg(atoi(p));
+                scr_LogPrint(LPRINT_LOGNORM, "Error code from server: %d %s",
+                             code, (desc ? desc : ""));
+              }
+            }
+          }
           if (from && body)
             gotmessage(type, from, body, enc, timestamp);
           if (tmp)
@@ -797,9 +853,10 @@
           }
         } else if (!strcmp(type, "set")) {
         } else if (!strcmp(type, "error")) {
-          char *name=NULL, *desc;
+          char *name=NULL;
           char *text=NULL;
           int code = 0;
+          const char *desc;
 
           x = xmlnode_get_tag(packet->x, "error");
           p = xmlnode_get_attrib(x, "code"); if (p) code = atoi(p);
@@ -810,42 +867,7 @@
           x = xmlnode_get_tag(x, "text");
           p = xmlnode_get_data(x); if (p) text = p;
 
-          switch(code) {
-            case 401: desc = "Unauthorized";
-                break;
-            case 302: desc = "Redirect";
-                break;
-            case 400: desc = "Bad request";
-                break;
-            case 402: desc = "Payment Required";
-                break;
-            case 403: desc = "Forbidden";
-                break;
-            case 404: desc = "Not Found";
-                break;
-            case 405: desc = "Not Allowed";
-                break;
-            case 406: desc = "Not Acceptable";
-                break;
-            case 407: desc = "Registration Required";
-                break;
-            case 408: desc = "Request Timeout";
-                break;
-            case 409: desc = "Conflict";
-                break;
-            case 500: desc = "Internal Server Error";
-                break;
-            case 501: desc = "Not Implemented";
-                break;
-            case 502: desc = "Remote Server Error";
-                break;
-            case 503: desc = "Service Unavailable";
-                break;
-            case 504: desc = "Remote Server Timeout";
-                break;
-            default:
-                desc = NULL;
-          }
+          desc = errormsg(code);
 
           scr_LogPrint(LPRINT_LOGNORM, "Error code from server: %d %s",
                        code, (desc ? desc : ""));