X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilccore%2Fsilcattrs.h;h=b51ca8243b28447fe742a44b7b42db1cd5db36c5;hp=b9097bc6b273832107d09ae531e2f934c2f14a98;hb=40f8443d8d3a6577336ee66d18e04d9ac4d956bb;hpb=e05e853860a7106e7d6cb4ef38bbb0be8d7b41b7 diff --git a/lib/silccore/silcattrs.h b/lib/silccore/silcattrs.h index b9097bc6..b51ca824 100644 --- a/lib/silccore/silcattrs.h +++ b/lib/silccore/silcattrs.h @@ -1,10 +1,10 @@ /* - silcattrs.h + silcattrs.h Author: Pekka Riikonen - Copyright (C) 2002 Pekka Riikonen + Copyright (C) 2002 - 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 @@ -33,7 +33,7 @@ /****s* silccore/SilcAttributesAPI/SilcAttributePayload * * NAME - * + * * typedef struct SilcAttributePayloadStruct *SilcAttributePayload; * * DESCRIPTION @@ -49,7 +49,7 @@ typedef struct SilcAttributePayloadStruct *SilcAttributePayload; /****d* silccore/SilcAttributesAPI/SilcAttribute * * NAME - * + * * typedef SilcUInt8 SilcAttribute; * * DESCRIPTION @@ -67,21 +67,22 @@ typedef SilcUInt8 SilcAttribute; comment is the structure or data type that must be used with the silc_attribute_get_object function to fetch parsed attribute. */ #define SILC_ATTRIBUTE_NONE 0 -#define SILC_ATTRIBUTE_USER_INFO 1 /* SilcVCard */ -#define SILC_ATTRIBUTE_SERVICE 2 /* SilcAttributeObjService */ -#define SILC_ATTRIBUTE_STATUS_MOOD 3 /* SilcAttributeMood */ -#define SILC_ATTRIBUTE_STATUS_FREETEXT 4 /* char * (UTF-8 string) */ -#define SILC_ATTRIBUTE_STATUS_MESSAGE 5 /* SilcAttributeObjMime */ -#define SILC_ATTRIBUTE_PREFERRED_LANGUAGE 6 /* char * (UTF-8 string) */ -#define SILC_ATTRIBUTE_PREFERRED_CONTACT 7 /* SilcAttributeContact */ -#define SILC_ATTRIBUTE_TIMEZONE 8 /* char * (UTF-8 string) */ -#define SILC_ATTRIBUTE_GEOLOCATION 9 /* SilcAttributeObjGeo */ -#define SILC_ATTRIBUTE_DEVICE_INFO 10 /* SilcAttributeObjDevice */ -#define SILC_ATTRIBUTE_EXTENSION 11 /* SilcAttributeObjMime */ -#define SILC_ATTRIBUTE_USER_PUBLIC_KEY 12 /* SilcAttributeObjPk */ -#define SILC_ATTRIBUTE_SERVER_PUBLIC_KEY 13 /* SilcAttributeObjPk */ -#define SILC_ATTRIBUTE_USER_DIGITAL_SIGNATURE 14 /* SilcAttributeObjPk */ +#define SILC_ATTRIBUTE_USER_INFO 1 /* SilcVCard */ +#define SILC_ATTRIBUTE_SERVICE 2 /* SilcAttributeObjService */ +#define SILC_ATTRIBUTE_STATUS_MOOD 3 /* SilcAttributeMood */ +#define SILC_ATTRIBUTE_STATUS_FREETEXT 4 /* char * (UTF-8 string) */ +#define SILC_ATTRIBUTE_STATUS_MESSAGE 5 /* SilcMime */ +#define SILC_ATTRIBUTE_PREFERRED_LANGUAGE 6 /* char * (UTF-8 string) */ +#define SILC_ATTRIBUTE_PREFERRED_CONTACT 7 /* SilcAttributeContact */ +#define SILC_ATTRIBUTE_TIMEZONE 8 /* char * (UTF-8 string) */ +#define SILC_ATTRIBUTE_GEOLOCATION 9 /* SilcAttributeObjGeo */ +#define SILC_ATTRIBUTE_DEVICE_INFO 10 /* SilcAttributeObjDevice */ +#define SILC_ATTRIBUTE_EXTENSION 11 /* SilcMime */ +#define SILC_ATTRIBUTE_USER_PUBLIC_KEY 12 /* SilcAttributeObjPk */ +#define SILC_ATTRIBUTE_SERVER_PUBLIC_KEY 13 /* SilcAttributeObjPk */ +#define SILC_ATTRIBUTE_USER_DIGITAL_SIGNATURE 14 /* SilcAttributeObjPk */ #define SILC_ATTRIBUTE_SERVER_DIGITAL_SIGNATURE 15 /* SilcAttributeObjPk */ +#define SILC_ATTRIBUTE_USER_ICON 16 /* SilcMime */ /***/ /* Maximum length of attribute request packet */ @@ -90,7 +91,7 @@ typedef SilcUInt8 SilcAttribute; /****d* silccore/SilcAttributesAPI/SilcAttributeFlags * * NAME - * + * * typedef SilcUInt8 SilcAttributeFlags; * * DESCRIPTION @@ -110,7 +111,7 @@ typedef SilcUInt8 SilcAttributeFlags; /****d* silccore/SilcAttributesAPI/SilcAttributeMood * * NAME - * + * * typedef enum { ... } SilcAttributeMood; * * DESCRIPTION @@ -139,7 +140,7 @@ typedef enum { /****d* silccore/SilcAttributesAPI/SilcAttributeContact * * NAME - * + * * typedef enum { ... } SilcAttributeContact; * * DESCRIPTION @@ -157,13 +158,14 @@ typedef enum { SILC_ATTRIBUTE_CONTACT_SMS = 0x00000008, /* SMS preferred */ SILC_ATTRIBUTE_CONTACT_MMS = 0x00000010, /* MMS preferred */ SILC_ATTRIBUTE_CONTACT_CHAT = 0x00000020, /* chatting preferred */ + SILC_ATTRIBUTE_CONTACT_VIDEO = 0x00000040, /* video conferencing */ } SilcAttributeContact; /***/ /****d* silccore/SilcAttributesAPI/SilcAttributeDevice * * NAME - * + * * typedef enum { ... } SilcAttributeDevice; * * DESCRIPTION @@ -356,7 +358,7 @@ const unsigned char *silc_attribute_get_data(SilcAttributePayload payload, * * unsigned char * * silc_attribute_get_verify_data(SilcDList attrs, - * bool server_verification, + * SilcBool server_verification, * SilcUInt32 *data_len); * * DESCRIPTION @@ -371,7 +373,7 @@ const unsigned char *silc_attribute_get_data(SilcAttributePayload payload, * ***/ unsigned char *silc_attribute_get_verify_data(SilcDList attrs, - bool server_verification, + SilcBool server_verification, SilcUInt32 *data_len); /* Object structures */ @@ -379,7 +381,7 @@ unsigned char *silc_attribute_get_verify_data(SilcDList attrs, /****s* silccore/SilcAttributesAPI/SilcAttributeObjService * * NAME - * + * * typedef struct { ... } SilcAttributeObjService; * * DESCRIPTION @@ -388,36 +390,19 @@ unsigned char *silc_attribute_get_verify_data(SilcDList attrs, * * SOURCE */ -typedef struct { +typedef struct SilcAttributeObjServiceStruct { SilcUInt32 port; /* IANA specified service port */ + SilcUInt32 idle; /* Idle time in the service */ + char signon[64]; /* Signon date and time (UTC) */ char address[256]; /* service address */ - bool status; /* online status (TRUE present in service) */ + SilcBool status; /* online status (TRUE present in service) */ } SilcAttributeObjService; /***/ -/****s* silccore/SilcAttributesAPI/SilcAttributeObjMime - * - * NAME - * - * typedef struct { ... } SilcAttributeObjMime; - * - * DESCRIPTION - * - * Data type for MIME object as attribute. The data in the structure - * is valid as long as the payload structure is valid. - * - * SOURCE - */ -typedef struct { - const unsigned char *mime; /* MIME buffer */ - SilcUInt32 mime_len; /* length of the MIME buffer */ -} SilcAttributeObjMime; -/***/ - /****s* silccore/SilcAttributesAPI/SilcAttributeObjGeo * * NAME - * + * * typedef struct { ... } SilcAttributeObjGeo; * * DESCRIPTION @@ -427,7 +412,7 @@ typedef struct { * * SOURCE */ -typedef struct { +typedef struct SilcAttributeObjGeoStruct { char *longitude; /* Longitude */ char *latitude; /* Latitude */ char *altitude; /* Altitude */ @@ -438,7 +423,7 @@ typedef struct { /****s* silccore/SilcAttributesAPI/SilcAttributeObjDevice * * NAME - * + * * typedef struct { ... } SilcAttributeObjDevice; * * DESCRIPTION @@ -448,7 +433,7 @@ typedef struct { * * SOURCE */ -typedef struct { +typedef struct SilcAttributeObjDeviceStruct { SilcAttributeDevice type; /* device type */ char *manufacturer; /* manufacturer of the device */ char *version; /* device version string */ @@ -460,17 +445,30 @@ typedef struct { /****s* silccore/SilcAttributesAPI/SilcAttributeObjPk * * NAME - * + * * typedef struct { ... } SilcAttributeObjPk; * * DESCRIPTION * * Data type for public key, certificate or digital signatures. The - * caller must free the data inside the structure. + * caller must free the data inside the structure. The 'type' is one + * of following: "silc-rsa", "silc-dss, "ssh-rsa", "ssh-dss", + * "pgp-sign-rsa", "pgp-sign-dss", "x509v3-sign-rsa", "x509v3-sign-dss". + * See the draft-riikonen-precense-attrs draft for more detailed + * information. The 'type' is NULL when this structure includes a + * digital signature. + * + * In SILC, at least the "silc-rsa" must be supported. In this case + * the key is normal SILC Public key. To verify a signature with the + * SILC Public key, construct the signature data with the + * silc_attribute_get_verify_data and verify the signature with + * for example silc_pkcs_verify_with_hash function. The public key + * to the verification is the `data' and `data_len', and can be decoded + * with silc_pkcs_public_key_decode function. * * SOURCE */ -typedef struct { +typedef struct SilcAttributeObjPkStruct { char *type; /* public key/certificate type, NULL when contains digital signature. */ unsigned char *data; /* public key/cert/signature data. The @@ -483,9 +481,9 @@ typedef struct { * * SYNOPSIS * - * bool silc_attribute_get_object(SilcAttributePayload payload, - * void *object, - * SilcUInt32 object_size); + * SilcBool silc_attribute_get_object(SilcAttributePayload payload, + * void *object, + * SilcUInt32 object_size); * * DESCRIPTION * @@ -500,8 +498,24 @@ typedef struct { * You can use silc_attribute_get_attribute to get the SilcAttribute * type from the `payload'. * + * EXAMPLE + * + * SilcAttributeObjDevice dev; + * + * ... + * case SILC_ATTRIBUTE_DEVICE_INFO: + * memset(&dev, 0, sizeof(dev)); + * if (!silc_attribute_get_object(payload, (void *)&dev, sizeof(dev))) + * error(); + * + * case SILC_ATTRIBUTE_USER_ICON: + * mime = silc_mime_alloc(); + * if (!silc_attribute_get_object(payload, (void *)mime, sizeof(*mime))) + * error(); + * ... + * ***/ -bool silc_attribute_get_object(SilcAttributePayload payload, - void *object, SilcUInt32 object_size); +SilcBool silc_attribute_get_object(SilcAttributePayload payload, + void *object, SilcUInt32 object_size); #endif /* SILCATTRS_H */