-/****h* silccore/silcid.h
- *
- * NAME
- *
- * silcid.h
- *
- * COPYRIGHT
- *
- * Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
- *
- * Copyright (C) 1997 - 2000 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.
- *
- * 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
- * GNU General Public License for more details.
+/*
+
+ silcid.h
+
+ Author: Pekka Riikonen <priikone@silcnet.org>
+
+ 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; 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
+ GNU General Public License for more details.
+
+*/
+
+/****h* silccore/SILC ID Interface
*
* DESCRIPTION
*
* channels are identified by the these ID's.
*
* The ID's are based on IP addresses. The IP address provides a good
- * way to distinguish the ID's from other ID's. The ID's support both
+ * way to distinguish the ID's from other ID's. The ID's supports both
* IPv4 and IPv6.
*
+ * This file also includes the implementation of the SILC ID Payload
+ * parsing and encoding.
+ *
***/
#ifndef SILCID_H
*
* NAME
*
- * typedef uint16 SilcIdType;
+ * typedef SilcUInt16 SilcIdType;
*
* DESCRIPTION
*
*
* SOURCE
*/
-typedef uint16 SilcIdType;
+typedef SilcUInt16 SilcIdType;
/* The SILC ID Types */
-#define SILC_ID_NONE 0
-#define SILC_ID_SERVER 1
-#define SILC_ID_CLIENT 2
-#define SILC_ID_CHANNEL 3
+#define SILC_ID_NONE 0
+#define SILC_ID_SERVER 1
+#define SILC_ID_CLIENT 2
+#define SILC_ID_CHANNEL 3
/***/
/* The ID Lenghts. These are IPv4 based and should be noted if used directly
#define CLIENTID_HASH_LEN (88 / 8) /* Client ID's 88 bit MD5 hash */
+/****s* silccore/SilcIDAPI/SilcIDPayload
+ *
+ * NAME
+ *
+ * typedef struct SilcIDPayloadStruct *SilcIDPayload;
+ *
+ * DESCRIPTION
+ *
+ * This context is the actual ID Payload and is allocated by
+ * silc_id_payload_parse and given as argument usually to all
+ * silc_id_payload_* functions. It is freed by the function
+ * silc_id_payload_free.
+ *
+ ***/
+typedef struct SilcIDPayloadStruct *SilcIDPayload;
+
+/* Prototypes */
+
+/****f* silccore/SilcIDAPI/silc_id_payload_parse
+ *
+ * SYNOPSIS
+ *
+ * SilcIDPayload silc_id_payload_parse(const unsigned char *payload,
+ * SilcUInt32 payload_len);
+ *
+ * DESCRIPTION
+ *
+ * Parses buffer and return ID payload into payload structure. The
+ * `buffer' is raw payload buffer. The caller must free the returned
+ * payload.
+ *
+ ***/
+SilcIDPayload silc_id_payload_parse(const unsigned char *payload,
+ SilcUInt32 payload_len);
+
+/****f* silccore/SilcIDAPI/silc_id_payload_parse_id
+ *
+ * SYNOPSIS
+ *
+ * void *silc_id_payload_parse_id(const unsigned char *data,
+ * SilcUInt32 len,
+ * SilcIdType *type);
+ *
+ * DESCRIPTION
+ *
+ * Return ID directly from the raw ID Payload data buffer. The
+ * caller must free the returned ID.
+ *
+ ***/
+void *silc_id_payload_parse_id(const unsigned char *data, SilcUInt32 len,
+ SilcIdType *type);
+
+/****f* silccore/SilcIDAPI/silc_id_payload_encode
+ *
+ * SYNOPSIS
+ *
+ * SilcBuffer silc_id_payload_encode(const void *id, SilcIdType type);
+ *
+ * DESCRIPTION
+ *
+ * Encodes ID Payload. The `id' is the ID of the type `type' to put
+ * into the payload. Returns the encoded payload buffer.
+ *
+ ***/
+SilcBuffer silc_id_payload_encode(const void *id, SilcIdType type);
+
+/****f* silccore/SilcIDAPI/silc_id_payload_encode_data
+ *
+ * SYNOPSIS
+ *
+ * SilcBuffer silc_id_payload_encode_data(const unsigned char *id,
+ * uin32 id_len, SilcIdType type);
+ *
+ * DESCRIPTION
+ *
+ * Encodes ID Payload. The `id' is raw ID data of the length of `id_len'
+ * of type of `type'. Returns the encoded payload buffer.
+ *
+ ***/
+SilcBuffer silc_id_payload_encode_data(const unsigned char *id,
+ SilcUInt32 id_len, SilcIdType type);
+
+/****f* silccore/SilcIDAPI/silc_id_payload_free
+ *
+ * SYNOPSIS
+ *
+ * void silc_id_payload_free(SilcIDPayload payload);
+ *
+ * DESCRIPTION
+ *
+ * Frees the ID Payload and all data in it.
+ *
+ ***/
+void silc_id_payload_free(SilcIDPayload payload);
+
+/****f* silccore/SilcIDAPI/silc_id_payload_get_type
+ *
+ * SYNOPSIS
+ *
+ * SilcIdType silc_id_payload_get_type(SilcIDPayload payload);
+ *
+ * DESCRIPTION
+ *
+ * Returns the ID type from the ID Payload. The type tells the
+ * type of the ID in the payload.
+ *
+ ***/
+SilcIdType silc_id_payload_get_type(SilcIDPayload payload);
+
+/****f* silccore/SilcIDAPI/silc_id_payload_get_id
+ *
+ * SYNOPSIS
+ *
+ * void *silc_id_payload_get_id(SilcIDPayload payload);
+ *
+ * DESCRIPTION
+ *
+ * Returns the ID in the ID Payload. The caller must free the
+ * returned ID.
+ *
+ ***/
+void *silc_id_payload_get_id(SilcIDPayload payload);
+
+/****f* silccore/SilcIDAPI/silc_id_payload_get_data
+ *
+ * SYNOPSIS
+ *
+ * unsigned char *silc_id_payload_get_data(SilcIDPayload payload);
+ *
+ * DESCRIPTION
+ *
+ * Returns the raw ID data from the ID Payload. The data is duplicated
+ * and the caller must free it.
+ *
+ ***/
+unsigned char *silc_id_payload_get_data(SilcIDPayload payload);
+
+/****f* silccore/SilcIDAPI/silc_id_payload_get_len
+ *
+ * SYNOPSIS
+ *
+ * SilcUInt32 silc_id_payload_get_len(SilcIDPayload payload);
+ *
+ * DESCRIPTION
+ *
+ * Returns the length of the ID in the ID Payload.
+ *
+ ***/
+SilcUInt32 silc_id_payload_get_len(SilcIDPayload payload);
+
/****s* silccore/SilcIDAPI/SilcIDIP
*
* NAME
*/
typedef struct {
unsigned char data[16]; /* IP data (in MSB first order) */
- uint8 data_len; /* Length of the data (4 or 16) */
+ SilcUInt8 data_len; /* Length of the data (4 or 16) */
} SilcIDIP;
/***/
*/
typedef struct {
SilcIDIP ip; /* n bit IP address */
- uint16 port; /* 16 bit port */
- uint16 rnd; /* 16 bit random number */
+ SilcUInt16 port; /* 16 bit port */
+ SilcUInt16 rnd; /* 16 bit random number */
} SilcServerID;
/***/
*
* 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
*/
* SOURCE
*/
typedef struct {
- SilcIDIP ip; /* n bit IP address */
- uint16 port; /* 16 bit port */
- uint16 rnd; /* 16 bit random number */
+ SilcIDIP ip; /* n bit IP address */
+ SilcUInt16 port; /* 16 bit port */
+ SilcUInt16 rnd; /* 16 bit random number */
} SilcChannelID;
/***/
*
* SYNOPSIS
*
- * unsigned char *silc_id_id2str(void *id, SilcIdType type);
+ * unsigned char *silc_id_id2str(const void *id, SilcIdType type);
*
* 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. Use the
+ * silc_id_get_len to get the length of the ID.
*
***/
-unsigned char *silc_id_id2str(void *id, SilcIdType type);
+unsigned char *silc_id_id2str(const void *id, SilcIdType type);
/****f* silccore/SilcIDAPI/silc_id_str2id
*
* SYNOPSIS
*
- * void *silc_id_str2id(unsigned char *id, uint32 id_len, SilcIdType type);
+ * void *silc_id_str2id(const unsigned char *id, SilcUInt32 id_len,
+ * SilcIdType type);
*
* DESCRIPTION
*
* ID out of data that has been taken for example from packet.
*
***/
-void *silc_id_str2id(unsigned char *id, uint32 id_len, SilcIdType type);
+void *silc_id_str2id(const unsigned char *id, SilcUInt32 id_len,
+ SilcIdType type);
/****f* silccore/SilcIDAPI/silc_id_get_len
*
* SYNOPSIS
*
- * uint32 silc_id_get_len(void *id, SilcIdType type);
+ * SilcUInt32 silc_id_get_len(const void *id, SilcIdType type);
*
* DESCRIPTION
*
* Returns the true length of the ID of the type `type'.
*
***/
-uint32 silc_id_get_len(void *id, SilcIdType type);
+SilcUInt32 silc_id_get_len(const void *id, SilcIdType type);
/****f* silccore/SilcIDAPI/silc_id_dup
*
* SYNOPSIS
*
- * void *silc_id_dup(void *id, SilcIdType type);
+ * void *silc_id_dup(const void *id, SilcIdType type);
*
* DESCRIPTION
*
* duplicated ID.
*
***/
-void *silc_id_dup(void *id, SilcIdType type);
+void *silc_id_dup(const void *id, SilcIdType type);
#endif