From 012aca01f6c1613bd77fcc87df681475b89a883d Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Mon, 14 Oct 2002 16:56:07 +0000 Subject: [PATCH] Added VCard support. --- lib/silccore/silcattrs.c | 24 +++++++++++++++++++----- lib/silccore/silcattrs.h | 5 ++++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/silccore/silcattrs.c b/lib/silccore/silcattrs.c index 302c17be..68682557 100644 --- a/lib/silccore/silcattrs.c +++ b/lib/silccore/silcattrs.c @@ -56,7 +56,15 @@ silc_attribute_payload_encode_int(SilcAttribute attribute, 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: @@ -333,8 +341,7 @@ SilcBuffer silc_attribute_payload_encode_data(SilcBuffer attrs, 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; } @@ -394,12 +401,19 @@ bool silc_attribute_get_object(SilcAttributePayload payload, 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: diff --git a/lib/silccore/silcattrs.h b/lib/silccore/silcattrs.h index deb8a026..32c7040f 100644 --- a/lib/silccore/silcattrs.h +++ b/lib/silccore/silcattrs.h @@ -67,7 +67,7 @@ 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 +#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) */ @@ -84,6 +84,9 @@ typedef SilcUInt8 SilcAttribute; #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 -- 2.43.0