Added SILC Thread Queue API
[crypto.git] / lib / silccore / silcstatus.c
index 8829a8509ff75b9bd96fe4347bc8858801ffa45d..5e6b8563efa5dc75440e0e81d87428149e5b4371 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 2003 Pekka Riikonen
+  Copyright (C) 2003 - 2006 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@
 */
 /* $Id$ */
 
-#include "silcincludes.h"
+#include "silc.h"
 #include "silcstatus.h"
 
 /* Returns arguments by the status type. */
@@ -56,8 +56,36 @@ SilcUInt32 silc_status_get_args(SilcStatus status,
 
   case SILC_STATUS_ERR_NO_SUCH_CLIENT_ID:
   case SILC_STATUS_ERR_BAD_CLIENT_ID:
+    {
+      SilcID id;
+      tmp = silc_argument_get_arg_type(args, 2, &len);
+      if (!tmp)
+       return 0;
+      if (silc_id_payload_parse_id(tmp, len, &id))
+       return 0;
+      *ret_arg1 = silc_id_dup(&id.u.client_id, SILC_ID_CLIENT);
+      if (!(*ret_arg1))
+       return 0;
+      num = 1;
+    }
+    break;
+
   case SILC_STATUS_ERR_NO_SUCH_SERVER_ID:
   case SILC_STATUS_ERR_BAD_SERVER_ID:
+    {
+      SilcID id;
+      tmp = silc_argument_get_arg_type(args, 2, &len);
+      if (!tmp)
+       return 0;
+      if (silc_id_payload_parse_id(tmp, len, &id))
+       return 0;
+      *ret_arg1 = silc_id_dup(&id.u.server_id, SILC_ID_SERVER);
+      if (!(*ret_arg1))
+       return 0;
+      num = 1;
+    }
+    break;
+
   case SILC_STATUS_ERR_NO_SUCH_CHANNEL_ID:
   case SILC_STATUS_ERR_BAD_CHANNEL_ID:
   case SILC_STATUS_ERR_NOT_ON_CHANNEL:
@@ -66,31 +94,43 @@ SilcUInt32 silc_status_get_args(SilcStatus status,
   case SILC_STATUS_ERR_BANNED_FROM_CHANNEL:
   case SILC_STATUS_ERR_NO_CHANNEL_PRIV:
   case SILC_STATUS_ERR_NO_CHANNEL_FOPRIV:
-    tmp = silc_argument_get_arg_type(args, 2, &len);
-    if (!tmp)
-      return 0;
-    *ret_arg1 = silc_id_payload_parse_id(tmp, len, NULL);
-    if (!(*ret_arg1))
-      return 0;
-    num = 1;
+    {
+      SilcID id;
+      tmp = silc_argument_get_arg_type(args, 2, &len);
+      if (!tmp)
+       return 0;
+      if (silc_id_payload_parse_id(tmp, len, &id))
+       return 0;
+      *ret_arg1 = silc_id_dup(&id.u.channel_id, SILC_ID_CHANNEL);
+      if (!(*ret_arg1))
+       return 0;
+      num = 1;
+    }
     break;
 
   case SILC_STATUS_ERR_USER_NOT_ON_CHANNEL:
   case SILC_STATUS_ERR_USER_ON_CHANNEL:
-    tmp = silc_argument_get_arg_type(args, 2, &len);
-    if (!tmp)
-      return 0;
-    *ret_arg1 = silc_id_payload_parse_id(tmp, len, NULL);
-    if (!(*ret_arg1))
-      return 0;
-    num = 1;
-    tmp = silc_argument_get_arg_type(args, 3, &len);
-    if (!tmp)
-      return num;
-    *ret_arg2 = silc_id_payload_parse_id(tmp, len, NULL);
-    if (!(*ret_arg2))
-      return num;
-    num = 2;
+    {
+      SilcID id;
+      tmp = silc_argument_get_arg_type(args, 2, &len);
+      if (!tmp)
+       return 0;
+      if (silc_id_payload_parse_id(tmp, len, &id))
+       return 0;
+      *ret_arg1 = silc_id_dup(&id.u.client_id, id.type);
+      if (!(*ret_arg1))
+       return 0;
+      num = 1;
+      tmp = silc_argument_get_arg_type(args, 3, &len);
+      if (!tmp)
+       return num;
+      if (silc_id_payload_parse_id(tmp, len, &id))
+       return 0;
+      *ret_arg2 = silc_id_dup(&id.u.channel_id, id.type);
+      if (!(*ret_arg2))
+       return num;
+      num = 2;
+    }
     break;
 
   default: