comparison libpurple/protocols/jabber/si.c @ 29612:8f442c566ff2

jabber: Adjust amount of data to send in IBB packets so that at most block-size bytes of BASE64-encoded data is sent, based on discussion on the standars@j.o list. Keep accepting receiving packets containing up to block-size bytes of decoded data to stay compatible with previous version, and other clients who made that assuption.
author Marcus Lundblad <ml@update.uu.se>
date Thu, 18 Mar 2010 21:19:44 +0000
parents 356d1f40a56d
children 9f59abd49def 885ceb384678
comparison
equal deleted inserted replaced
29605:ffc1f997cb91 29612:8f442c566ff2
1073 jabber_si_xfer_ibb_closed_cb); 1073 jabber_si_xfer_ibb_closed_cb);
1074 jabber_ibb_session_set_error_callback(sess, 1074 jabber_ibb_session_set_error_callback(sess,
1075 jabber_si_xfer_ibb_error_cb); 1075 jabber_si_xfer_ibb_error_cb);
1076 1076
1077 jsx->ibb_session = sess; 1077 jsx->ibb_session = sess;
1078 /* we handle up to block-size bytes of decoded data, to handle
1079 clients interpreting the block-size attribute as that
1080 (see also remark in ibb.c) */
1078 jsx->ibb_buffer = 1081 jsx->ibb_buffer =
1079 purple_circ_buffer_new(jabber_ibb_session_get_block_size(sess)); 1082 purple_circ_buffer_new(jabber_ibb_session_get_block_size(sess));
1080 1083
1081 /* set up read function */ 1084 /* set up read function */
1082 purple_xfer_set_read_fnc(xfer, jabber_si_xfer_ibb_read); 1085 purple_xfer_set_read_fnc(xfer, jabber_si_xfer_ibb_read);
1101 static gssize 1104 static gssize
1102 jabber_si_xfer_ibb_write(const guchar *buffer, size_t len, PurpleXfer *xfer) 1105 jabber_si_xfer_ibb_write(const guchar *buffer, size_t len, PurpleXfer *xfer)
1103 { 1106 {
1104 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1107 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data;
1105 JabberIBBSession *sess = jsx->ibb_session; 1108 JabberIBBSession *sess = jsx->ibb_session;
1106 gsize packet_size = len < jabber_ibb_session_get_block_size(sess) ? 1109 gsize packet_size = len < jabber_ibb_session_get_max_data_size(sess) ?
1107 len : jabber_ibb_session_get_block_size(sess); 1110 len : jabber_ibb_session_get_max_data_size(sess);
1108 1111
1109 jabber_ibb_session_send_data(sess, buffer, packet_size); 1112 jabber_ibb_session_send_data(sess, buffer, packet_size);
1110 1113
1111 return packet_size; 1114 return packet_size;
1112 } 1115 }
1168 jabber_si_xfer_ibb_error_cb); 1171 jabber_si_xfer_ibb_error_cb);
1169 1172
1170 purple_xfer_set_write_fnc(xfer, jabber_si_xfer_ibb_write); 1173 purple_xfer_set_write_fnc(xfer, jabber_si_xfer_ibb_write);
1171 1174
1172 jsx->ibb_buffer = 1175 jsx->ibb_buffer =
1173 purple_circ_buffer_new(jabber_ibb_session_get_block_size(jsx->ibb_session)); 1176 purple_circ_buffer_new(jabber_ibb_session_get_max_data_size(jsx->ibb_session));
1174 1177
1175 /* open the IBB session */ 1178 /* open the IBB session */
1176 jabber_ibb_session_open(jsx->ibb_session); 1179 jabber_ibb_session_open(jsx->ibb_session);
1177 1180
1178 } else { 1181 } else {