comparison libpurple/protocols/jabber/si.c @ 32437:ac6353ffa129

merge to upstream
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 29 Aug 2011 12:28:49 +0900
parents 380f530c3f86 ac88c8fc3f47
children 0f94ec89f0bc
comparison
equal deleted inserted replaced
32360:9aee8493db7f 32437:ac6353ffa129
87 if(!sid || !from) 87 if(!sid || !from)
88 return NULL; 88 return NULL;
89 89
90 for(xfers = js->file_transfers; xfers; xfers = xfers->next) { 90 for(xfers = js->file_transfers; xfers; xfers = xfers->next) {
91 PurpleXfer *xfer = xfers->data; 91 PurpleXfer *xfer = xfers->data;
92 JabberSIXfer *jsx = xfer->data; 92 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
93 if(jsx->stream_id && xfer->who && 93 if(jsx->stream_id && xfer->who &&
94 !strcmp(jsx->stream_id, sid) && !strcmp(xfer->who, from)) 94 !strcmp(jsx->stream_id, sid) && !strcmp(xfer->who, from))
95 return xfer; 95 return xfer;
96 } 96 }
97 97
118 118
119 static void 119 static void
120 jabber_si_bytestreams_connect_cb(gpointer data, gint source, const gchar *error_message) 120 jabber_si_bytestreams_connect_cb(gpointer data, gint source, const gchar *error_message)
121 { 121 {
122 PurpleXfer *xfer = data; 122 PurpleXfer *xfer = data;
123 JabberSIXfer *jsx = xfer->data; 123 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
124 JabberIq *iq; 124 JabberIq *iq;
125 xmlnode *query, *su; 125 xmlnode *query, *su;
126 JabberBytestreamsStreamhost *streamhost = jsx->streamhosts->data; 126 JabberBytestreamsStreamhost *streamhost = jsx->streamhosts->data;
127 127
128 purple_proxy_info_destroy(jsx->gpi); 128 purple_proxy_info_destroy(jsx->gpi);
174 174
175 static gboolean 175 static gboolean
176 connect_timeout_cb(gpointer data) 176 connect_timeout_cb(gpointer data)
177 { 177 {
178 PurpleXfer *xfer = data; 178 PurpleXfer *xfer = data;
179 JabberSIXfer *jsx = xfer->data; 179 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
180 180
181 purple_debug_info("jabber", "Streamhost connection timeout of %d seconds exceeded.\n", STREAMHOST_CONNECT_TIMEOUT); 181 purple_debug_info("jabber", "Streamhost connection timeout of %d seconds exceeded.\n", STREAMHOST_CONNECT_TIMEOUT);
182 182
183 jsx->connect_timeout = 0; 183 jsx->connect_timeout = 0;
184 184
203 203
204 static gboolean 204 static gboolean
205 jabber_si_bytestreams_ibb_timeout_cb(gpointer data) 205 jabber_si_bytestreams_ibb_timeout_cb(gpointer data)
206 { 206 {
207 PurpleXfer *xfer = (PurpleXfer *) data; 207 PurpleXfer *xfer = (PurpleXfer *) data;
208 JabberSIXfer *jsx = xfer->data; 208 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
209 209
210 if (jsx && !jsx->ibb_session) { 210 if (jsx && !jsx->ibb_session) {
211 purple_debug_info("jabber", 211 purple_debug_info("jabber",
212 "jabber_si_bytestreams_ibb_timeout called and IBB session not set " 212 "jabber_si_bytestreams_ibb_timeout called and IBB session not set "
213 " up yet, cancel transfer"); 213 " up yet, cancel transfer");
218 return FALSE; 218 return FALSE;
219 } 219 }
220 220
221 static void jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer) 221 static void jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer)
222 { 222 {
223 JabberSIXfer *jsx = xfer->data; 223 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
224 JabberBytestreamsStreamhost *streamhost; 224 JabberBytestreamsStreamhost *streamhost;
225 JabberID *dstjid; 225 JabberID *dstjid;
226 226
227 if(!jsx->streamhosts) { 227 if(!jsx->streamhosts) {
228 JabberIq *iq = jabber_iq_new(jsx->js, JABBER_IQ_ERROR); 228 JabberIq *iq = jabber_iq_new(jsx->js, JABBER_IQ_ERROR);
337 return; 337 return;
338 338
339 if(!(xfer = jabber_si_xfer_find(js, sid, from))) 339 if(!(xfer = jabber_si_xfer_find(js, sid, from)))
340 return; 340 return;
341 341
342 jsx = xfer->data; 342 jsx = purple_xfer_get_protocol_data(xfer);
343 343
344 if(!jsx->accepted) 344 if(!jsx->accepted)
345 return; 345 return;
346 346
347 if(jsx->iq_id) 347 if(jsx->iq_id)
375 static void 375 static void
376 jabber_si_xfer_bytestreams_send_read_again_resp_cb(gpointer data, gint source, 376 jabber_si_xfer_bytestreams_send_read_again_resp_cb(gpointer data, gint source,
377 PurpleInputCondition cond) 377 PurpleInputCondition cond)
378 { 378 {
379 PurpleXfer *xfer = data; 379 PurpleXfer *xfer = data;
380 JabberSIXfer *jsx = xfer->data; 380 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
381 int len; 381 int len;
382 382
383 len = write(source, jsx->rxqueue + jsx->rxlen, jsx->rxmaxlen - jsx->rxlen); 383 len = write(source, jsx->rxqueue + jsx->rxlen, jsx->rxmaxlen - jsx->rxlen);
384 if (len < 0 && errno == EAGAIN) 384 if (len < 0 && errno == EAGAIN)
385 return; 385 return;
412 static void 412 static void
413 jabber_si_xfer_bytestreams_send_read_again_cb(gpointer data, gint source, 413 jabber_si_xfer_bytestreams_send_read_again_cb(gpointer data, gint source,
414 PurpleInputCondition cond) 414 PurpleInputCondition cond)
415 { 415 {
416 PurpleXfer *xfer = data; 416 PurpleXfer *xfer = data;
417 JabberSIXfer *jsx = xfer->data; 417 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
418 char buffer[42]; /* 40 for DST.ADDR + 2 bytes for port number*/ 418 char buffer[42]; /* 40 for DST.ADDR + 2 bytes for port number*/
419 int len; 419 int len;
420 char *dstaddr, *hash; 420 char *dstaddr, *hash;
421 const char *host; 421 const char *host;
422 422
527 static void 527 static void
528 jabber_si_xfer_bytestreams_send_read_response_cb(gpointer data, gint source, 528 jabber_si_xfer_bytestreams_send_read_response_cb(gpointer data, gint source,
529 PurpleInputCondition cond) 529 PurpleInputCondition cond)
530 { 530 {
531 PurpleXfer *xfer = data; 531 PurpleXfer *xfer = data;
532 JabberSIXfer *jsx = xfer->data; 532 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
533 int len; 533 int len;
534 534
535 len = write(source, jsx->rxqueue + jsx->rxlen, jsx->rxmaxlen - jsx->rxlen); 535 len = write(source, jsx->rxqueue + jsx->rxlen, jsx->rxmaxlen - jsx->rxlen);
536 if (len < 0 && errno == EAGAIN) 536 if (len < 0 && errno == EAGAIN)
537 return; 537 return;
568 static void 568 static void
569 jabber_si_xfer_bytestreams_send_read_cb(gpointer data, gint source, 569 jabber_si_xfer_bytestreams_send_read_cb(gpointer data, gint source,
570 PurpleInputCondition cond) 570 PurpleInputCondition cond)
571 { 571 {
572 PurpleXfer *xfer = data; 572 PurpleXfer *xfer = data;
573 JabberSIXfer *jsx = xfer->data; 573 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
574 int i; 574 int i;
575 int len; 575 int len;
576 char buffer[256]; 576 char buffer[256];
577 577
578 purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_read_cb\n"); 578 purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_read_cb\n");
680 static void 680 static void
681 jabber_si_xfer_bytestreams_send_connected_cb(gpointer data, gint source, 681 jabber_si_xfer_bytestreams_send_connected_cb(gpointer data, gint source,
682 PurpleInputCondition cond) 682 PurpleInputCondition cond)
683 { 683 {
684 PurpleXfer *xfer = data; 684 PurpleXfer *xfer = data;
685 JabberSIXfer *jsx = xfer->data; 685 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
686 int acceptfd, flags; 686 int acceptfd, flags;
687 687
688 purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_connected_cb\n"); 688 purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_connected_cb\n");
689 689
690 acceptfd = accept(source, NULL, 0); 690 acceptfd = accept(source, NULL, 0);
727 if (!g_list_find(js->file_transfers, xfer)) { 727 if (!g_list_find(js->file_transfers, xfer)) {
728 purple_debug_error("jabber", "Got bytestreams response for no longer existing xfer (%p)\n", xfer); 728 purple_debug_error("jabber", "Got bytestreams response for no longer existing xfer (%p)\n", xfer);
729 return; 729 return;
730 } 730 }
731 731
732 jsx = purple_xfer_get_protocol_data(xfer);
733
732 /* In the case of a direct file transfer, this is expected to return */ 734 /* In the case of a direct file transfer, this is expected to return */
733 if(!xfer->data) 735 if(!jsx)
734 return; 736 return;
735
736 jsx = xfer->data;
737 737
738 if(type != JABBER_IQ_RESULT) { 738 if(type != JABBER_IQ_RESULT) {
739 purple_debug_info("jabber", 739 purple_debug_info("jabber",
740 "jabber_si_xfer_connect_proxy_cb: type = error\n"); 740 "jabber_si_xfer_connect_proxy_cb: type = error\n");
741 /* if IBB is available, open IBB session */ 741 /* if IBB is available, open IBB session */
835 char port[6]; 835 char port[6];
836 GList *tmp; 836 GList *tmp;
837 JabberBytestreamsStreamhost *sh, *sh2; 837 JabberBytestreamsStreamhost *sh, *sh2;
838 int streamhost_count = 0; 838 int streamhost_count = 0;
839 839
840 jsx = xfer->data; 840 jsx = purple_xfer_get_protocol_data(xfer);
841 jsx->listen_data = NULL; 841 jsx->listen_data = NULL;
842 842
843 /* I'm not sure under which conditions this can happen 843 /* I'm not sure under which conditions this can happen
844 * (it seems like it shouldn't be possible */ 844 * (it seems like it shouldn't be possible */
845 if (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_LOCAL) { 845 if (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_LOCAL) {
969 JabberSIXfer *jsx; 969 JabberSIXfer *jsx;
970 PurpleProxyType proxy_type; 970 PurpleProxyType proxy_type;
971 971
972 purple_xfer_ref(xfer); 972 purple_xfer_ref(xfer);
973 973
974 jsx = xfer->data; 974 jsx = purple_xfer_get_protocol_data(xfer);
975 975
976 /* TODO: This should probably be done with an account option instead of 976 /* TODO: This should probably be done with an account option instead of
977 * piggy-backing on the TOR proxy type. */ 977 * piggy-backing on the TOR proxy type. */
978 proxy_type = purple_proxy_info_get_type( 978 proxy_type = purple_proxy_info_get_type(
979 purple_proxy_get_setup(purple_connection_get_account(jsx->js->gc))); 979 purple_proxy_get_setup(purple_connection_get_account(jsx->js->gc)));
1017 static void 1017 static void
1018 jabber_si_xfer_ibb_recv_data_cb(JabberIBBSession *sess, gpointer data, 1018 jabber_si_xfer_ibb_recv_data_cb(JabberIBBSession *sess, gpointer data,
1019 gsize size) 1019 gsize size)
1020 { 1020 {
1021 PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess); 1021 PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess);
1022 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1022 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1023 1023
1024 if (size <= purple_xfer_get_bytes_remaining(xfer)) { 1024 if (size <= purple_xfer_get_bytes_remaining(xfer)) {
1025 purple_debug_info("jabber", "about to write %" G_GSIZE_FORMAT " bytes from IBB stream\n", 1025 purple_debug_info("jabber", "about to write %" G_GSIZE_FORMAT " bytes from IBB stream\n",
1026 size); 1026 size);
1027 purple_circ_buffer_append(jsx->ibb_buffer, data, size); 1027 purple_circ_buffer_append(jsx->ibb_buffer, data, size);
1037 } 1037 }
1038 1038
1039 static gssize 1039 static gssize
1040 jabber_si_xfer_ibb_read(guchar **out_buffer, PurpleXfer *xfer) 1040 jabber_si_xfer_ibb_read(guchar **out_buffer, PurpleXfer *xfer)
1041 { 1041 {
1042 JabberSIXfer *jsx = xfer->data; 1042 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1043 guchar *buffer; 1043 guchar *buffer;
1044 gsize size; 1044 gsize size;
1045 gsize tmp; 1045 gsize tmp;
1046 1046
1047 size = jsx->ibb_buffer->bufused; 1047 size = jsx->ibb_buffer->bufused;
1060 xmlnode *open) 1060 xmlnode *open)
1061 { 1061 {
1062 const gchar *sid = xmlnode_get_attrib(open, "sid"); 1062 const gchar *sid = xmlnode_get_attrib(open, "sid");
1063 PurpleXfer *xfer = jabber_si_xfer_find(js, sid, who); 1063 PurpleXfer *xfer = jabber_si_xfer_find(js, sid, who);
1064 if (xfer) { 1064 if (xfer) {
1065 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1065 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1066 JabberIBBSession *sess = 1066 JabberIBBSession *sess =
1067 jabber_ibb_session_create_from_xmlnode(js, who, id, open, xfer); 1067 jabber_ibb_session_create_from_xmlnode(js, who, id, open, xfer);
1068 1068
1069 jabber_si_bytestreams_ibb_timeout_remove(jsx); 1069 jabber_si_bytestreams_ibb_timeout_remove(jsx);
1070 1070
1105 } 1105 }
1106 1106
1107 static gssize 1107 static gssize
1108 jabber_si_xfer_ibb_write(const guchar *buffer, size_t len, PurpleXfer *xfer) 1108 jabber_si_xfer_ibb_write(const guchar *buffer, size_t len, PurpleXfer *xfer)
1109 { 1109 {
1110 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1110 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1111 JabberIBBSession *sess = jsx->ibb_session; 1111 JabberIBBSession *sess = jsx->ibb_session;
1112 gsize packet_size = len < jabber_ibb_session_get_max_data_size(sess) ? 1112 gsize packet_size = len < jabber_ibb_session_get_max_data_size(sess) ?
1113 len : jabber_ibb_session_get_max_data_size(sess); 1113 len : jabber_ibb_session_get_max_data_size(sess);
1114 1114
1115 jabber_ibb_session_send_data(sess, buffer, packet_size); 1115 jabber_ibb_session_send_data(sess, buffer, packet_size);
1149 } 1149 }
1150 1150
1151 static void 1151 static void
1152 jabber_si_xfer_ibb_send_init(JabberStream *js, PurpleXfer *xfer) 1152 jabber_si_xfer_ibb_send_init(JabberStream *js, PurpleXfer *xfer)
1153 { 1153 {
1154 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1154 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1155 1155
1156 jsx->ibb_session = jabber_ibb_session_create(js, jsx->stream_id, 1156 jsx->ibb_session = jabber_ibb_session_create(js, jsx->stream_id,
1157 purple_xfer_get_remote_user(xfer), xfer); 1157 purple_xfer_get_remote_user(xfer), xfer);
1158 1158
1159 if (jsx->ibb_session) { 1159 if (jsx->ibb_session) {
1206 return; 1206 return;
1207 } 1207 }
1208 1208
1209 for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) { 1209 for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) {
1210 const char *var = xmlnode_get_attrib(field, "var"); 1210 const char *var = xmlnode_get_attrib(field, "var");
1211 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1211 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1212 1212
1213 if(var && !strcmp(var, "stream-method")) { 1213 if(var && !strcmp(var, "stream-method")) {
1214 if((value = xmlnode_get_child(field, "value"))) { 1214 if((value = xmlnode_get_child(field, "value"))) {
1215 char *val = xmlnode_get_data(value); 1215 char *val = xmlnode_get_data(value);
1216 if(val && !strcmp(val, NS_BYTESTREAMS)) { 1216 if(val && !strcmp(val, NS_BYTESTREAMS)) {
1237 1237
1238 } 1238 }
1239 1239
1240 static void jabber_si_xfer_send_request(PurpleXfer *xfer) 1240 static void jabber_si_xfer_send_request(PurpleXfer *xfer)
1241 { 1241 {
1242 JabberSIXfer *jsx = xfer->data; 1242 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1243 JabberIq *iq; 1243 JabberIq *iq;
1244 xmlnode *si, *file, *feature, *x, *field, *option, *value; 1244 xmlnode *si, *file, *feature, *x, *field, *option, *value;
1245 char buf[32]; 1245 char buf[32];
1246 gchar *f1 = NULL, *f2 = NULL; 1246 gchar *f1 = NULL, *f2 = NULL;
1247 gsize dummy; 1247 gsize dummy;
1320 jabber_iq_send(iq); 1320 jabber_iq_send(iq);
1321 } 1321 }
1322 1322
1323 static void jabber_si_xfer_free(PurpleXfer *xfer) 1323 static void jabber_si_xfer_free(PurpleXfer *xfer)
1324 { 1324 {
1325 JabberSIXfer *jsx = xfer->data; 1325 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1326 1326
1327 if (jsx) { 1327 if (jsx) {
1328 JabberStream *js = jsx->js; 1328 JabberStream *js = jsx->js;
1329 1329
1330 js->file_transfers = g_list_remove(js->file_transfers, xfer); 1330 js->file_transfers = g_list_remove(js->file_transfers, xfer);
1367 g_free(jsx->stream_id); 1367 g_free(jsx->stream_id);
1368 g_free(jsx->iq_id); 1368 g_free(jsx->iq_id);
1369 /* XXX: free other stuff */ 1369 /* XXX: free other stuff */
1370 g_free(jsx->rxqueue); 1370 g_free(jsx->rxqueue);
1371 g_free(jsx); 1371 g_free(jsx);
1372 xfer->data = NULL; 1372 purple_xfer_set_protocol_data(xfer, NULL);
1373 } 1373 }
1374 } 1374 }
1375 1375
1376 /* 1376 /*
1377 * These four functions should only be called from the PurpleXfer functions 1377 * These four functions should only be called from the PurpleXfer functions
1378 * (typically purple_xfer_cancel_(remote|local), purple_xfer_end, or 1378 * (typically purple_xfer_cancel_(remote|local), purple_xfer_end, or
1379 * purple_xfer_request_denied. 1379 * purple_xfer_request_denied.
1380 */ 1380 */
1381 static void jabber_si_xfer_cancel_send(PurpleXfer *xfer) 1381 static void jabber_si_xfer_cancel_send(PurpleXfer *xfer)
1382 { 1382 {
1383 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1383 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1384 1384
1385 /* if there is an IBB session active, send close on that */ 1385 /* if there is an IBB session active, send close on that */
1386 if (jsx->ibb_session) { 1386 if (jsx->ibb_session) {
1387 jabber_ibb_session_close(jsx->ibb_session); 1387 jabber_ibb_session_close(jsx->ibb_session);
1388 } 1388 }
1391 } 1391 }
1392 1392
1393 1393
1394 static void jabber_si_xfer_request_denied(PurpleXfer *xfer) 1394 static void jabber_si_xfer_request_denied(PurpleXfer *xfer)
1395 { 1395 {
1396 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1396 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1397 JabberStream *js = jsx->js; 1397 JabberStream *js = jsx->js;
1398 1398
1399 /* 1399 /*
1400 * TODO: It's probably an error if jsx->iq_id == NULL. g_return_if_fail 1400 * TODO: It's probably an error if jsx->iq_id == NULL. g_return_if_fail
1401 * might be warranted. 1401 * might be warranted.
1423 } 1423 }
1424 1424
1425 1425
1426 static void jabber_si_xfer_cancel_recv(PurpleXfer *xfer) 1426 static void jabber_si_xfer_cancel_recv(PurpleXfer *xfer)
1427 { 1427 {
1428 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1428 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1429 /* if there is an IBB session active, send close */ 1429 /* if there is an IBB session active, send close */
1430 if (jsx->ibb_session) { 1430 if (jsx->ibb_session) {
1431 jabber_ibb_session_close(jsx->ibb_session); 1431 jabber_ibb_session_close(jsx->ibb_session);
1432 } 1432 }
1433 jabber_si_xfer_free(xfer); 1433 jabber_si_xfer_free(xfer);
1443 1443
1444 static void jabber_si_xfer_send_disco_cb(JabberStream *js, const char *who, 1444 static void jabber_si_xfer_send_disco_cb(JabberStream *js, const char *who,
1445 JabberCapabilities capabilities, gpointer data) 1445 JabberCapabilities capabilities, gpointer data)
1446 { 1446 {
1447 PurpleXfer *xfer = (PurpleXfer *) data; 1447 PurpleXfer *xfer = (PurpleXfer *) data;
1448 JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; 1448 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1449 1449
1450 if (capabilities & JABBER_CAP_IBB) { 1450 if (capabilities & JABBER_CAP_IBB) {
1451 purple_debug_info("jabber", 1451 purple_debug_info("jabber",
1452 "jabber_si_xfer_send_disco_cb: remote JID supports IBB\n"); 1452 "jabber_si_xfer_send_disco_cb: remote JID supports IBB\n");
1453 jsx->stream_method |= STREAM_METHOD_IBB; 1453 jsx->stream_method |= STREAM_METHOD_IBB;
1469 purple_xfer_cancel_local(xfer); 1469 purple_xfer_cancel_local(xfer);
1470 } 1470 }
1471 1471
1472 static void do_transfer_send(PurpleXfer *xfer, const char *resource) 1472 static void do_transfer_send(PurpleXfer *xfer, const char *resource)
1473 { 1473 {
1474 JabberSIXfer *jsx = xfer->data; 1474 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1475 char **who_v = g_strsplit(xfer->who, "/", 2); 1475 char **who_v = g_strsplit(xfer->who, "/", 2);
1476 char *who; 1476 char *who;
1477 JabberBuddy *jb; 1477 JabberBuddy *jb;
1478 JabberBuddyResource *jbr = NULL; 1478 JabberBuddyResource *jbr = NULL;
1479 1479
1519 do_transfer_send(xfer, selected_label); 1519 do_transfer_send(xfer, selected_label);
1520 } 1520 }
1521 1521
1522 static void jabber_si_xfer_init(PurpleXfer *xfer) 1522 static void jabber_si_xfer_init(PurpleXfer *xfer)
1523 { 1523 {
1524 JabberSIXfer *jsx = xfer->data; 1524 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
1525 JabberIq *iq; 1525 JabberIq *iq;
1526 if(purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) { 1526 if(purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) {
1527 JabberBuddy *jb; 1527 JabberBuddy *jb;
1528 JabberBuddyResource *jbr = NULL; 1528 JabberBuddyResource *jbr = NULL;
1529 char *resource; 1529 char *resource;
1652 js = gc->proto_data; 1652 js = gc->proto_data;
1653 1653
1654 xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who); 1654 xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who);
1655 if (xfer) 1655 if (xfer)
1656 { 1656 {
1657 xfer->data = jsx = g_new0(JabberSIXfer, 1); 1657 jsx = g_new0(JabberSIXfer, 1);
1658 purple_xfer_set_protocol_data(xfer, jsx);
1658 jsx->js = js; 1659 jsx->js = js;
1659 jsx->local_streamhost_fd = -1; 1660 jsx->local_streamhost_fd = -1;
1660 1661
1661 jsx->ibb_session = NULL; 1662 jsx->ibb_session = NULL;
1662 1663
1788 jsx->iq_id = g_strdup(id); 1789 jsx->iq_id = g_strdup(id);
1789 1790
1790 xfer = purple_xfer_new(js->gc->account, PURPLE_XFER_RECEIVE, from); 1791 xfer = purple_xfer_new(js->gc->account, PURPLE_XFER_RECEIVE, from);
1791 g_return_if_fail(xfer != NULL); 1792 g_return_if_fail(xfer != NULL);
1792 1793
1793 xfer->data = jsx; 1794 purple_xfer_set_protocol_data(xfer, jsx);
1794 1795
1795 purple_xfer_set_filename(xfer, filename); 1796 purple_xfer_set_filename(xfer, filename);
1796 if(filesize > 0) 1797 if(filesize > 0)
1797 purple_xfer_set_size(xfer, filesize); 1798 purple_xfer_set_size(xfer, filesize);
1798 1799