annotate libpurple/protocols/msn/sbconn.c @ 30795:22f26c372797

Manage sending messages trough switchboard in sbconn.
author masca@cpw.pidgin.im
date Tue, 15 Jun 2010 21:21:24 +0000
parents f84fb808e8ed
children 37474bb06bad
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30793
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
1 #include "sbconn.h"
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
2
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
3 /* We have received the message ack */
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
4 void
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
5 msn_sbconn_msg_ack(MsnMessage *msg, void *data)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
6 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
7 MsnSlpMessage *slpmsg;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
8 long long real_size;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
9
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
10 slpmsg = data;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
11
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
12 real_size = (slpmsg->flags == P2P_ACK) ? 0 : slpmsg->size;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
13
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
14 slpmsg->offset += msg->slpmsg->header->length;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
15
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
16 slpmsg->msgs = g_list_remove(slpmsg->msgs, msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
17
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
18 if (slpmsg->offset < real_size)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
19 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
20 if (slpmsg->slpcall->xfer && purple_xfer_get_status(slpmsg->slpcall->xfer) == PURPLE_XFER_STATUS_STARTED)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
21 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
22 slpmsg->slpcall->xfer_msg = slpmsg;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
23 msn_message_ref(msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
24 purple_xfer_prpl_ready(slpmsg->slpcall->xfer);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
25 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
26 else
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
27 msn_slplink_send_msgpart(slpmsg->slplink, slpmsg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
28 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
29 else
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
30 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
31 /* The whole message has been sent */
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
32 if (slpmsg->flags == P2P_MSN_OBJ_DATA ||
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
33 slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) ||
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
34 slpmsg->flags == P2P_FILE_DATA)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
35 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
36 if (slpmsg->slpcall != NULL)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
37 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
38 if (slpmsg->slpcall->cb)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
39 slpmsg->slpcall->cb(slpmsg->slpcall,
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
40 NULL, 0);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
41 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
42 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
43 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
44
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
45 msn_message_unref(msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
46 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
47
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
48 /* We have received the message nak. */
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
49 void
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
50 msn_sbconn_msg_nak(MsnMessage *msg, void *data)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
51 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
52 MsnSlpMessage *slpmsg;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
53
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
54 slpmsg = data;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
55
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
56 msn_slplink_send_msgpart(slpmsg->slplink, slpmsg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
57
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
58 slpmsg->msgs = g_list_remove(slpmsg->msgs, msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
59 msn_message_unref(msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
60 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
61
30795
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
62 void msn_sbconn_send_msg(MsnSlpLink *slplink, MsnMessage *msg)
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
63 {
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
64 if (slplink->swboard == NULL)
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
65 {
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
66 slplink->swboard = msn_session_get_swboard(slplink->session,
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
67 slplink->remote_user, MSN_SB_FLAG_FT);
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
68
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
69 g_return_if_fail(slplink->swboard != NULL);
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
70
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
71 /* If swboard is destroyed we will be too */
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
72 slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink);
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
73 }
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
74
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
75 msn_switchboard_send_msg(slplink->swboard, msg, TRUE);
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 30793
diff changeset
76 }