Fixed the MAX_ID_LEN #define, and the silc_id_id2str and
authorPekka Riikonen <priikone@silcnet.org>
Fri, 22 Mar 2002 11:27:54 +0000 (11:27 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Fri, 22 Mar 2002 11:27:54 +0000 (11:27 +0000)
        silc_id_str2id to support IPv6.

CHANGES
lib/silccore/silcid.c
lib/silccore/silcpacket.h

diff --git a/CHANGES b/CHANGES
index 673ac8c1cf8a070533a3d83d6b6163ef04080e66..9560b47a42fbab71c37392fbcee5a4cfa390ff76 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,13 @@
+Fri Mar 22 12:25:58 CET 2002  Pekka Riikonen <priikone@silcnet.org>
+
+       * Fixed the SILC_PACKET_MAX_ID_LEN to actually be the max
+         ID length.  It ignored that ID can be IPv6 based as well.
+         Affected file lib/silccore/silcpacket.h.
+
+       * Fixed the silc_id_id2str and silc_id_str2id to take the
+         IPv6 address offset's into consideration.  Affecte file is
+         lib/silccore/silcid.c.
+
 Thu Mar 21 20:44:13 EET 2002  Pekka Riikonen <priikone@silcnet.org>
 
        * Fixed the internal Unix scheduler functions to check for
index 870400638b721c0fdc712e5ccd983163b7768153..a46892c1f1725be39c1f67c46371488784dd16f5 100644 (file)
@@ -215,8 +215,8 @@ unsigned char *silc_id_id2str(const void *id, SilcIdType type)
     if (!ret_id)
       return NULL;
     memcpy(ret_id, server_id->ip.data, server_id->ip.data_len);
-    SILC_PUT16_MSB(server_id->port, &ret_id[4]);
-    SILC_PUT16_MSB(server_id->rnd, &ret_id[6]);
+    SILC_PUT16_MSB(server_id->port, &ret_id[server_id->ip.data_len]);
+    SILC_PUT16_MSB(server_id->rnd, &ret_id[server_id->ip.data_len + 2]);
     return ret_id;
     break;
   case SILC_ID_CLIENT:
@@ -225,8 +225,9 @@ unsigned char *silc_id_id2str(const void *id, SilcIdType type)
     if (!ret_id)
       return NULL;
     memcpy(ret_id, client_id->ip.data, client_id->ip.data_len);
-    ret_id[4] = client_id->rnd;
-    memcpy(&ret_id[5], client_id->hash, CLIENTID_HASH_LEN);
+    ret_id[client_id->ip.data_len] = client_id->rnd;
+    memcpy(&ret_id[client_id->ip.data_len + 1], client_id->hash, 
+          CLIENTID_HASH_LEN);
     return ret_id;
     break;
   case SILC_ID_CHANNEL:
@@ -235,8 +236,8 @@ unsigned char *silc_id_id2str(const void *id, SilcIdType type)
     if (!ret_id)
       return NULL;
     memcpy(ret_id, channel_id->ip.data, channel_id->ip.data_len);
-    SILC_PUT16_MSB(channel_id->port, &ret_id[4]);
-    SILC_PUT16_MSB(channel_id->rnd, &ret_id[6]);
+    SILC_PUT16_MSB(channel_id->port, &ret_id[channel_id->ip.data_len]);
+    SILC_PUT16_MSB(channel_id->rnd, &ret_id[channel_id->ip.data_len + 2]);
     return ret_id;
     break;
   }
@@ -264,8 +265,8 @@ void *silc_id_str2id(const unsigned char *id, SilcUInt32 id_len, SilcIdType type
       memcpy(server_id->ip.data, id, (id_len > ID_SERVER_LEN_PART + 4 ?
                                      16 : 4));
       server_id->ip.data_len = (id_len > ID_SERVER_LEN_PART + 4 ? 16 : 4);
-      SILC_GET16_MSB(server_id->port, &id[4]);
-      SILC_GET16_MSB(server_id->rnd, &id[6]);
+      SILC_GET16_MSB(server_id->port, &id[server_id->ip.data_len]);
+      SILC_GET16_MSB(server_id->rnd, &id[server_id->ip.data_len + 2]);
       return server_id;
     }
     break;
@@ -283,8 +284,9 @@ void *silc_id_str2id(const unsigned char *id, SilcUInt32 id_len, SilcIdType type
       memcpy(client_id->ip.data, id, (id_len > ID_CLIENT_LEN_PART + 4 ?
                                      16 : 4));
       client_id->ip.data_len = (id_len > ID_CLIENT_LEN_PART + 4 ? 16 : 4);
-      client_id->rnd = id[4];
-      memcpy(client_id->hash, &id[5], CLIENTID_HASH_LEN);
+      client_id->rnd = id[client_id->ip.data_len];
+      memcpy(client_id->hash, &id[client_id->ip.data_len + 1], 
+            CLIENTID_HASH_LEN);
       return client_id;
     }
     break;
@@ -302,8 +304,8 @@ void *silc_id_str2id(const unsigned char *id, SilcUInt32 id_len, SilcIdType type
       memcpy(channel_id->ip.data, id, (id_len > ID_CHANNEL_LEN_PART + 4 ?
                                       16 : 4));
       channel_id->ip.data_len = (id_len > ID_CHANNEL_LEN_PART + 4 ? 16 : 4);
-      SILC_GET16_MSB(channel_id->port, &id[4]);
-      SILC_GET16_MSB(channel_id->rnd, &id[6]);
+      SILC_GET16_MSB(channel_id->port, &id[channel_id->ip.data_len]);
+      SILC_GET16_MSB(channel_id->rnd, &id[channel_id->ip.data_len + 2]);
       return channel_id;
     }
     break;
index 6c855225041d47d4afd4431f7861f889d3ea1c7f..669a4e89d756b38bc4b73e27d0d134bb085af8a3 100644 (file)
@@ -55,7 +55,7 @@
 #define SILC_PACKET_MAX_LEN 0xffff
 
 /* Maximum length of ID */
-#define SILC_PACKET_MAX_ID_LEN 16
+#define SILC_PACKET_MAX_ID_LEN 28
 
 /****d* silccore/SilcPacketAPI/SilcPacketType
  *