libpurple/protocols/msn/sbconn.c

Tue, 22 Jun 2010 22:44:28 +0000

author
Jorge Villaseñor <masca@cpw.pidgin.im>
date
Tue, 22 Jun 2010 22:44:28 +0000
branch
soc.2010.msn-tlc
changeset 31025
17ce2e75854d
parent 31020
c1266a6b7745
child 31027
3fef5c990190
permissions
-rw-r--r--

Destroy Parts when the SlpMessage is destroyed.

31000
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
1 #include "internal.h"
31020
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
2 #include "debug.h"
31000
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
3
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
4 #include "msg.h"
30995
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
5 #include "sbconn.h"
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
6
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
7 /* We have received the message ack */
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
8 void
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
9 msn_sbconn_msg_ack(MsnMessage *msg, void *data)
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
10 {
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
11 MsnSlpMessage *slpmsg;
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
12 long long real_size;
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
13
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
14 slpmsg = data;
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
15
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
16 real_size = (slpmsg->flags == P2P_ACK) ? 0 : slpmsg->size;
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
17
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
18 slpmsg->offset += msg->slpmsg->header->length;
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
19
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
20 slpmsg->msgs = g_list_remove(slpmsg->msgs, msg);
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
21
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
22 if (slpmsg->offset < real_size)
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
23 {
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
24 if (slpmsg->slpcall->xfer && purple_xfer_get_status(slpmsg->slpcall->xfer) == PURPLE_XFER_STATUS_STARTED)
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
25 {
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
26 slpmsg->slpcall->xfer_msg = slpmsg;
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
27 msn_message_ref(msg);
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
28 purple_xfer_prpl_ready(slpmsg->slpcall->xfer);
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
29 }
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
30 else
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
31 msn_slplink_send_msgpart(slpmsg->slplink, slpmsg);
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
32 }
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
33 else
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
34 {
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
35 /* The whole message has been sent */
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
36 if (slpmsg->flags == P2P_MSN_OBJ_DATA ||
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
37 slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) ||
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
38 slpmsg->flags == P2P_FILE_DATA)
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
39 {
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
40 if (slpmsg->slpcall != NULL)
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
41 {
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
42 if (slpmsg->slpcall->cb)
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
43 slpmsg->slpcall->cb(slpmsg->slpcall,
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
44 NULL, 0);
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
45 }
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
46 }
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
47 }
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
48
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
49 msn_message_unref(msg);
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
50 }
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
51
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
52 /* We have received the message nak. */
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
53 void
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
54 msn_sbconn_msg_nak(MsnMessage *msg, void *data)
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
55 {
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
56 MsnSlpMessage *slpmsg;
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
57
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
58 slpmsg = data;
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
59
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
60 msn_slplink_send_msgpart(slpmsg->slplink, slpmsg);
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
61
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
62 slpmsg->msgs = g_list_remove(slpmsg->msgs, msg);
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
63 msn_message_unref(msg);
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
64 }
f9181483576b Move MsnMessage stuff out of slplink to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents:
diff changeset
65
30997
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
66 void msn_sbconn_send_msg(MsnSlpLink *slplink, MsnMessage *msg)
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
67 {
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
68 if (slplink->swboard == NULL)
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
69 {
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
70 slplink->swboard = msn_session_get_swboard(slplink->session,
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
71 slplink->remote_user, MSN_SB_FLAG_FT);
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
72
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
73 g_return_if_fail(slplink->swboard != NULL);
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
74
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
75 /* If swboard is destroyed we will be too */
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
76 slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink);
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
77 }
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
78
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
79 msn_switchboard_send_msg(slplink->swboard, msg, TRUE);
ecccf0adf665 Manage sending messages trough switchboard in sbconn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30995
diff changeset
80 }
31000
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
81
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
82 void msn_sbconn_send_part(MsnSlpLink *slplink, MsnSlpMessagePart *part)
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
83 {
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
84 MsnMessage *msg;
31010
83a229f1e114 Remove the MsnMessage from SlpMessage.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31000
diff changeset
85 const char *passport;
31000
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
86 char *data;
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
87 size_t size;
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
88
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
89 msg = msn_message_new_msnslp();
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
90
31010
83a229f1e114 Remove the MsnMessage from SlpMessage.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31000
diff changeset
91 passport = purple_normalize(slplink->session->account, slplink->remote_user);
83a229f1e114 Remove the MsnMessage from SlpMessage.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31000
diff changeset
92 msn_message_set_header(msg, "P2P-Dest", passport);
83a229f1e114 Remove the MsnMessage from SlpMessage.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31000
diff changeset
93
31000
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
94 data = msn_slpmsgpart_serialize(part, &size);
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
95 msg->part = part;
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
96
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
97 msn_message_set_bin_data(msg, data, size);
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
98
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
99 if (slplink->swboard == NULL)
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
100 {
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
101 slplink->swboard = msn_session_get_swboard(slplink->session,
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
102 slplink->remote_user, MSN_SB_FLAG_FT);
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
103
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
104 g_return_if_fail(slplink->swboard != NULL);
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
105
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
106 /* If swboard is destroyed we will be too */
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
107 slplink->swboard->slplinks = g_list_prepend(slplink->swboard->slplinks, slplink);
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
108 }
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
109
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
110 msn_switchboard_send_msg(slplink->swboard, msg, TRUE);
0bb75b492d64 Add support in SBConn to send parts instead of messages.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 30997
diff changeset
111 }
31017
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
112
31020
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
113 /** Called when a message times out. */
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
114 static void
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
115 msg_timeout(MsnCmdProc *cmdproc, MsnTransaction *trans)
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
116 {
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
117 MsnMessage *msg;
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
118
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
119 msg = trans->data;
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
120
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
121 msg_error_helper(cmdproc, msg, MSN_MSG_ERROR_TIMEOUT);
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
122 }
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
123
31017
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
124 static void
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
125 release_msg(MsnSwitchBoard *swboard, MsnMessage *msg)
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
126 {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
127 MsnCmdProc *cmdproc;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
128 MsnTransaction *trans;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
129 char *payload;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
130 gsize payload_len;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
131 char flag;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
132
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
133 g_return_if_fail(swboard != NULL);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
134 g_return_if_fail(msg != NULL);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
135
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
136 cmdproc = swboard->cmdproc;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
137
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
138 payload = msn_message_gen_payload(msg, &payload_len);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
139
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
140 if (purple_debug_is_verbose()) {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
141 purple_debug_info("msn", "SB length:{%" G_GSIZE_FORMAT "}\n", payload_len);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
142 msn_message_show_readable(msg, "SB SEND", FALSE);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
143 }
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
144
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
145 flag = msn_message_get_flag(msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
146 trans = msn_transaction_new(cmdproc, "MSG", "%c %" G_GSIZE_FORMAT,
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
147 flag, payload_len);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
148
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
149 /* Data for callbacks */
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
150 msn_transaction_set_data(trans, msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
151
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
152 if (flag != 'U') {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
153 if (msg->type == MSN_MSG_TEXT)
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
154 {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
155 msg->ack_ref = TRUE;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
156 msn_message_ref(msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
157 swboard->ack_list = g_list_append(swboard->ack_list, msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
158 msn_transaction_set_timeout_cb(trans, msg_timeout);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
159 }
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
160 else if (msg->type == MSN_MSG_SLP)
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
161 {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
162 msg->ack_ref = TRUE;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
163 msn_message_ref(msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
164 swboard->ack_list = g_list_append(swboard->ack_list, msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
165 msn_transaction_set_timeout_cb(trans, msg_timeout);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
166 #if 0
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
167 if (msg->ack_cb != NULL)
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
168 {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
169 msn_transaction_add_cb(trans, "ACK", msg_ack);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
170 msn_transaction_add_cb(trans, "NAK", msg_nak);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
171 }
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
172 #endif
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
173 }
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
174 }
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
175
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
176 trans->payload = payload;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
177 trans->payload_len = payload_len;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
178
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
179 msg->trans = trans;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
180
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
181 msn_cmdproc_send_trans(cmdproc, trans);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
182 }
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
183
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
184 static void
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
185 queue_msg(MsnSwitchBoard *swboard, MsnMessage *msg)
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
186 {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
187 g_return_if_fail(swboard != NULL);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
188 g_return_if_fail(msg != NULL);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
189
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
190 purple_debug_info("msn", "Appending message to queue.\n");
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
191
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
192 g_queue_push_tail(swboard->msg_queue, msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
193
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
194 msn_message_ref(msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
195 }
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
196
31020
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
197 void
c1266a6b7745 Fix integration between Switchboard and SBConn. by setting public some functions on both sides. Regresion introduced in 99802eb80a7acd
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31017
diff changeset
198 msn_sbconn_process_queue(MsnSwitchBoard *swboard)
31017
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
199 {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
200 MsnMessage *msg;
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
201
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
202 g_return_if_fail(swboard != NULL);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
203
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
204 purple_debug_info("msn", "Processing queue\n");
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
205
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
206 while ((msg = g_queue_pop_head(swboard->msg_queue)) != NULL)
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
207 {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
208 purple_debug_info("msn", "Sending message\n");
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
209 release_msg(swboard, msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
210 msn_message_unref(msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
211 }
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
212 }
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
213
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
214 void
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
215 msn_switchboard_send_msg(MsnSwitchBoard *swboard, MsnMessage *msg,
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
216 gboolean queue)
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
217 {
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
218 g_return_if_fail(swboard != NULL);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
219 g_return_if_fail(msg != NULL);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
220
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
221 purple_debug_info("msn", "switchboard send msg..\n");
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
222 if (msn_switchboard_can_send(swboard))
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
223 release_msg(swboard, msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
224 else if (queue)
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
225 queue_msg(swboard, msg);
55654c6cd882 Move sending messages via SB to SBConn.
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 31010
diff changeset
226 }

mercurial