comparison libpurple/protocols/msn/slplink.c @ 30793:f84fb808e8ed

Move MsnMessage stuff out of slplink to SBConn.
author masca@cpw.pidgin.im
date Tue, 15 Jun 2010 00:42:05 +0000
parents 9192c59f2f84
children 4481d04cda70
comparison
equal deleted inserted replaced
30792:9192c59f2f84 30793:f84fb808e8ed
26 #include "debug.h" 26 #include "debug.h"
27 27
28 #include "msn.h" 28 #include "msn.h"
29 #include "slplink.h" 29 #include "slplink.h"
30 30
31 #include "sbconn.h"
31 #include "switchboard.h" 32 #include "switchboard.h"
32 #include "slp.h" 33 #include "slp.h"
33 #include "p2p.h" 34 #include "p2p.h"
34 35
35 #ifdef MSN_DEBUG_SLP_FILES 36 #ifdef MSN_DEBUG_SLP_FILES
349 } 350 }
350 351
351 /* slpmsg->offset += len; */ 352 /* slpmsg->offset += len; */
352 } 353 }
353 354
354 /* We have received the message ack */
355 static void
356 msg_ack(MsnMessage *msg, void *data)
357 {
358 MsnSlpMessage *slpmsg;
359 long long real_size;
360
361 slpmsg = data;
362
363 real_size = (slpmsg->flags == P2P_ACK) ? 0 : slpmsg->size;
364
365 slpmsg->offset += msg->slpmsg->header->length;
366
367 slpmsg->msgs = g_list_remove(slpmsg->msgs, msg);
368
369 if (slpmsg->offset < real_size)
370 {
371 if (slpmsg->slpcall->xfer && purple_xfer_get_status(slpmsg->slpcall->xfer) == PURPLE_XFER_STATUS_STARTED)
372 {
373 slpmsg->slpcall->xfer_msg = slpmsg;
374 msn_message_ref(msg);
375 purple_xfer_prpl_ready(slpmsg->slpcall->xfer);
376 }
377 else
378 msn_slplink_send_msgpart(slpmsg->slplink, slpmsg);
379 }
380 else
381 {
382 /* The whole message has been sent */
383 if (slpmsg->flags == P2P_MSN_OBJ_DATA ||
384 slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) ||
385 slpmsg->flags == P2P_FILE_DATA)
386 {
387 if (slpmsg->slpcall != NULL)
388 {
389 if (slpmsg->slpcall->cb)
390 slpmsg->slpcall->cb(slpmsg->slpcall,
391 NULL, 0);
392 }
393 }
394 }
395
396 msn_message_unref(msg);
397 }
398
399 /* We have received the message nak. */
400 static void
401 msg_nak(MsnMessage *msg, void *data)
402 {
403 MsnSlpMessage *slpmsg;
404
405 slpmsg = data;
406
407 msn_slplink_send_msgpart(slpmsg->slplink, slpmsg);
408
409 slpmsg->msgs = g_list_remove(slpmsg->msgs, msg);
410 msn_message_unref(msg);
411 }
412
413 static void 355 static void
414 msn_slplink_release_slpmsg(MsnSlpLink *slplink, MsnSlpMessage *slpmsg) 356 msn_slplink_release_slpmsg(MsnSlpLink *slplink, MsnSlpMessage *slpmsg)
415 { 357 {
416 MsnMessage *msg; 358 MsnMessage *msg;
417 const char *passport; 359 const char *passport;
459 msg->slpmsg->header->total_size = slpmsg->size; 401 msg->slpmsg->header->total_size = slpmsg->size;
460 402
461 passport = purple_normalize(slplink->session->account, slplink->remote_user); 403 passport = purple_normalize(slplink->session->account, slplink->remote_user);
462 msn_message_set_header(msg, "P2P-Dest", passport); 404 msn_message_set_header(msg, "P2P-Dest", passport);
463 405
464 msg->ack_cb = msg_ack; 406 msg->ack_cb = msn_sbconn_msg_ack;
465 msg->nak_cb = msg_nak; 407 msg->nak_cb = msn_sbconn_msg_nak;
466 msg->ack_data = slpmsg; 408 msg->ack_data = slpmsg;
467 409
468 msn_slplink_send_msgpart(slplink, slpmsg); 410 msn_slplink_send_msgpart(slplink, slpmsg);
469 411
470 msn_message_destroy(msg); 412 msn_message_destroy(msg);