Mercurial > pidgin
comparison libpurple/protocols/msnp9/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 | 981a0bfc3d9d |
| children |
comparison
equal
deleted
inserted
replaced
| 23114:d53f72735830 | 23142:dea8b856466e |
|---|---|
| 151 } | 151 } |
| 152 | 152 |
| 153 void | 153 void |
| 154 msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img) | 154 msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img) |
| 155 { | 155 { |
| 156 MsnObject *msnobj = msn_user_get_object(user); | 156 MsnObject *msnobj = NULL; |
| 157 | 157 |
| 158 g_return_if_fail(user != NULL); | 158 g_return_if_fail(user != NULL); |
| 159 | 159 |
| 160 if (img == NULL) | 160 msnobj = msn_object_new_from_image(img, "TFR2C2.tmp", |
| 161 msn_user_set_object(user, NULL); | 161 user->passport, MSN_OBJECT_USERTILE); |
| 162 else | 162 |
| 163 { | 163 if(!msnobj) |
| 164 PurpleCipherContext *ctx; | 164 purple_debug_error("msn", "Unable to open buddy icon from %s!\n", user->passport); |
| 165 char *buf; | 165 |
| 166 gconstpointer data = purple_imgstore_get_data(img); | 166 msn_user_set_object(user, msnobj); |
| 167 size_t size = purple_imgstore_get_size(img); | |
| 168 char *base64; | |
| 169 unsigned char digest[20]; | |
| 170 | |
| 171 if (msnobj == NULL) | |
| 172 { | |
| 173 msnobj = msn_object_new(); | |
| 174 msn_object_set_local(msnobj); | |
| 175 msn_object_set_type(msnobj, MSN_OBJECT_USERTILE); | |
| 176 msn_object_set_location(msnobj, "TFR2C2.tmp"); | |
| 177 msn_object_set_creator(msnobj, msn_user_get_passport(user)); | |
| 178 | |
| 179 msn_user_set_object(user, msnobj); | |
| 180 } | |
| 181 | |
| 182 msn_object_set_image(msnobj, img); | |
| 183 | |
| 184 /* Compute the SHA1D field. */ | |
| 185 memset(digest, 0, sizeof(digest)); | |
| 186 | |
| 187 ctx = purple_cipher_context_new_by_name("sha1", NULL); | |
| 188 purple_cipher_context_append(ctx, data, size); | |
| 189 purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); | |
| 190 | |
| 191 base64 = purple_base64_encode(digest, sizeof(digest)); | |
| 192 msn_object_set_sha1d(msnobj, base64); | |
| 193 g_free(base64); | |
| 194 | |
| 195 msn_object_set_size(msnobj, size); | |
| 196 | |
| 197 /* Compute the SHA1C field. */ | |
| 198 buf = g_strdup_printf( | |
| 199 "Creator%sSize%dType%dLocation%sFriendly%sSHA1D%s", | |
| 200 msn_object_get_creator(msnobj), | |
| 201 msn_object_get_size(msnobj), | |
| 202 msn_object_get_type(msnobj), | |
| 203 msn_object_get_location(msnobj), | |
| 204 msn_object_get_friendly(msnobj), | |
| 205 msn_object_get_sha1d(msnobj)); | |
| 206 | |
| 207 memset(digest, 0, sizeof(digest)); | |
| 208 | |
| 209 purple_cipher_context_reset(ctx, NULL); | |
| 210 purple_cipher_context_append(ctx, (const guchar *)buf, strlen(buf)); | |
| 211 purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); | |
| 212 purple_cipher_context_destroy(ctx); | |
| 213 g_free(buf); | |
| 214 | |
| 215 base64 = purple_base64_encode(digest, sizeof(digest)); | |
| 216 msn_object_set_sha1c(msnobj, base64); | |
| 217 g_free(base64); | |
| 218 } | |
| 219 } | 167 } |
| 220 | 168 |
| 221 void | 169 void |
| 222 msn_user_add_group_id(MsnUser *user, int id) | 170 msn_user_add_group_id(MsnUser *user, int id) |
| 223 { | 171 { |
