Mercurial > pidgin
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 |
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 } |