Mercurial > pidgin
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 { |