comparison libpurple/protocols/msnp9/user.c @ 23123: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
23122:b30f54a72031 23123: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 {