/*
- silcattrs.h
+ silcattrs.h
Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 2002 Pekka Riikonen
+ Copyright (C) 2002 - 2007 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
/****s* silccore/SilcAttributesAPI/SilcAttributePayload
*
* NAME
- *
+ *
* typedef struct SilcAttributePayloadStruct *SilcAttributePayload;
*
* DESCRIPTION
/****d* silccore/SilcAttributesAPI/SilcAttribute
*
* NAME
- *
+ *
* typedef SilcUInt8 SilcAttribute;
*
* DESCRIPTION
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 */
+#define SILC_ATTRIBUTE_PHONE_NUMBER 17 /* SilcAttributeObjPN */
/***/
/* Maximum length of attribute request packet */
/****d* silccore/SilcAttributesAPI/SilcAttributeFlags
*
* NAME
- *
+ *
* typedef SilcUInt8 SilcAttributeFlags;
*
* DESCRIPTION
/****d* silccore/SilcAttributesAPI/SilcAttributeMood
*
* NAME
- *
+ *
* typedef enum { ... } SilcAttributeMood;
*
* DESCRIPTION
/****d* silccore/SilcAttributesAPI/SilcAttributeContact
*
* NAME
- *
+ *
* typedef enum { ... } SilcAttributeContact;
*
* DESCRIPTION
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
} SilcAttributeDevice;
/***/
+/****d* silccore/SilcAttributesAPI/SilcAttributePNFormat
+ *
+ * NAME
+ *
+ * typedef enum { ... } SilcAttributePNFormat;
+ *
+ * DESCRIPTION
+ *
+ * The defined phone number formats.
+ *
+ * SOURCE
+ */
+typedef enum {
+ SILC_ATTRIBUTE_NUMBER_ITU_E164 = 0, /* ITU E.164 */
+ SILC_ATTRIBUTE_NUMBER_ITU_E123 = 1, /* ITU E.123 */
+ SILC_ATTRIBUTE_NUMBER_ENUM = 2, /* ENUM, RFC 3761 */
+} SilcAttributePNFormat;
+/***/
+
/****f* silccore/SilcAttributesAPI/silc_attribute_payload_alloc
*
* SYNOPSIS
*
* unsigned char *
* silc_attribute_get_verify_data(SilcDList attrs,
- * bool server_verification,
+ * SilcBool server_verification,
* SilcUInt32 *data_len);
*
* DESCRIPTION
*
***/
unsigned char *silc_attribute_get_verify_data(SilcDList attrs,
- bool server_verification,
+ SilcBool server_verification,
SilcUInt32 *data_len);
/* Object structures */
/****s* silccore/SilcAttributesAPI/SilcAttributeObjService
*
* NAME
- *
+ *
* typedef struct { ... } SilcAttributeObjService;
*
* DESCRIPTION
*
* 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
*
* SOURCE
*/
-typedef struct {
+typedef struct SilcAttributeObjGeoStruct {
char *longitude; /* Longitude */
char *latitude; /* Latitude */
char *altitude; /* Altitude */
/****s* silccore/SilcAttributesAPI/SilcAttributeObjDevice
*
* NAME
- *
+ *
* typedef struct { ... } SilcAttributeObjDevice;
*
* DESCRIPTION
*
* SOURCE
*/
-typedef struct {
+typedef struct SilcAttributeObjDeviceStruct {
SilcAttributeDevice type; /* device type */
char *manufacturer; /* manufacturer of the device */
char *version; /* device version string */
/****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".
+ * 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
} SilcAttributeObjPk;
/***/
+/****s* silccore/SilcAttributesAPI/SilcAttributeObjPN
+ *
+ * NAME
+ *
+ * typedef struct { ... } SilcAttributeObjPN;
+ *
+ * DESCRIPTION
+ *
+ * SILC_ATTRIBUTE_PHONE_NUMBER type object. The caller must free the
+ * phone number string inside the structure.
+ *
+ * SOURCE
+ */
+typedef struct SilcAttributeObjPNStruct {
+ SilcAttributePNFormat format; /* Phone number format */
+ char *number; /* Phone number */
+} SilcAttributeObjPN;
+/***/
+
/****f* silccore/SilcAttributesAPI/silc_attribute_get_object
*
* 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
*
* 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 */