X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilccore%2Fsilcid.h;h=741ad9edb8cf9e884ca0fbf7dc74d280c9c10c94;hb=413da0f8686910f5e627393157566ae729ca99c4;hp=e28c412a408ee061af49e7165cd9951a80614206;hpb=d730ceaea07589410fb60047c45e221f63677513;p=silc.git diff --git a/lib/silccore/silcid.h b/lib/silccore/silcid.h index e28c412a..741ad9ed 100644 --- a/lib/silccore/silcid.h +++ b/lib/silccore/silcid.h @@ -18,7 +18,7 @@ */ -/****h* silccore/SilcIDAPI +/****h* silccore/SILC ID Interface * * DESCRIPTION * @@ -32,6 +32,9 @@ * 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 @@ -41,7 +44,7 @@ * * NAME * - * typedef uint16 SilcIdType; + * typedef SilcUInt16 SilcIdType; * * DESCRIPTION * @@ -49,7 +52,7 @@ * * SOURCE */ -typedef uint16 SilcIdType; +typedef SilcUInt16 SilcIdType; /* The SILC ID Types */ #define SILC_ID_NONE 0 @@ -66,6 +69,156 @@ typedef uint16 SilcIdType; #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 @@ -82,7 +235,7 @@ typedef uint16 SilcIdType; */ 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; /***/ @@ -104,8 +257,8 @@ typedef struct { */ 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; /***/ @@ -121,7 +274,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 */ @@ -149,9 +302,9 @@ typedef struct { * 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; /***/ @@ -269,7 +422,8 @@ typedef struct { * 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(const void *id, SilcIdType type); @@ -278,7 +432,7 @@ unsigned char *silc_id_id2str(const void *id, SilcIdType type); * * SYNOPSIS * - * void *silc_id_str2id(const unsigned char *id, uint32 id_len, + * void *silc_id_str2id(const unsigned char *id, SilcUInt32 id_len, * SilcIdType type); * * DESCRIPTION @@ -287,20 +441,21 @@ unsigned char *silc_id_id2str(const void *id, SilcIdType type); * ID out of data that has been taken for example from packet. * ***/ -void *silc_id_str2id(const 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(const 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(const void *id, SilcIdType type); +SilcUInt32 silc_id_get_len(const void *id, SilcIdType type); /****f* silccore/SilcIDAPI/silc_id_dup *