Mercurial > pidgin.yaz
comparison libpurple/protocols/msnp9/user.c @ 23125:981a0bfc3d9d
Update patch to add support for sending custom smileys in msnp9. I included some fixes from the msnp14 patch that were not corrected in the patch, and also the fix for setting buddyicons. References #1187.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Mon, 31 Mar 2008 21:23:57 +0000 |
parents | 5ffb0b5f785f |
children |
comparison
equal
deleted
inserted
replaced
23124:b30f54a72031 | 23125:981a0bfc3d9d |
---|---|
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 { |