Mercurial > pidgin
comparison libpurple/protocols/msn/user.c @ 23142:dea8b856466e
propagate from branch 'im.pidgin.pidgin.custom_smiley' (head c134ff23eba5faac09c13e731e792fa612c91a9a)
to branch 'im.pidgin.pidgin.next.minor' (head 4d2d20241c7dac5915e142f0aa9811c9eab40111)
| author | Sadrul Habib Chowdhury <imadil@gmail.com> |
|---|---|
| date | Mon, 12 May 2008 23:17:48 +0000 |
| parents | b30f54a72031 |
| children | 5cdd93dac7a2 |
comparison
equal
deleted
inserted
replaced
| 23114:d53f72735830 | 23142:dea8b856466e |
|---|---|
| 244 } | 244 } |
| 245 | 245 |
| 246 void | 246 void |
| 247 msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img) | 247 msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img) |
| 248 { | 248 { |
| 249 MsnObject *msnobj = msn_user_get_object(user); | 249 MsnObject *msnobj; |
| 250 | 250 |
| 251 g_return_if_fail(user != NULL); | 251 g_return_if_fail(user != NULL); |
| 252 | 252 |
| 253 if (img == NULL) | 253 msnobj = msn_object_new_from_image(img, "TFR2C2.tmp", |
| 254 msn_user_set_object(user, NULL); | 254 user->passport, MSN_OBJECT_USERTILE); |
| 255 else | 255 |
| 256 { | 256 if (!msnobj) |
| 257 PurpleCipherContext *ctx; | 257 purple_debug_error("msn", "Unable to open buddy icon from %s!\n", user->passport); |
| 258 char *buf; | 258 |
| 259 gconstpointer data = purple_imgstore_get_data(img); | 259 msn_user_set_object(user, msnobj); |
| 260 size_t size = purple_imgstore_get_size(img); | |
| 261 char *base64; | |
| 262 unsigned char digest[20]; | |
| 263 | |
| 264 if (msnobj == NULL) | |
| 265 { | |
| 266 msnobj = msn_object_new(); | |
| 267 msn_object_set_local(msnobj); | |
| 268 msn_object_set_type(msnobj, MSN_OBJECT_USERTILE); | |
| 269 msn_object_set_location(msnobj, "TFR2C2.tmp"); | |
| 270 msn_object_set_creator(msnobj, msn_user_get_passport(user)); | |
| 271 | |
| 272 msn_user_set_object(user, msnobj); | |
| 273 } | |
| 274 | |
| 275 msn_object_set_image(msnobj, img); | |
| 276 | |
| 277 /* Compute the SHA1D field. */ | |
| 278 memset(digest, 0, sizeof(digest)); | |
| 279 | |
| 280 ctx = purple_cipher_context_new_by_name("sha1", NULL); | |
| 281 purple_cipher_context_append(ctx, data, size); | |
| 282 purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); | |
| 283 | |
| 284 base64 = purple_base64_encode(digest, sizeof(digest)); | |
| 285 msn_object_set_sha1d(msnobj, base64); | |
| 286 g_free(base64); | |
| 287 | |
| 288 msn_object_set_size(msnobj, size); | |
| 289 | |
| 290 /* Compute the SHA1C field. */ | |
| 291 buf = g_strdup_printf( | |
| 292 "Creator%sSize%dType%dLocation%sFriendly%sSHA1D%s", | |
| 293 msn_object_get_creator(msnobj), | |
| 294 msn_object_get_size(msnobj), | |
| 295 msn_object_get_type(msnobj), | |
| 296 msn_object_get_location(msnobj), | |
| 297 msn_object_get_friendly(msnobj), | |
| 298 msn_object_get_sha1d(msnobj)); | |
| 299 | |
| 300 memset(digest, 0, sizeof(digest)); | |
| 301 | |
| 302 purple_cipher_context_reset(ctx, NULL); | |
| 303 purple_cipher_context_append(ctx, (const guchar *)buf, strlen(buf)); | |
| 304 purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); | |
| 305 purple_cipher_context_destroy(ctx); | |
| 306 g_free(buf); | |
| 307 | |
| 308 base64 = purple_base64_encode(digest, sizeof(digest)); | |
| 309 msn_object_set_sha1c(msnobj, base64); | |
| 310 g_free(base64); | |
| 311 } | |
| 312 } | 260 } |
| 313 | 261 |
| 314 /*add group id to User object*/ | 262 /*add group id to User object*/ |
| 315 void | 263 void |
| 316 msn_user_add_group_id(MsnUser *user, const char* id) | 264 msn_user_add_group_id(MsnUser *user, const char* id) |
