annotate libpurple/protocols/msn/sbconn.c @ 31253:5904070c0019

Move sending messages via SB to SBConn.
author masca@cpw.pidgin.im
date Sat, 19 Jun 2010 23:03:04 +0000
parents 07a9356ad2e0
children ead7b8c19725
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31236
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
1 #include "internal.h"
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
2
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
3 #include "msg.h"
31231
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
4 #include "sbconn.h"
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
5
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
6 /* We have received the message ack */
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
7 void
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
8 msn_sbconn_msg_ack(MsnMessage *msg, void *data)
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 MsnSlpMessage *slpmsg;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
11 long long real_size;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
12
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
13 slpmsg = data;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
14
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
15 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
16
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
17 slpmsg->offset += msg->slpmsg->header->length;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
18
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
19 slpmsg->msgs = g_list_remove(slpmsg->msgs, msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
20
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
21 if (slpmsg->offset < real_size)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
22 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
23 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
24 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
25 slpmsg->slpcall->xfer_msg = slpmsg;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
26 msn_message_ref(msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
27 purple_xfer_prpl_ready(slpmsg->slpcall->xfer);
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 msn_slplink_send_msgpart(slpmsg->slplink, slpmsg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
31 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
32 else
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
33 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
34 /* The whole message has been sent */
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
35 if (slpmsg->flags == P2P_MSN_OBJ_DATA ||
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
36 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
37 slpmsg->flags == P2P_FILE_DATA)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
38 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
39 if (slpmsg->slpcall != NULL)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
40 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
41 if (slpmsg->slpcall->cb)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
42 slpmsg->slpcall->cb(slpmsg->slpcall,
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
43 NULL, 0);
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 }
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 msn_message_unref(msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
49 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
50
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
51 /* We have received the message nak. */
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
52 void
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
53 msn_sbconn_msg_nak(MsnMessage *msg, void *data)
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
54 {
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
55 MsnSlpMessage *slpmsg;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
56
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
57 slpmsg = data;
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
58
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
59 msn_slplink_send_msgpart(slpmsg->slplink, slpmsg);
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 slpmsg->msgs = g_list_remove(slpmsg->msgs, msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
62 msn_message_unref(msg);
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
63 }
f84fb808e8ed Move MsnMessage stuff out of slplink to SBConn.
masca@cpw.pidgin.im
parents:
diff changeset
64
31233
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
65 void msn_sbconn_send_msg(MsnSlpLink *slplink, MsnMessage *msg)
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
66 {
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
67 if (slplink->swboard == NULL)
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
68 {
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
69 slplink->swboard = msn_session_get_swboard(slplink->session,
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
70 slplink->remote_user, MSN_SB_FLAG_FT);
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
71
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
72 g_return_if_fail(slplink->swboard != NULL);
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
73
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
74 /* If swboard is destroyed we will be too */
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
75 slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink);
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
76 }
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
77
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
78 msn_switchboard_send_msg(slplink->swboard, msg, TRUE);
22f26c372797 Manage sending messages trough switchboard in sbconn.
masca@cpw.pidgin.im
parents: 31231
diff changeset
79 }
31236
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
80
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
81 void msn_sbconn_send_part(MsnSlpLink *slplink, MsnSlpMessagePart *part)
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
82 {
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
83 MsnMessage *msg;
31246
07a9356ad2e0 Remove the MsnMessage from SlpMessage.
masca@cpw.pidgin.im
parents: 31236
diff changeset
84 const char *passport;
31236
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
85 char *data;
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
86 size_t size;
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
87
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
88 msg = msn_message_new_msnslp();
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
89
31246
07a9356ad2e0 Remove the MsnMessage from SlpMessage.
masca@cpw.pidgin.im
parents: 31236
diff changeset
90 passport = purple_normalize(slplink->session->account, slplink->remote_user);
07a9356ad2e0 Remove the MsnMessage from SlpMessage.
masca@cpw.pidgin.im
parents: 31236
diff changeset
91 msn_message_set_header(msg, "P2P-Dest", passport);
07a9356ad2e0 Remove the MsnMessage from SlpMessage.
masca@cpw.pidgin.im
parents: 31236
diff changeset
92
31236
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
93 data = msn_slpmsgpart_serialize(part, &size);
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
94 msg->part = part;
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
95
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
96 msn_message_set_bin_data(msg, data, size);
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
97
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
98 if (slplink->swboard == NULL)
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
99 {
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
100 slplink->swboard = msn_session_get_swboard(slplink->session,
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
101 slplink->remote_user, MSN_SB_FLAG_FT);
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
102
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
103 g_return_if_fail(slplink->swboard != NULL);
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
104
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
105 /* If swboard is destroyed we will be too */
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
106 slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink);
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
107 }
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
108
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
109 msn_switchboard_send_msg(slplink->swboard, msg, TRUE);
37474bb06bad Add support in SBConn to send parts instead of messages.
masca@cpw.pidgin.im
parents: 31233
diff changeset
110 }
31253
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
111
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
112 static void
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
113 release_msg(MsnSwitchBoard *swboard, MsnMessage *msg)
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
114 {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
115 MsnCmdProc *cmdproc;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
116 MsnTransaction *trans;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
117 char *payload;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
118 gsize payload_len;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
119 char flag;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
120
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
121 g_return_if_fail(swboard != NULL);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
122 g_return_if_fail(msg != NULL);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
123
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
124 cmdproc = swboard->cmdproc;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
125
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
126 payload = msn_message_gen_payload(msg, &payload_len);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
127
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
128 if (purple_debug_is_verbose()) {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
129 purple_debug_info("msn", "SB length:{%" G_GSIZE_FORMAT "}\n", payload_len);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
130 msn_message_show_readable(msg, "SB SEND", FALSE);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
131 }
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
132
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
133 flag = msn_message_get_flag(msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
134 trans = msn_transaction_new(cmdproc, "MSG", "%c %" G_GSIZE_FORMAT,
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
135 flag, payload_len);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
136
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
137 /* Data for callbacks */
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
138 msn_transaction_set_data(trans, msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
139
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
140 if (flag != 'U') {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
141 if (msg->type == MSN_MSG_TEXT)
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
142 {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
143 msg->ack_ref = TRUE;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
144 msn_message_ref(msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
145 swboard->ack_list = g_list_append(swboard->ack_list, msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
146 msn_transaction_set_timeout_cb(trans, msg_timeout);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
147 }
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
148 else if (msg->type == MSN_MSG_SLP)
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
149 {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
150 msg->ack_ref = TRUE;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
151 msn_message_ref(msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
152 swboard->ack_list = g_list_append(swboard->ack_list, msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
153 msn_transaction_set_timeout_cb(trans, msg_timeout);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
154 #if 0
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
155 if (msg->ack_cb != NULL)
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
156 {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
157 msn_transaction_add_cb(trans, "ACK", msg_ack);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
158 msn_transaction_add_cb(trans, "NAK", msg_nak);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
159 }
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
160 #endif
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
161 }
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
162 }
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
163
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
164 trans->payload = payload;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
165 trans->payload_len = payload_len;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
166
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
167 msg->trans = trans;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
168
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
169 msn_cmdproc_send_trans(cmdproc, trans);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
170 }
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
171
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
172 static void
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
173 queue_msg(MsnSwitchBoard *swboard, MsnMessage *msg)
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
174 {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
175 g_return_if_fail(swboard != NULL);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
176 g_return_if_fail(msg != NULL);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
177
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
178 purple_debug_info("msn", "Appending message to queue.\n");
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
179
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
180 g_queue_push_tail(swboard->msg_queue, msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
181
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
182 msn_message_ref(msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
183 }
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
184
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
185 static void
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
186 process_queue(MsnSwitchBoard *swboard)
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
187 {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
188 MsnMessage *msg;
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
189
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
190 g_return_if_fail(swboard != NULL);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
191
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
192 purple_debug_info("msn", "Processing queue\n");
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
193
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
194 while ((msg = g_queue_pop_head(swboard->msg_queue)) != NULL)
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
195 {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
196 purple_debug_info("msn", "Sending message\n");
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
197 release_msg(swboard, msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
198 msn_message_unref(msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
199 }
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
200 }
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
201
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
202 void
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
203 msn_switchboard_send_msg(MsnSwitchBoard *swboard, MsnMessage *msg,
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
204 gboolean queue)
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
205 {
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
206 g_return_if_fail(swboard != NULL);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
207 g_return_if_fail(msg != NULL);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
208
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
209 purple_debug_info("msn", "switchboard send msg..\n");
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
210 if (msn_switchboard_can_send(swboard))
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
211 release_msg(swboard, msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
212 else if (queue)
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
213 queue_msg(swboard, msg);
5904070c0019 Move sending messages via SB to SBConn.
masca@cpw.pidgin.im
parents: 31246
diff changeset
214 }