Mercurial > pidgin
comparison src/protocols/msn/msnslp.c @ 6868:ab80de7a74d1
[gaim-migrate @ 7414]
Commitinating the current MSNSLP code. It's not working.. I don't know why.
No clients will respond to my messages, even though they appear very valid.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 17 Sep 2003 02:10:37 +0000 |
parents | bd433a45a463 |
children | ac638b90da44 |
comparison
equal
deleted
inserted
replaced
6867:1c4e4c725e0d | 6868:ab80de7a74d1 |
---|---|
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
21 */ | 21 */ |
22 #include "msn.h" | 22 #include "msn.h" |
23 #include "msnslp.h" | 23 #include "msnslp.h" |
24 | 24 |
25 static void | |
26 send_ack(MsnSlpSession *slpsession, MsnMessage *acked_msg) | |
27 { | |
28 MsnMessage *msg; | |
29 | |
30 msg = msn_message_new_msnslp(); | |
31 | |
32 msg->msnslp_header.length = acked_msg->msnslp_header.length; | |
33 msg->msnslp_header.flags = 0x02; | |
34 msg->msnslp_header.ack_session_id = | |
35 acked_msg->msnslp_header.ack_session_id; | |
36 msg->msnslp_header.ack_unique_id = | |
37 acked_msg->msnslp_header.id; | |
38 msg->msnslp_header.ack_length = acked_msg->msnslp_header.length; | |
39 | |
40 /* Send this puppy. */ | |
41 msn_slp_session_send_msg(slpsession, msg); | |
42 } | |
43 | |
44 MsnSlpSession * | 25 MsnSlpSession * |
45 msn_slp_session_new(MsnSwitchBoard *swboard, gboolean local_initiated) | 26 msn_slp_session_new(MsnSwitchBoard *swboard, gboolean local_initiated) |
46 { | 27 { |
47 MsnSlpSession *slpsession; | 28 MsnSlpSession *slpsession; |
48 | 29 |
84 | 65 |
85 return FALSE; | 66 return FALSE; |
86 } | 67 } |
87 | 68 |
88 /* Now send an ack, since we got this. */ | 69 /* Now send an ack, since we got this. */ |
89 send_ack(slpsession, msg); | 70 msn_slp_session_send_ack(slpsession, msg); |
90 | 71 |
91 return FALSE; | 72 return FALSE; |
73 } | |
74 | |
75 static void | |
76 send_msg_part(MsnSlpSession *slpsession, MsnMessage *msg) | |
77 { | |
78 msg->msnslp_header.length = | |
79 (slpsession->orig_len - slpsession->offset > 1202 | |
80 ? 1202 : slpsession->orig_len - slpsession->offset); | |
81 | |
82 if (slpsession->offset > 0) | |
83 { | |
84 if (msg->bin_content) | |
85 { | |
86 msn_message_set_bin_data(msg, | |
87 slpsession->orig_body + slpsession->offset, | |
88 msg->msnslp_header.length); | |
89 } | |
90 else | |
91 { | |
92 msn_message_set_body(msg, | |
93 slpsession->orig_body + slpsession->offset); | |
94 } | |
95 } | |
96 | |
97 msg->msnslp_header.offset_1 = slpsession->offset; | |
98 | |
99 msn_switchboard_send_msg(slpsession->swboard, msg); | |
100 | |
101 if (slpsession->offset + msg->msnslp_header.length == slpsession->orig_len) | |
102 { | |
103 msn_message_destroy(msg); | |
104 | |
105 g_free(slpsession->orig_body); | |
106 | |
107 slpsession->offset = 0; | |
108 slpsession->orig_len = 0; | |
109 slpsession->orig_body = NULL; | |
110 slpsession->outgoing_msg = NULL; | |
111 } | |
112 else | |
113 slpsession->offset += msg->msnslp_header.length; | |
92 } | 114 } |
93 | 115 |
94 void | 116 void |
95 msn_slp_session_send_msg(MsnSlpSession *slpsession, MsnMessage *msg) | 117 msn_slp_session_send_msg(MsnSlpSession *slpsession, MsnMessage *msg) |
96 { | 118 { |
97 g_return_if_fail(slpsession != NULL); | 119 g_return_if_fail(slpsession != NULL); |
98 g_return_if_fail(msg != NULL); | 120 g_return_if_fail(msg != NULL); |
99 g_return_if_fail(msg->msnslp_message); | 121 g_return_if_fail(msg->msnslp_message); |
122 g_return_if_fail(slpsession->outgoing_msg == NULL); | |
100 | 123 |
101 msg->msnslp_header.session_id = slpsession->session_id; | 124 msg->msnslp_header.session_id = slpsession->session_id; |
102 | 125 |
126 slpsession->outgoing_msg = msn_message_ref(msg); | |
127 | |
103 if (slpsession->base_id == 0) | 128 if (slpsession->base_id == 0) |
104 { | 129 { |
105 slpsession->base_id = rand() % 0xFFFFFF00 + 4; | 130 slpsession->base_id = rand() % 0x0FFFFFF0 + 4; |
106 slpsession->prev_msg_id = slpsession->base_id; | 131 slpsession->prev_msg_id = slpsession->base_id; |
132 } | |
133 else if (slpsession->offset == 0) | |
134 slpsession->prev_msg_id = ++slpsession->base_id; | |
135 | |
136 msg->msnslp_header.id = slpsession->prev_msg_id; | |
137 // msg->msnslp_header.ack_session_id = rand() % 0xFFFFFF00; | |
138 msg->msnslp_header.ack_session_id = 1980589; | |
139 | |
140 msn_message_set_charset(msg, NULL); | |
141 | |
142 if (msg->msnslp_header.session_id != 0) | |
143 msg->msnslp_footer.app_id = 1; | |
144 | |
145 if (msg->bin_content) | |
146 { | |
147 const void *temp; | |
148 | |
149 temp = msn_message_get_bin_data(msg, &slpsession->orig_len); | |
150 | |
151 slpsession->orig_body = g_memdup(temp, slpsession->orig_len); | |
152 } | |
153 else | |
154 { | |
155 slpsession->orig_body = g_strdup(msn_message_get_body(msg)); | |
156 slpsession->orig_len = strlen(slpsession->orig_body); | |
157 } | |
158 | |
159 msg->msnslp_header.total_size_1 = slpsession->orig_len; | |
160 | |
161 send_msg_part(slpsession, msg); | |
162 } | |
163 | |
164 void | |
165 msn_slp_session_send_ack(MsnSlpSession *slpsession, MsnMessage *acked_msg) | |
166 { | |
167 MsnMessage *msg; | |
168 gboolean new_base_id = FALSE; | |
169 | |
170 g_return_if_fail(slpsession != NULL); | |
171 g_return_if_fail(acked_msg != NULL); | |
172 g_return_if_fail(acked_msg->msnslp_message); | |
173 g_return_if_fail(slpsession->outgoing_msg == NULL); | |
174 | |
175 msg = msn_message_new_msnslp_ack(acked_msg); | |
176 | |
177 if (slpsession->base_id == 0) | |
178 { | |
179 slpsession->base_id = rand() % 0x0FFFFE00 + 10; | |
180 slpsession->prev_msg_id = slpsession->base_id; | |
181 | |
182 new_base_id = TRUE; | |
107 } | 183 } |
108 else | 184 else |
109 slpsession->prev_msg_id = ++slpsession->base_id; | 185 slpsession->prev_msg_id = ++slpsession->base_id; |
110 | 186 |
111 msg->msnslp_header.id = slpsession->prev_msg_id; | 187 msg->msnslp_header.id = slpsession->prev_msg_id; |
112 msg->msnslp_header.ack_session_id = rand() % 0xFFFFFF00; | 188 |
113 | 189 if (new_base_id) |
114 if (msn_message_get_body(msg) != NULL) | 190 slpsession->prev_msg_id -= 4; |
115 msg->msnslp_header.total_size = strlen(msn_message_get_body(msg)); | |
116 | |
117 msn_message_set_charset(msg, NULL); | |
118 | |
119 msn_message_set_flag(msg, 'D'); | |
120 msn_message_set_content_type(msg, "application/x-msnmsgrp2p"); | |
121 msn_message_set_attr(msg, "P2P-Dest", | |
122 msn_user_get_passport(msn_message_get_receiver(msg))); | |
123 | |
124 if (msg->msnslp_header.session_id != 0) | |
125 msg->msnslp_footer.app_id = 1; | |
126 | 191 |
127 msn_switchboard_send_msg(slpsession->swboard, msg); | 192 msn_switchboard_send_msg(slpsession->swboard, msg); |
128 } | 193 } |
129 | 194 |
130 void | 195 void |
139 char *msnobj_base64; | 204 char *msnobj_base64; |
140 char *branch; | 205 char *branch; |
141 char *call_id; | 206 char *call_id; |
142 char *content; | 207 char *content; |
143 char *body; | 208 char *body; |
144 char *c; | |
145 | 209 |
146 g_return_if_fail(slpsession != NULL); | 210 g_return_if_fail(slpsession != NULL); |
147 g_return_if_fail(local_user != NULL); | 211 g_return_if_fail(local_user != NULL); |
148 g_return_if_fail(remote_user != NULL); | 212 g_return_if_fail(remote_user != NULL); |
149 g_return_if_fail(obj != NULL); | 213 g_return_if_fail(obj != NULL); |
150 | 214 |
151 msnobj_data = msn_object_to_string(obj); | 215 msnobj_data = msn_object_to_string(obj); |
152 msnobj_base64 = tobase64(msnobj_data, strlen(msnobj_data)); | 216 msnobj_base64 = tobase64(msnobj_data, strlen(msnobj_data)); |
153 g_free(msnobj_data); | 217 g_free(msnobj_data); |
154 | 218 |
219 #if 0 | |
155 if ((c = strchr(msnobj_base64, '=')) != NULL) | 220 if ((c = strchr(msnobj_base64, '=')) != NULL) |
156 *c = '\0'; | 221 *c = '\0'; |
222 #endif | |
157 | 223 |
158 session_id = rand() % 0xFFFFFF00 + 4; | 224 session_id = rand() % 0xFFFFFF00 + 4; |
159 | 225 |
160 branch = g_strdup_printf("%4X%4X-%4X-%4X-%4X-%4X%4X%4X", | 226 branch = g_strdup_printf("%4X%4X-%4X-%4X-%4X-%4X%4X%4X", |
161 rand() % 0xAAFF + 0x1111, | 227 rand() % 0xAAFF + 0x1111, |