Mercurial > pidgin.yaz
comparison 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 |
comparison
equal
deleted
inserted
replaced
31252:358abb453add | 31253:5904070c0019 |
---|---|
106 slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink); | 106 slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink); |
107 } | 107 } |
108 | 108 |
109 msn_switchboard_send_msg(slplink->swboard, msg, TRUE); | 109 msn_switchboard_send_msg(slplink->swboard, msg, TRUE); |
110 } | 110 } |
111 | |
112 static void | |
113 release_msg(MsnSwitchBoard *swboard, MsnMessage *msg) | |
114 { | |
115 MsnCmdProc *cmdproc; | |
116 MsnTransaction *trans; | |
117 char *payload; | |
118 gsize payload_len; | |
119 char flag; | |
120 | |
121 g_return_if_fail(swboard != NULL); | |
122 g_return_if_fail(msg != NULL); | |
123 | |
124 cmdproc = swboard->cmdproc; | |
125 | |
126 payload = msn_message_gen_payload(msg, &payload_len); | |
127 | |
128 if (purple_debug_is_verbose()) { | |
129 purple_debug_info("msn", "SB length:{%" G_GSIZE_FORMAT "}\n", payload_len); | |
130 msn_message_show_readable(msg, "SB SEND", FALSE); | |
131 } | |
132 | |
133 flag = msn_message_get_flag(msg); | |
134 trans = msn_transaction_new(cmdproc, "MSG", "%c %" G_GSIZE_FORMAT, | |
135 flag, payload_len); | |
136 | |
137 /* Data for callbacks */ | |
138 msn_transaction_set_data(trans, msg); | |
139 | |
140 if (flag != 'U') { | |
141 if (msg->type == MSN_MSG_TEXT) | |
142 { | |
143 msg->ack_ref = TRUE; | |
144 msn_message_ref(msg); | |
145 swboard->ack_list = g_list_append(swboard->ack_list, msg); | |
146 msn_transaction_set_timeout_cb(trans, msg_timeout); | |
147 } | |
148 else if (msg->type == MSN_MSG_SLP) | |
149 { | |
150 msg->ack_ref = TRUE; | |
151 msn_message_ref(msg); | |
152 swboard->ack_list = g_list_append(swboard->ack_list, msg); | |
153 msn_transaction_set_timeout_cb(trans, msg_timeout); | |
154 #if 0 | |
155 if (msg->ack_cb != NULL) | |
156 { | |
157 msn_transaction_add_cb(trans, "ACK", msg_ack); | |
158 msn_transaction_add_cb(trans, "NAK", msg_nak); | |
159 } | |
160 #endif | |
161 } | |
162 } | |
163 | |
164 trans->payload = payload; | |
165 trans->payload_len = payload_len; | |
166 | |
167 msg->trans = trans; | |
168 | |
169 msn_cmdproc_send_trans(cmdproc, trans); | |
170 } | |
171 | |
172 static void | |
173 queue_msg(MsnSwitchBoard *swboard, MsnMessage *msg) | |
174 { | |
175 g_return_if_fail(swboard != NULL); | |
176 g_return_if_fail(msg != NULL); | |
177 | |
178 purple_debug_info("msn", "Appending message to queue.\n"); | |
179 | |
180 g_queue_push_tail(swboard->msg_queue, msg); | |
181 | |
182 msn_message_ref(msg); | |
183 } | |
184 | |
185 static void | |
186 process_queue(MsnSwitchBoard *swboard) | |
187 { | |
188 MsnMessage *msg; | |
189 | |
190 g_return_if_fail(swboard != NULL); | |
191 | |
192 purple_debug_info("msn", "Processing queue\n"); | |
193 | |
194 while ((msg = g_queue_pop_head(swboard->msg_queue)) != NULL) | |
195 { | |
196 purple_debug_info("msn", "Sending message\n"); | |
197 release_msg(swboard, msg); | |
198 msn_message_unref(msg); | |
199 } | |
200 } | |
201 | |
202 void | |
203 msn_switchboard_send_msg(MsnSwitchBoard *swboard, MsnMessage *msg, | |
204 gboolean queue) | |
205 { | |
206 g_return_if_fail(swboard != NULL); | |
207 g_return_if_fail(msg != NULL); | |
208 | |
209 purple_debug_info("msn", "switchboard send msg..\n"); | |
210 if (msn_switchboard_can_send(swboard)) | |
211 release_msg(swboard, msg); | |
212 else if (queue) | |
213 queue_msg(swboard, msg); | |
214 } |