Added VCard support.
authorPekka Riikonen <priikone@silcnet.org>
Mon, 14 Oct 2002 16:56:07 +0000 (16:56 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Mon, 14 Oct 2002 16:56:07 +0000 (16:56 +0000)
lib/silccore/silcattrs.c
lib/silccore/silcattrs.h

index 302c17bebb2e661b45f00f055c62c81467fe2aa3..686825578687e5c64928322fd0ed5682c016cc12 100644 (file)
@@ -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:
index deb8a026b898a8738a0daa2b6a09a442424ac7a6..32c7040f417bc2e5c069337ff6c5e581fbaec61d 100644 (file)
@@ -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