switch (attribute) {
case SILC_ATTRIBUTE_USER_INFO:
- SILC_NOT_IMPLEMENTED("SILC_ATTRIBUTE_USER_INFO");
+ {
+ SilcVCard vcard = object;
+ if (object_size != sizeof(*vcard))
+ return NULL;
+ str = silc_vcard_encode(vcard, &object_size);
+ if (!str)
+ return NULL;
+ object = str;
+ }
break;
case SILC_ATTRIBUTE_SERVICE:
SILC_STR_UI_SHORT((SilcUInt16)data_len),
SILC_STR_UI_XNSTRING(data, data_len),
SILC_STR_END);
- if (buffer)
- silc_buffer_push(buffer, buffer->data - buffer->head);
+ silc_buffer_push(buffer, buffer->data - buffer->head);
return buffer;
}
SilcUInt16 len;
bool ret = FALSE;
- if (!object || !(*object) || payload->flags & SILC_ATTRIBUTE_FLAG_INVALID)
+ if (!object || !(*object) || payload->flags & SILC_ATTRIBUTE_FLAG_INVALID)
return FALSE;
switch (payload->attribute) {
case SILC_ATTRIBUTE_USER_INFO:
- SILC_NOT_IMPLEMENTED("SILC_ATTRIBUTE_USER_INFO");
+ {
+ SilcVCard vcard = *object;
+ if (object_size != sizeof(*vcard))
+ break;
+ if (!silc_vcard_decode(payload->data, payload->data_len, vcard))
+ break;
+ ret = TRUE;
+ }
break;
case SILC_ATTRIBUTE_SERVICE:
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
+#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_SERVER_DIGITAL_SIGNATURE 15 /* SilcAttributeObjPk */
/***/
+/* Maximum length of attribute request packet */
+#define SILC_ATTRIBUTE_MAX_REQUEST_LEN (4 * 255)
+
/****d* silccore/SilcAttributesAPI/SilcAttributeFlags
*
* NAME