| 69 |
69 |
| 70 return dest; |
70 return dest; |
| 71 } |
71 } |
| 72 |
72 |
| 73 static gboolean |
73 static gboolean |
| 74 __get_buddy_icon_info(struct gaim_account *account, char **base64, |
74 __get_buddy_icon_info(GaimAccount *account, char **base64, |
| 75 char **md5sum, int *file_size, int *base64_size) |
75 char **md5sum, int *file_size, int *base64_size) |
| 76 { |
76 { |
| 77 FILE *fp; |
77 FILE *fp; |
| 78 struct stat sb; |
78 struct stat sb; |
| 79 md5_state_t st; |
79 md5_state_t st; |
| 80 md5_byte_t di[16]; |
80 md5_byte_t di[16]; |
| |
81 const char *icon; |
| 81 |
82 |
| 82 if (base64 != NULL) *base64 = NULL; |
83 if (base64 != NULL) *base64 = NULL; |
| 83 if (md5sum != NULL) *md5sum = NULL; |
84 if (md5sum != NULL) *md5sum = NULL; |
| 84 if (file_size != NULL) *file_size = 0; |
85 if (file_size != NULL) *file_size = 0; |
| 85 if (base64_size != NULL) *base64_size = 0; |
86 if (base64_size != NULL) *base64_size = 0; |
| 86 |
87 |
| 87 if (!stat(account->iconfile, &sb)) { |
88 icon = gaim_account_get_buddy_icon(account); |
| |
89 |
| |
90 if (!stat(icon, &sb)) { |
| 88 if (file_size != NULL) |
91 if (file_size != NULL) |
| 89 *file_size = sb.st_size; |
92 *file_size = sb.st_size; |
| 90 |
93 |
| 91 if ((fp = fopen(account->iconfile, "rb")) != NULL) { |
94 if ((fp = fopen(icon, "rb")) != NULL) { |
| 92 char *buf = g_malloc(sb.st_size + 1); |
95 char *buf = g_malloc(sb.st_size + 1); |
| 93 char *temp; |
96 char *temp; |
| 94 |
97 |
| 95 fread(buf, 1, sb.st_size, fp); |
98 fread(buf, 1, sb.st_size, fp); |
| 96 |
99 |
| 138 } |
141 } |
| 139 |
142 |
| 140 static gboolean |
143 static gboolean |
| 141 __send_icon_data(MsnSwitchBoard *swboard, MsnBuddyIconXfer *buddyicon) |
144 __send_icon_data(MsnSwitchBoard *swboard, MsnBuddyIconXfer *buddyicon) |
| 142 { |
145 { |
| 143 struct gaim_connection *gc = swboard->servconn->session->account->gc; |
146 GaimConnection *gc = swboard->servconn->session->account->gc; |
| 144 char buf[MSN_BUF_LEN]; |
147 char buf[MSN_BUF_LEN]; |
| 145 MsnMessage *msg; |
148 MsnMessage *msg; |
| 146 int len; |
149 int len; |
| 147 |
150 |
| 148 len = MIN(PACKET_LENGTH - 4, |
151 len = MIN(PACKET_LENGTH - 4, |
| 164 msn_message_destroy(msg); |
167 msn_message_destroy(msg); |
| 165 |
168 |
| 166 msn_buddy_icon_xfer_destroy(swboard->buddy_icon_xfer); |
169 msn_buddy_icon_xfer_destroy(swboard->buddy_icon_xfer); |
| 167 swboard->buddy_icon_xfer = NULL; |
170 swboard->buddy_icon_xfer = NULL; |
| 168 |
171 |
| 169 hide_login_progress(gc, _("Write error")); |
172 gaim_connection_error(gc, _("Write error")); |
| 170 signoff(gc); |
|
| 171 |
173 |
| 172 return FALSE; |
174 return FALSE; |
| 173 } |
175 } |
| 174 |
176 |
| 175 msn_message_destroy(msg); |
177 msn_message_destroy(msg); |
| 196 |
198 |
| 197 static gboolean |
199 static gboolean |
| 198 __process_invite(MsnServConn *servconn, const MsnMessage *msg) |
200 __process_invite(MsnServConn *servconn, const MsnMessage *msg) |
| 199 { |
201 { |
| 200 MsnSession *session = servconn->session; |
202 MsnSession *session = servconn->session; |
| 201 struct gaim_connection *gc = session->account->gc; |
203 GaimConnection *gc = session->account->gc; |
| 202 MsnMessage *new_msg; |
204 MsnMessage *new_msg; |
| 203 MsnSwitchBoard *swboard; |
205 MsnSwitchBoard *swboard; |
| 204 MsnBuddyIconXfer *buddyicon; |
206 MsnBuddyIconXfer *buddyicon; |
| 205 struct buddy *b; |
207 struct buddy *b; |
| 206 GHashTable *table; |
208 GHashTable *table; |
| 275 msn_message_set_body(new_msg, "Command: REQUEST\r\n"); |
277 msn_message_set_body(new_msg, "Command: REQUEST\r\n"); |
| 276 |
278 |
| 277 if ((swboard = msn_session_open_switchboard(session)) == NULL) { |
279 if ((swboard = msn_session_open_switchboard(session)) == NULL) { |
| 278 msn_message_destroy(new_msg); |
280 msn_message_destroy(new_msg); |
| 279 |
281 |
| 280 hide_login_progress(gc, _("Write error")); |
282 gaim_connection_error(gc, _("Write error")); |
| 281 signoff(gc); |
|
| 282 |
283 |
| 283 return FALSE; |
284 return FALSE; |
| 284 } |
285 } |
| 285 |
286 |
| 286 swboard->hidden = TRUE; |
287 swboard->hidden = TRUE; |
| 324 msn_message_set_body(new_msg, "Command: CANCEL\r\n"); |
325 msn_message_set_body(new_msg, "Command: CANCEL\r\n"); |
| 325 |
326 |
| 326 if ((swboard = msn_session_open_switchboard(session)) == NULL) { |
327 if ((swboard = msn_session_open_switchboard(session)) == NULL) { |
| 327 msn_message_destroy(new_msg); |
328 msn_message_destroy(new_msg); |
| 328 |
329 |
| 329 hide_login_progress(gc, _("Write error")); |
330 gaim_connection_error(gc, _("Write error")); |
| 330 signoff(gc); |
|
| 331 |
331 |
| 332 return FALSE; |
332 return FALSE; |
| 333 } |
333 } |
| 334 |
334 |
| 335 swboard->hidden = TRUE; |
335 swboard->hidden = TRUE; |
| 430 msn_message_destroy(ack_msg); |
430 msn_message_destroy(ack_msg); |
| 431 |
431 |
| 432 msn_buddy_icon_xfer_destroy(swboard->buddy_icon_xfer); |
432 msn_buddy_icon_xfer_destroy(swboard->buddy_icon_xfer); |
| 433 swboard->buddy_icon_xfer = NULL; |
433 swboard->buddy_icon_xfer = NULL; |
| 434 |
434 |
| 435 hide_login_progress(gc, _("Write error")); |
435 gaim_connection_error(gc, _("Write error")); |
| 436 signoff(gc); |
|
| 437 |
436 |
| 438 return FALSE; |
437 return FALSE; |
| 439 } |
438 } |
| 440 |
439 |
| 441 msn_message_destroy(ack_msg); |
440 msn_message_destroy(ack_msg); |
| 473 } |
472 } |
| 474 |
473 |
| 475 void |
474 void |
| 476 msn_buddy_icon_invite(MsnSwitchBoard *swboard) |
475 msn_buddy_icon_invite(MsnSwitchBoard *swboard) |
| 477 { |
476 { |
| 478 struct gaim_account *account = swboard->servconn->session->account; |
477 GaimAccount *account = swboard->servconn->session->account; |
| 479 struct gaim_connection *gc = account->gc; |
478 GaimConnection *gc = account->gc; |
| 480 MsnMessage *msg; |
479 MsnMessage *msg; |
| 481 char buf[MSN_BUF_LEN]; |
480 char buf[MSN_BUF_LEN]; |
| 482 char *md5sum; |
481 char *md5sum; |
| 483 int file_size, base64_size; |
482 int file_size, base64_size; |
| 484 |
483 |
| 485 g_return_if_fail(swboard != NULL); |
484 g_return_if_fail(swboard != NULL); |
| 486 |
485 |
| 487 if (*account->iconfile == '\0') |
486 if (gaim_account_get_buddy_icon(account) == NULL) |
| 488 return; /* We don't have an icon to send. */ |
487 return; /* We don't have an icon to send. */ |
| 489 |
488 |
| 490 if (!__get_buddy_icon_info(account, NULL, &md5sum, |
489 if (!__get_buddy_icon_info(account, NULL, &md5sum, |
| 491 &file_size, &base64_size)) { |
490 &file_size, &base64_size)) { |
| 492 return; |
491 return; |
| 517 msn_message_set_body(msg, buf); |
516 msn_message_set_body(msg, buf); |
| 518 |
517 |
| 519 if (!msn_switchboard_send_msg(swboard, msg)) { |
518 if (!msn_switchboard_send_msg(swboard, msg)) { |
| 520 msn_message_destroy(msg); |
519 msn_message_destroy(msg); |
| 521 |
520 |
| 522 hide_login_progress(gc, _("Write error")); |
521 gaim_connection_error(gc, _("Write error")); |
| 523 signoff(gc); |
|
| 524 |
522 |
| 525 return; |
523 return; |
| 526 } |
524 } |
| 527 |
525 |
| 528 msn_message_destroy(msg); |
526 msn_message_destroy(msg); |