--- a/libpurple/protocols/msn/object.c Tue Aug 10 18:01:01 2010 +0000 +++ b/libpurple/protocols/msn/object.c Wed Sep 15 17:34:21 2010 +0000 @@ -96,15 +96,29 @@ GET_STRING_TAG(friendly, "Friendly"); GET_STRING_TAG(sha1d, "SHA1D"); GET_STRING_TAG(sha1c, "SHA1C"); + GET_STRING_TAG(url, "Url"); + GET_STRING_TAG(url1, "Url1"); /* If we are missing any of the required elements then discard the object */ - /* SHA1C is not always sent anymore */ if (obj->creator == NULL || obj->size == 0 || obj->type == 0 - || obj->location == NULL || obj->friendly == NULL - || obj->sha1d == NULL /*|| obj->sha1c == NULL*/) { + || obj->sha1d == NULL) { purple_debug_error("msn", "Discarding invalid msnobj: '%s'\n", str); msn_object_destroy(obj); - obj = NULL; + return NULL; + } + + if (obj->location == NULL || obj->friendly == NULL) { + /* Location/friendly are required for non-buddyicon objects */ + if (obj->type != MSN_OBJECT_USERTILE) { + purple_debug_error("msn", "Discarding invalid msnobj: '%s'\n", str); + msn_object_destroy(obj); + return NULL; + /* Buddy icon object can contain Url/Url1 instead */ + } else if (obj->url == NULL || obj->url1 == NULL) { + purple_debug_error("msn", "Discarding invalid msnobj: '%s'\n", str); + msn_object_destroy(obj); + return NULL; + } } return obj; @@ -284,6 +298,24 @@ obj->sha1c = g_strdup(sha1c); } +void +msn_object_set_url(MsnObject *obj, const char *url) +{ + g_return_if_fail(obj != NULL); + + g_free(obj->url); + obj->url = g_strdup(url); +} + +void +msn_object_set_url1(MsnObject *obj, const char *url) +{ + g_return_if_fail(obj != NULL); + + g_free(obj->url1); + obj->url1 = g_strdup(url); +} + const char * msn_object_get_creator(const MsnObject *obj) { @@ -352,6 +384,22 @@ } } +const char * +msn_object_get_url(const MsnObject *obj) +{ + g_return_val_if_fail(obj != NULL, NULL); + + return obj->url; +} + +const char * +msn_object_get_url1(const MsnObject *obj) +{ + g_return_val_if_fail(obj != NULL, NULL); + + return obj->url1; +} + MsnObject * msn_object_find_local(const char *sha1) {