comparison libpurple/protocols/msn/user.c @ 23124:b30f54a72031

propagate from branch 'im.pidgin.pidgin' (head 8ab7bcf180c3d8cc09b9d82060417bcf3fcfff95) to branch 'im.pidgin.pidgin.custom_smiley' (head aeaf4e99a407c48978426a7866b921b380471dad)
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Mon, 31 Mar 2008 21:04:51 +0000
parents 1168dc635ac1 b65997110933
children 5cdd93dac7a2
comparison
equal deleted inserted replaced
22578:0998ae2e4838 23124:b30f54a72031
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)