Added SILC Server library.
[silc.git] / lib / silccore / silcid.h
index 4205ada288dc048dac48aa56884de5d3437afcb8..8bdf6cc0e2e019bcc9db230e7d29de19e311ba01 100644 (file)
@@ -1,16 +1,15 @@
 /*
+
   silcid.h
+
   Author: Pekka Riikonen <priikone@silcnet.org>
-  Copyright (C) 1997 - 2000 Pekka Riikonen
+
+  Copyright (C) 1997 - 2005 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
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
+  the Free Software Foundation; version 2 of the License.
+
   This program 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
@@ -43,7 +42,7 @@
 /****d* silccore/SilcIDAPI/SilcIdType
  *
  * NAME
- * 
+ *
  *    typedef SilcUInt16 SilcIdType;
  *
  * DESCRIPTION
@@ -72,7 +71,7 @@ typedef SilcUInt16 SilcIdType;
 /****s* silccore/SilcIDAPI/SilcIDPayload
  *
  * NAME
- * 
+ *
  *    typedef struct SilcIDPayloadStruct *SilcIDPayload;
  *
  * DESCRIPTION
@@ -85,22 +84,6 @@ typedef SilcUInt16 SilcIdType;
  ***/
 typedef struct SilcIDPayloadStruct *SilcIDPayload;
 
-/****s* silccore/SilcIDAPI/SilcArgumentPayload
- *
- * NAME
- * 
- *    typedef struct SilcArgumentPayloadStruct *SilcArgumentPayload;
- *
- * DESCRIPTION
- *
- *    This context is the actual Argument Payload and is allocated
- *    by silc_argument_payload_parse and given as argument usually to
- *    all silc_argument_payload_* functions.  It is freed by the
- *    silc_argument_payload_free function.
- *
- ***/
-typedef struct SilcArgumentPayloadStruct *SilcArgumentPayload;
-
 /* Prototypes */
 
 /****f* silccore/SilcIDAPI/silc_id_payload_parse
@@ -113,7 +96,8 @@ typedef struct SilcArgumentPayloadStruct *SilcArgumentPayload;
  * DESCRIPTION
  *
  *    Parses buffer and return ID payload into payload structure. The
- *    `buffer' is raw payload buffer.
+ *    `buffer' is raw payload buffer.  The caller must free the returned
+ *    payload.
  *
  ***/
 SilcIDPayload silc_id_payload_parse(const unsigned char *payload,
@@ -123,18 +107,20 @@ SilcIDPayload silc_id_payload_parse(const unsigned char *payload,
  *
  * SYNOPSIS
  *
- *    void *silc_id_payload_parse_id(const unsigned char *data, 
- *                                   SilcUInt32 len,
- *                                   SilcIdType *type);
+ *    SilcBool silc_id_payload_parse_id(const unsigned char *data,
+ *                                      SilcUInt32 len,
+ *                                      SilcIdType *type, void *ret_id,
+ *                                      SilcUInt32 ret_id_size);
  *
  * DESCRIPTION
  *
- *    Return ID directly from the raw ID Payload data buffer. The
- *    caller must free the returned ID.
+ *    Return ID directly from the raw ID Payload data buffer.  This does
+ *    not allocate any memory.
  *
  ***/
-void *silc_id_payload_parse_id(const unsigned char *data, SilcUInt32 len,
-                              SilcIdType *type);
+SilcBool silc_id_payload_parse_id(const unsigned char *data, SilcUInt32 len,
+                                 SilcIdType *type, void *ret_id,
+                                 SilcUInt32 ret_id_size);
 
 /****f* silccore/SilcIDAPI/silc_id_payload_encode
  *
@@ -197,15 +183,16 @@ SilcIdType silc_id_payload_get_type(SilcIDPayload payload);
  *
  * SYNOPSIS
  *
- *    void *silc_id_payload_get_id(SilcIDPayload payload);
+ *    SilcBool silc_id_payload_get_id(SilcIDPayload payload, void *ret_id,
+ *                                    SilcUInt32 ret_id_len);
  *
  * DESCRIPTION
  *
- *    Returns the ID in the ID Payload. The caller must free the
- *    returned ID.
+ *    Returns the ID in the ID Payload. This does not allocate any memory.
  *
  ***/
-void *silc_id_payload_get_id(SilcIDPayload payload);
+SilcBool silc_id_payload_get_id(SilcIDPayload payload, void *ret_id,
+                               SilcUInt32 ret_id_len);
 
 /****f* silccore/SilcIDAPI/silc_id_payload_get_data
  *
@@ -237,7 +224,7 @@ SilcUInt32 silc_id_payload_get_len(SilcIDPayload payload);
 /****s* silccore/SilcIDAPI/SilcIDIP
  *
  * NAME
- * 
+ *
  *    typedef struct { ... } SilcIDIP;
  *
  * DESCRIPTION
@@ -257,13 +244,13 @@ typedef struct {
 /****s* silccore/SilcIDAPI/SilcServerID
  *
  * NAME
- * 
+ *
  *    typedef struct { ... } SilcServerID;
  *
  * DESCRIPTION
  *
  *    64 or 160 bit SilcServerID structure:
- *  
+ *
  *     n bit IP address
  *    16 bit port
  *    16 bit random number
@@ -272,15 +259,15 @@ typedef struct {
  */
 typedef struct {
   SilcIDIP ip;                 /* n bit IP address */
-  SilcUInt16 port;                     /* 16 bit port */
-  SilcUInt16 rnd;                      /* 16 bit random number */
+  SilcUInt16 port;             /* 16 bit port */
+  SilcUInt16 rnd;              /* 16 bit random number */
 } SilcServerID;
 /***/
 
 /****s* silccore/SilcIDAPI/SilcClientID
  *
  * NAME
- * 
+ *
  *    typedef struct { ... } SilcClientID;
  *
  * DESCRIPTION
@@ -289,7 +276,7 @@ typedef struct {
  *
  *      n bit ServerID IP address [bits 1-32 or bits 1-128]
  *      8 bit random number
- *     88 bit hash value from nickname
+ *     88 bit hash value from lowercase nickname
  *
  * SOURCE
  */
@@ -303,7 +290,7 @@ typedef struct {
 /****s* silccore/SilcIDAPI/SilcChannelID
  *
  * NAME
- * 
+ *
  *    typedef struct { ... } SilcChannelID;
  *
  * DESCRIPTION
@@ -317,9 +304,9 @@ typedef struct {
  * SOURCE
  */
 typedef struct {
-  SilcIDIP ip;                                 /* n bit IP address */
-  SilcUInt16 port;                                     /* 16 bit port */
-  SilcUInt16 rnd;                                      /* 16 bit random number */
+  SilcIDIP ip;                 /* n bit IP address */
+  SilcUInt16 port;             /* 16 bit port */
+  SilcUInt16 rnd;              /* 16 bit random number */
 } SilcChannelID;
 /***/
 
@@ -328,7 +315,7 @@ typedef struct {
 /****d* silccore/SilcIDAPI/SILC_ID_COMPARE
  *
  * NAME
- * 
+ *
  *    #define SILC_ID_COMPARE ...
  *
  * DESCRIPTION
@@ -344,7 +331,7 @@ typedef struct {
 /****d* silccore/SilcIDAPI/SILC_ID_CLIENT_COMPARE
  *
  * NAME
- * 
+ *
  *    #define SILC_ID_CLIENT_COMPARE ...
  *
  * DESCRIPTION
@@ -360,7 +347,7 @@ typedef struct {
 /****d* silccore/SilcIDAPI/SILC_ID_SERVER_COMPARE
  *
  * NAME
- * 
+ *
  *    #define SILC_ID_SERVER_COMPARE ...
  *
  * DESCRIPTION
@@ -376,7 +363,7 @@ typedef struct {
 /****d* silccore/SilcIDAPI/SILC_ID_CHANNEL_COMPARE
  *
  * NAME
- * 
+ *
  *    #define SILC_ID_CHANNEL_COMPARE ...
  *
  * DESCRIPTION
@@ -392,7 +379,7 @@ typedef struct {
 /****d* silccore/SilcIDAPI/SILC_ID_COMPARE_TYPE
  *
  * NAME
- * 
+ *
  *    #define SILC_ID_COMPARE_TYPE ...
  *
  * DESCRIPTION
@@ -410,7 +397,7 @@ typedef struct {
 /****d* silccore/SilcIDAPI/SILC_ID_COMPARE_HASH
  *
  * NAME
- * 
+ *
  *    #define SILC_ID_COMPARE_HASH ...
  *
  * DESCRIPTION
@@ -432,31 +419,38 @@ typedef struct {
  *
  * SYNOPSIS
  *
- *    unsigned char *silc_id_id2str(const void *id, SilcIdType type);
+ *    SilcBool silc_id_id2str(const void *id, SilcIdType type,
+ *                            unsigned char *ret_id, SilcUInt32 ret_id_size,
+ *                            SilcUInt32 *ret_id_len);
  *
  * DESCRIPTION
  *
  *    Converts an ID of type `type' to data. This can be used to
- *    convert the ID's to data for inclusion in the packets.
+ *    convert the ID's to data for inclusion in the packets.  This does
+ *    not allocate any memory.
  *
  ***/
-unsigned char *silc_id_id2str(const void *id, SilcIdType type);
+SilcBool silc_id_id2str(const void *id, SilcIdType type,
+                       unsigned char *ret_id, SilcUInt32 ret_id_size,
+                       SilcUInt32 *ret_id_len);
 
 /****f* silccore/SilcIDAPI/silc_id_str2id
  *
  * SYNOPSIS
  *
- *    void *silc_id_str2id(const unsigned char *id, SilcUInt32 id_len, 
- *                         SilcIdType type);
+ *    SilcBool silc_id_str2id(const unsigned char *id, SilcUInt32 id_len,
+ *                            SilcIdType type, void *ret_id,
+ *                            SilcUInt32 ret_id_size);
  *
  * DESCRIPTION
  *
  *    Converts ID data string to an ID. This can be used to get the
- *    ID out of data that has been taken for example from packet.
+ *    ID out of data that has been taken for example from packet.  This
+ *    does not allocate any memory.
  *
  ***/
-void *silc_id_str2id(const unsigned char *id, SilcUInt32 id_len,
-                    SilcIdType type);
+SilcBool silc_id_str2id(const unsigned char *id, SilcUInt32 id_len,
+                       SilcIdType type, void *ret_id, SilcUInt32 ret_id_size);
 
 /****f* silccore/SilcIDAPI/silc_id_get_len
  *