comparison libpurple/protocols/jabber/si.c @ 30037:f988f25259c7

merged with im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Wed, 24 Mar 2010 17:44:40 +0900
parents f44718de8b06 9f59abd49def
children 77aba27f64da
comparison
equal deleted inserted replaced
29995:2292d8896b0b 30037:f988f25259c7
289 else 289 else
290 dstaddr = g_strdup_printf("%s%s@%s/%s%s@%s/%s", jsx->stream_id, dstjid->node, dstjid->domain, dstjid->resource, 290 dstaddr = g_strdup_printf("%s%s@%s/%s%s@%s/%s", jsx->stream_id, dstjid->node, dstjid->domain, dstjid->resource,
291 jsx->js->user->node, jsx->js->user->domain, jsx->js->user->resource); 291 jsx->js->user->node, jsx->js->user->domain, jsx->js->user->resource);
292 292
293 /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */ 293 /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */
294 hash = jabber_calculate_data_sha1sum(dstaddr, strlen(dstaddr)); 294 hash = jabber_calculate_data_hash(dstaddr, strlen(dstaddr), "sha1");
295 295
296 jsx->connect_data = purple_proxy_connect_socks5(NULL, jsx->gpi, 296 jsx->connect_data = purple_proxy_connect_socks5(NULL, jsx->gpi,
297 hash, 0, 297 hash, 0,
298 jabber_si_bytestreams_connect_cb, xfer); 298 jabber_si_bytestreams_connect_cb, xfer);
299 g_free(hash); 299 g_free(hash);
474 dstaddr = g_strdup_printf("%s%s@%s/%s%s", jsx->stream_id, 474 dstaddr = g_strdup_printf("%s%s@%s/%s%s", jsx->stream_id,
475 jsx->js->user->node, jsx->js->user->domain, 475 jsx->js->user->node, jsx->js->user->domain,
476 jsx->js->user->resource, xfer->who); 476 jsx->js->user->resource, xfer->who);
477 477
478 /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */ 478 /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */
479 hash = jabber_calculate_data_sha1sum(dstaddr, strlen(dstaddr)); 479 hash = jabber_calculate_data_hash(dstaddr, strlen(dstaddr), "sha1");
480 480
481 if(strncmp(hash, jsx->rxqueue + 5, 40) || 481 if(strncmp(hash, jsx->rxqueue + 5, 40) ||
482 jsx->rxqueue[45] != 0x00 || jsx->rxqueue[46] != 0x00) { 482 jsx->rxqueue[45] != 0x00 || jsx->rxqueue[46] != 0x00) {
483 if (jsx->rxqueue[45] != 0x00 || jsx->rxqueue[46] != 0x00) 483 if (jsx->rxqueue[45] != 0x00 || jsx->rxqueue[46] != 0x00)
484 purple_debug_error("jabber", "Got SOCKS5 BS conn with the wrong DST.PORT" 484 purple_debug_error("jabber", "Got SOCKS5 BS conn with the wrong DST.PORT"
1075 jabber_si_xfer_ibb_closed_cb); 1075 jabber_si_xfer_ibb_closed_cb);
1076 jabber_ibb_session_set_error_callback(sess, 1076 jabber_ibb_session_set_error_callback(sess,
1077 jabber_si_xfer_ibb_error_cb); 1077 jabber_si_xfer_ibb_error_cb);
1078 1078
1079 jsx->ibb_session = sess; 1079 jsx->ibb_session = sess;
1080 /* we handle up to block-size bytes of decoded data, to handle
1081 clients interpreting the block-size attribute as that
1082 (see also remark in ibb.c) */
1080 jsx->ibb_buffer = 1083 jsx->ibb_buffer =
1081 purple_circ_buffer_new(jabber_ibb_session_get_block_size(sess)); 1084 purple_circ_buffer_new(jabber_ibb_session_get_block_size(sess));
1082 1085
1083 /* set up read function */ 1086 /* set up read function */
1084 purple_xfer_set_read_fnc(xfer, jabber_si_xfer_ibb_read); 1087 purple_xfer_set_read_fnc(xfer, jabber_si_xfer_ibb_read);
1103 static gssize 1106 static gssize
1104 jabber_si_xfer_ibb_write(const guchar *buffer, size_t len, PurpleXfer *xfer) 1107 jabber_si_xfer_ibb_write(const guchar *buffer, size_t len, PurpleXfer *xfer)
1105 { 1108 {
1106 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1109 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data;
1107 JabberIBBSession *sess = jsx->ibb_session; 1110 JabberIBBSession *sess = jsx->ibb_session;
1108 gsize packet_size = len < jabber_ibb_session_get_block_size(sess) ? 1111 gsize packet_size = len < jabber_ibb_session_get_max_data_size(sess) ?
1109 len : jabber_ibb_session_get_block_size(sess); 1112 len : jabber_ibb_session_get_max_data_size(sess);
1110 1113
1111 jabber_ibb_session_send_data(sess, buffer, packet_size); 1114 jabber_ibb_session_send_data(sess, buffer, packet_size);
1112 1115
1113 return packet_size; 1116 return packet_size;
1114 } 1117 }
1170 jabber_si_xfer_ibb_error_cb); 1173 jabber_si_xfer_ibb_error_cb);
1171 1174
1172 purple_xfer_set_write_fnc(xfer, jabber_si_xfer_ibb_write); 1175 purple_xfer_set_write_fnc(xfer, jabber_si_xfer_ibb_write);
1173 1176
1174 jsx->ibb_buffer = 1177 jsx->ibb_buffer =
1175 purple_circ_buffer_new(jabber_ibb_session_get_block_size(jsx->ibb_session)); 1178 purple_circ_buffer_new(jabber_ibb_session_get_max_data_size(jsx->ibb_session));
1176 1179
1177 /* open the IBB session */ 1180 /* open the IBB session */
1178 jabber_ibb_session_open(jsx->ibb_session); 1181 jabber_ibb_session_open(jsx->ibb_session);
1179 1182
1180 } else { 1183 } else {