comparison libpurple/protocols/yahoo/yahoo_filexfer.c @ 32827:4a34689eeb33 default tip

merged from im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Sat, 19 Nov 2011 14:42:54 +0900
parents 0f94ec89f0bc 5bd5e024c977
children
comparison
equal deleted inserted replaced
32692:0f94ec89f0bc 32827:4a34689eeb33
167 purple_xfer_get_remote_user(xfer), _("Unable to connect.")); 167 purple_xfer_get_remote_user(xfer), _("Unable to connect."));
168 purple_xfer_cancel_remote(xfer); 168 purple_xfer_cancel_remote(xfer);
169 return; 169 return;
170 } 170 }
171 171
172 xfer->fd = source; 172 purple_xfer_set_fd(xfer, source);
173 173
174 /* The first time we get here, assemble the tx buffer */ 174 /* The first time we get here, assemble the tx buffer */
175 if (xd->txbuflen == 0) { 175 if (xd->txbuflen == 0) {
176 gchar *header = g_strdup_printf("GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n", 176 gchar *header = g_strdup_printf("GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n",
177 xd->path, xd->host); 177 xd->path, xd->host);
249 purple_xfer_get_remote_user(xfer), _("Unable to connect.")); 249 purple_xfer_get_remote_user(xfer), _("Unable to connect."));
250 purple_xfer_cancel_remote(xfer); 250 purple_xfer_cancel_remote(xfer);
251 return; 251 return;
252 } 252 }
253 253
254 xfer->fd = source; 254 purple_xfer_set_fd(xfer, source);
255 255
256 /* Assemble the tx buffer */ 256 /* Assemble the tx buffer */
257 gc = xd->gc; 257 gc = xd->gc;
258 account = purple_connection_get_account(gc); 258 account = purple_connection_get_account(gc);
259 yd = purple_connection_get_protocol_data(gc); 259 yd = purple_connection_get_protocol_data(gc);
260 260
261 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER, 261 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER,
262 YAHOO_STATUS_AVAILABLE, yd->session_id); 262 YAHOO_STATUS_AVAILABLE, yd->session_id);
263 263
264 size = g_strdup_printf("%" G_GSIZE_FORMAT, purple_xfer_get_size(xfer)); 264 size = g_strdup_printf("%" G_GOFFSET_FORMAT, purple_xfer_get_size(xfer));
265 265
266 /* yaz */ 266 /* yaz */
267 tmp = g_filename_display_basename(purple_xfer_get_local_filename(xfer)); 267 tmp = g_filename_display_basename(purple_xfer_get_local_filename(xfer));
268 filename = botch_utf(tmp, strlen(tmp), &dummy); 268 filename = botch_utf(tmp, strlen(tmp), &dummy);
269 g_free(tmp); 269 g_free(tmp);
282 282
283 host = purple_account_get_string(account, "xfer_host", YAHOO_XFER_HOST); 283 host = purple_account_get_string(account, "xfer_host", YAHOO_XFER_HOST);
284 port = purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT); 284 port = purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT);
285 header = g_strdup_printf( 285 header = g_strdup_printf(
286 "POST http://%s:%d/notifyft HTTP/1.0\r\n" 286 "POST http://%s:%d/notifyft HTTP/1.0\r\n"
287 "Content-length: %" G_GSIZE_FORMAT "\r\n" 287 "Content-length: %" G_GOFFSET_FORMAT "\r\n"
288 "Host: %s:%d\r\n" 288 "Host: %s:%d\r\n"
289 "Cookie: Y=%s; T=%s\r\n" 289 "Cookie: Y=%s; T=%s\r\n"
290 "\r\n", 290 "\r\n",
291 host, port, content_length + 4 + purple_xfer_get_size(xfer), 291 host, port, content_length + 4 + purple_xfer_get_size(xfer),
292 host, port, yd->cookie_y, yd->cookie_t); 292 host, port, yd->cookie_y, yd->cookie_t);
343 _("Unable to establish file descriptor.")); 343 _("Unable to establish file descriptor."));
344 purple_xfer_cancel_remote(xfer); 344 purple_xfer_cancel_remote(xfer);
345 } 345 }
346 } 346 }
347 } else { 347 } else {
348 xfer->fd = -1; 348 purple_xfer_set_fd(xfer, -1);
349 if (purple_proxy_connect(gc, account, xfer_data->host, xfer_data->port, 349 if (purple_proxy_connect(gc, account, xfer_data->host, xfer_data->port,
350 yahoo_receivefile_connected, xfer) == NULL) { 350 yahoo_receivefile_connected, xfer) == NULL) {
351 purple_notify_error(gc, NULL, _("File Transfer Failed"), 351 purple_notify_error(gc, NULL, _("File Transfer Failed"),
352 _("Unable to establish file descriptor.")); 352 _("Unable to establish file descriptor."));
353 purple_xfer_cancel_remote(xfer); 353 purple_xfer_cancel_remote(xfer);
381 222, 1, 381 222, 1,
382 266, 1, 382 266, 1,
383 302, 268, 383 302, 268,
384 300, 268, 384 300, 268,
385 27, filename, 385 27, filename,
386 28, purple_xfer_get_size(xfer), 386 28, (int)purple_xfer_get_size(xfer),
387 301, 268, 387 301, 268,
388 303, 268); 388 303, 268);
389 g_free(filename); 389 g_free(filename);
390 } else { 390 } else {
391 if(xfer_data->firstoflist == TRUE) { 391 if(xfer_data->firstoflist == TRUE) {
414 static void yahoo_xfer_start(PurpleXfer *xfer) 414 static void yahoo_xfer_start(PurpleXfer *xfer)
415 { 415 {
416 /* We don't need to do anything here, do we? */ 416 /* We don't need to do anything here, do we? */
417 } 417 }
418 418
419 static guint calculate_length(const gchar *l, size_t len) 419 static goffset calculate_length(const gchar *l, size_t len)
420 { 420 {
421 int i; 421 int i;
422 422
423 for (i = 0; i < len; i++) { 423 for (i = 0; i < len; i++) {
424 if (!g_ascii_isdigit(l[i])) 424 if (!g_ascii_isdigit(l[i]))
425 continue; 425 continue;
426 return strtol(l + i, NULL, 10); 426 return g_ascii_strtoll(l + i, NULL, 10);
427 } 427 }
428 return 0; 428 return 0;
429 } 429 }
430 430
431 static gssize yahoo_xfer_read(guchar **buffer, PurpleXfer *xfer) 431 static gssize yahoo_xfer_read(guchar **buffer, PurpleXfer *xfer)
433 gchar buf[4096]; 433 gchar buf[4096];
434 gssize len; 434 gssize len;
435 gchar *start = NULL; 435 gchar *start = NULL;
436 gchar *length; 436 gchar *length;
437 gchar *end; 437 gchar *end;
438 int filelen; 438 goffset filelen;
439 struct yahoo_xfer_data *xd = purple_xfer_get_protocol_data(xfer); 439 struct yahoo_xfer_data *xd = purple_xfer_get_protocol_data(xfer);
440 440
441 if (purple_xfer_get_type(xfer) != PURPLE_XFER_RECEIVE) { 441 if (purple_xfer_get_type(xfer) != PURPLE_XFER_RECEIVE) {
442 return 0; 442 return 0;
443 } 443 }
444 444
445 len = read(xfer->fd, buf, sizeof(buf)); 445 len = read(purple_xfer_get_fd(xfer), buf, sizeof(buf));
446 446
447 if (len <= 0) { 447 if (len <= 0) {
448 if ((purple_xfer_get_size(xfer) > 0) && 448 if ((purple_xfer_get_size(xfer) > 0) &&
449 (purple_xfer_get_bytes_sent(xfer) >= purple_xfer_get_size(xfer))) { 449 (purple_xfer_get_bytes_sent(xfer) >= purple_xfer_get_size(xfer))) {
450 purple_xfer_set_completed(xfer, TRUE); 450 purple_xfer_set_completed(xfer, TRUE);
503 503
504 if (purple_xfer_get_type(xfer) != PURPLE_XFER_SEND) { 504 if (purple_xfer_get_type(xfer) != PURPLE_XFER_SEND) {
505 return -1; 505 return -1;
506 } 506 }
507 507
508 len = write(xfer->fd, buffer, size); 508 len = write(purple_xfer_get_fd(xfer), buffer, size);
509 509
510 if (len == -1) { 510 if (len == -1) {
511 if (purple_xfer_get_bytes_sent(xfer) >= purple_xfer_get_size(xfer)) 511 if (purple_xfer_get_bytes_sent(xfer) >= purple_xfer_get_size(xfer))
512 purple_xfer_set_completed(xfer, TRUE); 512 purple_xfer_set_completed(xfer, TRUE);
513 if ((errno != EAGAIN) && (errno != EINTR)) 513 if ((errno != EAGAIN) && (errno != EINTR))
615 /* Send HTTP OK after receiving file */ 615 /* Send HTTP OK after receiving file */
616 static void yahoo_p2p_ft_server_send_OK(PurpleXfer *xfer) 616 static void yahoo_p2p_ft_server_send_OK(PurpleXfer *xfer)
617 { 617 {
618 char *tx = NULL; 618 char *tx = NULL;
619 int written; 619 int written;
620 int fd = purple_xfer_get_fd(xfer);
620 621
621 tx = "HTTP/1.1 200 OK\r\nContent-Length: 0\r\nContent-Type: application/octet-stream\r\nConnection: close\r\n\r\n"; 622 tx = "HTTP/1.1 200 OK\r\nContent-Length: 0\r\nContent-Type: application/octet-stream\r\nConnection: close\r\n\r\n";
622 written = write(xfer->fd, tx, strlen(tx)); 623 written = write(fd, tx, strlen(tx));
623 624
624 if (written < 0 && errno == EAGAIN) 625 if (written < 0 && errno == EAGAIN)
625 written = 0; 626 written = 0;
626 else if (written <= 0) 627 else if (written <= 0)
627 purple_debug_info("yahoo", "p2p filetransfer: Unable to write HTTP OK"); 628 purple_debug_info("yahoo", "p2p filetransfer: Unable to write HTTP OK");
628 629
629 /* close connection */ 630 /* close connection */
630 close(xfer->fd); 631 close(fd);
631 xfer->fd = -1; 632 purple_xfer_set_fd(xfer, -1);
632 } 633 }
633 634
634 static void yahoo_xfer_end(PurpleXfer *xfer_old) 635 static void yahoo_xfer_end(PurpleXfer *xfer_old)
635 { 636 {
636 struct yahoo_xfer_data *xfer_data; 637 struct yahoo_xfer_data *xfer_data;
642 if(xfer_data && xfer_data->version == 15 643 if(xfer_data && xfer_data->version == 15
643 && purple_xfer_get_type(xfer_old) == PURPLE_XFER_RECEIVE 644 && purple_xfer_get_type(xfer_old) == PURPLE_XFER_RECEIVE
644 && xfer_data->filename_list) { 645 && xfer_data->filename_list) {
645 646
646 /* Send HTTP OK in case of p2p transfer, when we act as server */ 647 /* Send HTTP OK in case of p2p transfer, when we act as server */
647 if((xfer_data->xfer_url != NULL) && (xfer_old->fd >=0) && (purple_xfer_get_status(xfer_old) == PURPLE_XFER_STATUS_DONE)) 648 if((xfer_data->xfer_url != NULL) && (purple_xfer_get_fd(xfer_old) >=0) && (purple_xfer_get_status(xfer_old) == PURPLE_XFER_STATUS_DONE))
648 yahoo_p2p_ft_server_send_OK(xfer_old); 649 yahoo_p2p_ft_server_send_OK(xfer_old);
649 650
650 /* removing top of filename & size list completely */ 651 /* removing top of filename & size list completely */
651 g_free( xfer_data->filename_list->data ); 652 g_free( xfer_data->filename_list->data );
652 g_free( xfer_data->size_list->data ); 653 g_free( xfer_data->size_list->data );
659 660
660 /* if there are still more files */ 661 /* if there are still more files */
661 if(xfer_data->filename_list) 662 if(xfer_data->filename_list)
662 { 663 {
663 gchar* filename; 664 gchar* filename;
664 long filesize; 665 goffset filesize;
665 666
666 filename = xfer_data->filename_list->data; 667 filename = xfer_data->filename_list->data;
667 filesize = atol( xfer_data->size_list->data ); 668 filesize = g_ascii_strtoll( xfer_data->size_list->data, NULL, 10 );
668 669
669 gc = xfer_data->gc; 670 gc = xfer_data->gc;
670 yd = purple_connection_get_protocol_data(gc); 671 yd = purple_connection_get_protocol_data(gc);
671 672
672 /* setting up xfer_data for next file's tranfer */ 673 /* setting up xfer_data for next file's tranfer */
695 696
696 /* Dereference xfer_data from old xfer */ 697 /* Dereference xfer_data from old xfer */
697 purple_xfer_set_protocol_data(xfer_old, NULL); 698 purple_xfer_set_protocol_data(xfer_old, NULL);
698 699
699 /* Build the file transfer handle. */ 700 /* Build the file transfer handle. */
700 xfer = purple_xfer_new(gc->account, PURPLE_XFER_RECEIVE, purple_xfer_get_remote_user(xfer_old)); 701 xfer = purple_xfer_new(purple_connection_get_account(gc), PURPLE_XFER_RECEIVE, purple_xfer_get_remote_user(xfer_old));
701 702
702 703
703 if (xfer) { 704 if (xfer) {
704 /* Set the info about the incoming file. */ 705 /* Set the info about the incoming file. */
705 char *utf8_filename = yahoo_string_decode(gc, filename, TRUE); 706 char *utf8_filename = yahoo_string_decode(gc, filename, TRUE);
805 PurpleXfer *xfer; 806 PurpleXfer *xfer;
806 YahooData *yd; 807 YahooData *yd;
807 struct yahoo_xfer_data *xfer_data; 808 struct yahoo_xfer_data *xfer_data;
808 char *service = NULL; 809 char *service = NULL;
809 char *filename = NULL; 810 char *filename = NULL;
810 unsigned long filesize = 0L; 811 goffset filesize = G_GOFFSET_CONSTANT(0);
811 GSList *l; 812 GSList *l;
812 813
813 yd = purple_connection_get_protocol_data(gc); 814 yd = purple_connection_get_protocol_data(gc);
814 815
815 for (l = pkt->hash; l; l = l->next) { 816 for (l = pkt->hash; l; l = l->next) {
833 break; 834 break;
834 case 27: 835 case 27:
835 filename = pair->value; 836 filename = pair->value;
836 break; 837 break;
837 case 28: 838 case 28:
838 filesize = atol(pair->value); 839 filesize = g_ascii_strtoll(pair->value, NULL, 10);
839 break; 840 break;
840 case 49: 841 case 49:
841 service = pair->value; 842 service = pair->value;
842 break; 843 break;
843 case 63: 844 case 63:
882 883
883 purple_debug_misc("yahoo_filexfer", "Host is %s, port is %d, path is %s, and the full url was %s.\n", 884 purple_debug_misc("yahoo_filexfer", "Host is %s, port is %d, path is %s, and the full url was %s.\n",
884 xfer_data->host, xfer_data->port, xfer_data->path, url); 885 xfer_data->host, xfer_data->port, xfer_data->path, url);
885 886
886 /* Build the file transfer handle. */ 887 /* Build the file transfer handle. */
887 xfer = purple_xfer_new(gc->account, PURPLE_XFER_RECEIVE, from); 888 xfer = purple_xfer_new(purple_connection_get_account(gc), PURPLE_XFER_RECEIVE, from);
888 if (xfer == NULL) { 889 if (xfer == NULL) {
889 g_free(xfer_data); 890 g_free(xfer_data);
890 g_return_if_reached(); 891 g_return_if_reached();
891 } 892 }
892 893
938 939
939 xfer_data = g_new0(struct yahoo_xfer_data, 1); 940 xfer_data = g_new0(struct yahoo_xfer_data, 1);
940 xfer_data->gc = gc; 941 xfer_data->gc = gc;
941 942
942 /* Build the file transfer handle. */ 943 /* Build the file transfer handle. */
943 xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who); 944 xfer = purple_xfer_new(purple_connection_get_account(gc), PURPLE_XFER_SEND, who);
944 if (xfer == NULL) 945 if (xfer == NULL)
945 { 946 {
946 g_free(xfer_data); 947 g_free(xfer_data);
947 g_return_val_if_reached(NULL); 948 g_return_val_if_reached(NULL);
948 } 949 }
1198 yahoo_xfer_recv_cb_15(xfer, source, PURPLE_INPUT_READ); 1199 yahoo_xfer_recv_cb_15(xfer, source, PURPLE_INPUT_READ);
1199 } 1200 }
1200 else if(purple_xfer_get_type(xfer) == PURPLE_XFER_RECEIVE && xd->status_15 == HEAD_REPLY_RECEIVED) 1201 else if(purple_xfer_get_type(xfer) == PURPLE_XFER_RECEIVE && xd->status_15 == HEAD_REPLY_RECEIVED)
1201 { 1202 {
1202 xd->status_15 = TRANSFER_PHASE; 1203 xd->status_15 = TRANSFER_PHASE;
1203 xfer->fd = source; 1204 purple_xfer_set_fd(xfer, source);
1204 purple_xfer_start(xfer, source, NULL, 0); 1205 purple_xfer_start(xfer, source, NULL, 0);
1205 } 1206 }
1206 else if(purple_xfer_get_type(xfer) == PURPLE_XFER_SEND && (xd->status_15 == ACCEPTED || xd->status_15 == P2P_GET_REQUESTED) ) 1207 else if(purple_xfer_get_type(xfer) == PURPLE_XFER_SEND && (xd->status_15 == ACCEPTED || xd->status_15 == P2P_GET_REQUESTED) )
1207 { 1208 {
1208 xd->status_15 = TRANSFER_PHASE; 1209 xd->status_15 = TRANSFER_PHASE;
1209 xfer->fd = source; 1210 purple_xfer_set_fd(xfer, source);
1210 /* Remove Read event */ 1211 /* Remove Read event */
1211 purple_input_remove(xd->input_event); 1212 purple_input_remove(xd->input_event);
1212 xd->input_event = 0; 1213 xd->input_event = 0;
1213 purple_xfer_start(xfer, source, NULL, 0); 1214 purple_xfer_start(xfer, source, NULL, 0);
1214 } 1215 }
1217 xd->status_15 = P2P_HEAD_REPLIED; 1218 xd->status_15 = P2P_HEAD_REPLIED;
1218 /* Remove Read event and close descriptor */ 1219 /* Remove Read event and close descriptor */
1219 purple_input_remove(xd->input_event); 1220 purple_input_remove(xd->input_event);
1220 xd->input_event = 0; 1221 xd->input_event = 0;
1221 close(source); 1222 close(source);
1222 xfer->fd = -1; 1223 purple_xfer_set_fd(xfer, -1);
1223 /* start local server, listen for connections */ 1224 /* start local server, listen for connections */
1224 purple_network_listen(xd->yahoo_local_p2p_ft_server_port, AF_UNSPEC, SOCK_STREAM, TRUE, yahoo_p2p_ft_server_listen_cb, xfer); 1225 purple_network_listen(xd->yahoo_local_p2p_ft_server_port, AF_UNSPEC, SOCK_STREAM, TRUE, yahoo_p2p_ft_server_listen_cb, xfer);
1225 } 1226 }
1226 else 1227 else
1227 { 1228 {
1268 { 1269 {
1269 /* sending file via p2p, we are connected as client */ 1270 /* sending file via p2p, we are connected as client */
1270 initial_buffer = g_strdup_printf("POST /%s HTTP/1.1\r\n" 1271 initial_buffer = g_strdup_printf("POST /%s HTTP/1.1\r\n"
1271 "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" 1272 "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n"
1272 "Host: %s\r\n" 1273 "Host: %s\r\n"
1273 "Content-Length: %" G_GSIZE_FORMAT "\r\n" 1274 "Content-Length: %" G_GOFFSET_FORMAT "\r\n"
1274 "Cache-Control: no-cache\r\n\r\n", 1275 "Cache-Control: no-cache\r\n\r\n",
1275 xd->path, 1276 xd->path,
1276 xd->host, 1277 xd->host,
1277 purple_xfer_get_size(xfer)); /* to do, add Referer */ 1278 purple_xfer_get_size(xfer)); /* to do, add Referer */
1278 } 1279 }
1281 /* sending file via relaying */ 1282 /* sending file via relaying */
1282 initial_buffer = g_strdup_printf("POST /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\n" 1283 initial_buffer = g_strdup_printf("POST /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\n"
1283 "Cookie:%s\r\n" 1284 "Cookie:%s\r\n"
1284 "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" 1285 "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n"
1285 "Host: %s\r\n" 1286 "Host: %s\r\n"
1286 "Content-Length: %" G_GSIZE_FORMAT "\r\n" 1287 "Content-Length: %" G_GOFFSET_FORMAT "\r\n"
1287 "Cache-Control: no-cache\r\n\r\n", 1288 "Cache-Control: no-cache\r\n\r\n",
1288 purple_url_encode(xd->xfer_idstring_for_relay), 1289 purple_url_encode(xd->xfer_idstring_for_relay),
1289 purple_normalize(account, purple_account_get_username(account)), 1290 purple_normalize(account, purple_account_get_username(account)),
1290 purple_xfer_get_remote_user(xfer), 1291 purple_xfer_get_remote_user(xfer),
1291 cookies, 1292 cookies,
1380 return; 1381 return;
1381 } 1382 }
1382 1383
1383 purple_input_remove(xd->input_event); 1384 purple_input_remove(xd->input_event);
1384 xd->status_15 = TRANSFER_PHASE; 1385 xd->status_15 = TRANSFER_PHASE;
1385 xfer->fd = source; 1386 purple_xfer_set_fd(xfer, source);
1386 purple_xfer_start(xfer, source, NULL, 0); 1387 purple_xfer_start(xfer, source, NULL, 0);
1387 } 1388 }
1388 1389
1389 static void yahoo_p2p_ft_HEAD_GET_cb(gpointer data, gint source, PurpleInputCondition cond) 1390 static void yahoo_p2p_ft_HEAD_GET_cb(gpointer data, gint source, PurpleInputCondition cond)
1390 { 1391 {
1436 gchar *initial_buffer = g_strdup_printf("HTTP/1.0 200 OK\r\n" 1437 gchar *initial_buffer = g_strdup_printf("HTTP/1.0 200 OK\r\n"
1437 "Date: %s GMT\r\n" 1438 "Date: %s GMT\r\n"
1438 "Server: Y!/1.0\r\n" 1439 "Server: Y!/1.0\r\n"
1439 "MIME-version: 1.0\r\n" 1440 "MIME-version: 1.0\r\n"
1440 "Last-modified: %s GMT\r\n" 1441 "Last-modified: %s GMT\r\n"
1441 "Content-length: %" G_GSIZE_FORMAT "\r\n\r\n", 1442 "Content-length: %" G_GOFFSET_FORMAT "\r\n\r\n",
1442 time_str, time_str, purple_xfer_get_size(xfer)); 1443 time_str, time_str, purple_xfer_get_size(xfer));
1443 xd->txbuf = (guchar *)initial_buffer; 1444 xd->txbuf = (guchar *)initial_buffer;
1444 xd->txbuflen = strlen(initial_buffer); 1445 xd->txbuflen = strlen(initial_buffer);
1445 xd->txbuf_written = 0; 1446 xd->txbuf_written = 0;
1446 } 1447 }
1481 /* remove watcher and close p2p ft server */ 1482 /* remove watcher and close p2p ft server */
1482 purple_input_remove(xd->yahoo_p2p_ft_server_watcher); 1483 purple_input_remove(xd->yahoo_p2p_ft_server_watcher);
1483 close(xd->yahoo_local_p2p_ft_server_fd); 1484 close(xd->yahoo_local_p2p_ft_server_fd);
1484 1485
1485 /* Add an Input Read event to the file descriptor */ 1486 /* Add an Input Read event to the file descriptor */
1486 xfer->fd = acceptfd; 1487 purple_xfer_set_fd(xfer, acceptfd);
1487 if(purple_xfer_get_type(xfer) == PURPLE_XFER_RECEIVE) 1488 if(purple_xfer_get_type(xfer) == PURPLE_XFER_RECEIVE)
1488 xd->input_event = purple_input_add(acceptfd, PURPLE_INPUT_READ, yahoo_p2p_ft_POST_cb, data); 1489 xd->input_event = purple_input_add(acceptfd, PURPLE_INPUT_READ, yahoo_p2p_ft_POST_cb, data);
1489 else 1490 else
1490 xd->input_event = purple_input_add(acceptfd, PURPLE_INPUT_READ, yahoo_p2p_ft_HEAD_GET_cb, data); 1491 xd->input_event = purple_input_add(acceptfd, PURPLE_INPUT_READ, yahoo_p2p_ft_HEAD_GET_cb, data);
1491 } 1492 }
1604 struct yahoo_xfer_data *xfer_data; 1605 struct yahoo_xfer_data *xfer_data;
1605 char *service = NULL; 1606 char *service = NULL;
1606 char *filename = NULL; 1607 char *filename = NULL;
1607 char *xfer_peer_idstring = NULL; 1608 char *xfer_peer_idstring = NULL;
1608 char *utf8_filename; 1609 char *utf8_filename;
1609 unsigned long filesize = 0L; 1610 goffset filesize = G_GOFFSET_CONSTANT(0);
1610 GSList *l; 1611 GSList *l;
1611 GSList *filename_list = NULL; 1612 GSList *filename_list = NULL;
1612 GSList *size_list = NULL; 1613 GSList *size_list = NULL;
1613 int nooffiles = 0; 1614 int nooffiles = 0;
1614 1615
1721 return; 1722 return;
1722 /* have to change list into order in which client at other end sends */ 1723 /* have to change list into order in which client at other end sends */
1723 filename_list = g_slist_reverse(filename_list); 1724 filename_list = g_slist_reverse(filename_list);
1724 size_list = g_slist_reverse(size_list); 1725 size_list = g_slist_reverse(size_list);
1725 filename = filename_list->data; 1726 filename = filename_list->data;
1726 filesize = atol(size_list->data); 1727 filesize = g_ascii_strtoll(size_list->data, NULL, 10);
1727 1728
1728 if(!from) return; 1729 if(!from) return;
1729 xfer_data = g_new0(struct yahoo_xfer_data, 1); 1730 xfer_data = g_new0(struct yahoo_xfer_data, 1);
1730 xfer_data->version = 15; 1731 xfer_data->version = 15;
1731 xfer_data->firstoflist = TRUE; 1732 xfer_data->firstoflist = TRUE;
1733 xfer_data->xfer_peer_idstring = g_strdup(xfer_peer_idstring); 1734 xfer_data->xfer_peer_idstring = g_strdup(xfer_peer_idstring);
1734 xfer_data->filename_list = filename_list; 1735 xfer_data->filename_list = filename_list;
1735 xfer_data->size_list = size_list; 1736 xfer_data->size_list = size_list;
1736 1737
1737 /* Build the file transfer handle. */ 1738 /* Build the file transfer handle. */
1738 xfer = purple_xfer_new(gc->account, PURPLE_XFER_RECEIVE, from); 1739 xfer = purple_xfer_new(purple_connection_get_account(gc), PURPLE_XFER_RECEIVE, from);
1739 if (xfer == NULL) 1740 if (xfer == NULL)
1740 { 1741 {
1741 g_free(xfer_data); 1742 g_free(xfer_data);
1742 g_return_if_reached(); 1743 g_return_if_reached();
1743 } 1744 }