| 258 yd = purple_connection_get_protocol_data(gc); |
258 yd = purple_connection_get_protocol_data(gc); |
| 259 |
259 |
| 260 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER, |
260 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER, |
| 261 YAHOO_STATUS_AVAILABLE, yd->session_id); |
261 YAHOO_STATUS_AVAILABLE, yd->session_id); |
| 262 |
262 |
| 263 size = g_strdup_printf("%" G_GSIZE_FORMAT, purple_xfer_get_size(xfer)); |
263 size = g_strdup_printf("%" G_GOFFSET_FORMAT, purple_xfer_get_size(xfer)); |
| 264 filename = g_path_get_basename(purple_xfer_get_local_filename(xfer)); |
264 filename = g_path_get_basename(purple_xfer_get_local_filename(xfer)); |
| 265 encoded_filename = yahoo_string_encode(gc, filename, NULL); |
265 encoded_filename = yahoo_string_encode(gc, filename, NULL); |
| 266 |
266 |
| 267 yahoo_packet_hash(pkt, "sssss", 0, purple_connection_get_display_name(gc), |
267 yahoo_packet_hash(pkt, "sssss", 0, purple_connection_get_display_name(gc), |
| 268 5, purple_xfer_get_remote_user(xfer), 14, "", 27, encoded_filename, 28, size); |
268 5, purple_xfer_get_remote_user(xfer), 14, "", 27, encoded_filename, 28, size); |
| 277 |
277 |
| 278 host = purple_account_get_string(account, "xfer_host", YAHOO_XFER_HOST); |
278 host = purple_account_get_string(account, "xfer_host", YAHOO_XFER_HOST); |
| 279 port = purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT); |
279 port = purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT); |
| 280 header = g_strdup_printf( |
280 header = g_strdup_printf( |
| 281 "POST http://%s:%d/notifyft HTTP/1.0\r\n" |
281 "POST http://%s:%d/notifyft HTTP/1.0\r\n" |
| 282 "Content-length: %" G_GSIZE_FORMAT "\r\n" |
282 "Content-length: %" G_GOFFSET_FORMAT "\r\n" |
| 283 "Host: %s:%d\r\n" |
283 "Host: %s:%d\r\n" |
| 284 "Cookie: Y=%s; T=%s\r\n" |
284 "Cookie: Y=%s; T=%s\r\n" |
| 285 "\r\n", |
285 "\r\n", |
| 286 host, port, content_length + 4 + purple_xfer_get_size(xfer), |
286 host, port, content_length + 4 + purple_xfer_get_size(xfer), |
| 287 host, port, yd->cookie_y, yd->cookie_t); |
287 host, port, yd->cookie_y, yd->cookie_t); |
| 409 static void yahoo_xfer_start(PurpleXfer *xfer) |
409 static void yahoo_xfer_start(PurpleXfer *xfer) |
| 410 { |
410 { |
| 411 /* We don't need to do anything here, do we? */ |
411 /* We don't need to do anything here, do we? */ |
| 412 } |
412 } |
| 413 |
413 |
| 414 static guint calculate_length(const gchar *l, size_t len) |
414 static goffset calculate_length(const gchar *l, size_t len) |
| 415 { |
415 { |
| 416 int i; |
416 int i; |
| 417 |
417 |
| 418 for (i = 0; i < len; i++) { |
418 for (i = 0; i < len; i++) { |
| 419 if (!g_ascii_isdigit(l[i])) |
419 if (!g_ascii_isdigit(l[i])) |
| 420 continue; |
420 continue; |
| 421 return strtol(l + i, NULL, 10); |
421 return g_ascii_strtoll(l + i, NULL, 10); |
| 422 } |
422 } |
| 423 return 0; |
423 return 0; |
| 424 } |
424 } |
| 425 |
425 |
| 426 static gssize yahoo_xfer_read(guchar **buffer, PurpleXfer *xfer) |
426 static gssize yahoo_xfer_read(guchar **buffer, PurpleXfer *xfer) |
| 654 |
654 |
| 655 /* if there are still more files */ |
655 /* if there are still more files */ |
| 656 if(xfer_data->filename_list) |
656 if(xfer_data->filename_list) |
| 657 { |
657 { |
| 658 gchar* filename; |
658 gchar* filename; |
| 659 long filesize; |
659 goffset filesize; |
| 660 |
660 |
| 661 filename = xfer_data->filename_list->data; |
661 filename = xfer_data->filename_list->data; |
| 662 filesize = atol( xfer_data->size_list->data ); |
662 filesize = g_ascii_strtoll( xfer_data->size_list->data, NULL, 10 ); |
| 663 |
663 |
| 664 gc = xfer_data->gc; |
664 gc = xfer_data->gc; |
| 665 yd = purple_connection_get_protocol_data(gc); |
665 yd = purple_connection_get_protocol_data(gc); |
| 666 |
666 |
| 667 /* setting up xfer_data for next file's tranfer */ |
667 /* setting up xfer_data for next file's tranfer */ |
| 800 PurpleXfer *xfer; |
800 PurpleXfer *xfer; |
| 801 YahooData *yd; |
801 YahooData *yd; |
| 802 struct yahoo_xfer_data *xfer_data; |
802 struct yahoo_xfer_data *xfer_data; |
| 803 char *service = NULL; |
803 char *service = NULL; |
| 804 char *filename = NULL; |
804 char *filename = NULL; |
| 805 unsigned long filesize = 0L; |
805 goffset filesize = G_GOFFSET_CONSTANT(0); |
| 806 GSList *l; |
806 GSList *l; |
| 807 |
807 |
| 808 yd = purple_connection_get_protocol_data(gc); |
808 yd = purple_connection_get_protocol_data(gc); |
| 809 |
809 |
| 810 for (l = pkt->hash; l; l = l->next) { |
810 for (l = pkt->hash; l; l = l->next) { |
| 1263 { |
1263 { |
| 1264 /* sending file via p2p, we are connected as client */ |
1264 /* sending file via p2p, we are connected as client */ |
| 1265 initial_buffer = g_strdup_printf("POST /%s HTTP/1.1\r\n" |
1265 initial_buffer = g_strdup_printf("POST /%s HTTP/1.1\r\n" |
| 1266 "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" |
1266 "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" |
| 1267 "Host: %s\r\n" |
1267 "Host: %s\r\n" |
| 1268 "Content-Length: %" G_GSIZE_FORMAT "\r\n" |
1268 "Content-Length: %" G_GOFFSET_FORMAT "\r\n" |
| 1269 "Cache-Control: no-cache\r\n\r\n", |
1269 "Cache-Control: no-cache\r\n\r\n", |
| 1270 xd->path, |
1270 xd->path, |
| 1271 xd->host, |
1271 xd->host, |
| 1272 purple_xfer_get_size(xfer)); /* to do, add Referer */ |
1272 purple_xfer_get_size(xfer)); /* to do, add Referer */ |
| 1273 } |
1273 } |
| 1276 /* sending file via relaying */ |
1276 /* sending file via relaying */ |
| 1277 initial_buffer = g_strdup_printf("POST /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\n" |
1277 initial_buffer = g_strdup_printf("POST /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\n" |
| 1278 "Cookie:%s\r\n" |
1278 "Cookie:%s\r\n" |
| 1279 "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" |
1279 "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" |
| 1280 "Host: %s\r\n" |
1280 "Host: %s\r\n" |
| 1281 "Content-Length: %" G_GSIZE_FORMAT "\r\n" |
1281 "Content-Length: %" G_GOFFSET_FORMAT "\r\n" |
| 1282 "Cache-Control: no-cache\r\n\r\n", |
1282 "Cache-Control: no-cache\r\n\r\n", |
| 1283 purple_url_encode(xd->xfer_idstring_for_relay), |
1283 purple_url_encode(xd->xfer_idstring_for_relay), |
| 1284 purple_normalize(account, purple_account_get_username(account)), |
1284 purple_normalize(account, purple_account_get_username(account)), |
| 1285 purple_xfer_get_remote_user(xfer), |
1285 purple_xfer_get_remote_user(xfer), |
| 1286 cookies, |
1286 cookies, |
| 1431 gchar *initial_buffer = g_strdup_printf("HTTP/1.0 200 OK\r\n" |
1431 gchar *initial_buffer = g_strdup_printf("HTTP/1.0 200 OK\r\n" |
| 1432 "Date: %s GMT\r\n" |
1432 "Date: %s GMT\r\n" |
| 1433 "Server: Y!/1.0\r\n" |
1433 "Server: Y!/1.0\r\n" |
| 1434 "MIME-version: 1.0\r\n" |
1434 "MIME-version: 1.0\r\n" |
| 1435 "Last-modified: %s GMT\r\n" |
1435 "Last-modified: %s GMT\r\n" |
| 1436 "Content-length: %" G_GSIZE_FORMAT "\r\n\r\n", |
1436 "Content-length: %" G_GOFFSET_FORMAT "\r\n\r\n", |
| 1437 time_str, time_str, purple_xfer_get_size(xfer)); |
1437 time_str, time_str, purple_xfer_get_size(xfer)); |
| 1438 xd->txbuf = (guchar *)initial_buffer; |
1438 xd->txbuf = (guchar *)initial_buffer; |
| 1439 xd->txbuflen = strlen(initial_buffer); |
1439 xd->txbuflen = strlen(initial_buffer); |
| 1440 xd->txbuf_written = 0; |
1440 xd->txbuf_written = 0; |
| 1441 } |
1441 } |
| 1599 struct yahoo_xfer_data *xfer_data; |
1599 struct yahoo_xfer_data *xfer_data; |
| 1600 char *service = NULL; |
1600 char *service = NULL; |
| 1601 char *filename = NULL; |
1601 char *filename = NULL; |
| 1602 char *xfer_peer_idstring = NULL; |
1602 char *xfer_peer_idstring = NULL; |
| 1603 char *utf8_filename; |
1603 char *utf8_filename; |
| 1604 unsigned long filesize = 0L; |
1604 goffset filesize = G_GOFFSET_CONSTANT(0); |
| 1605 GSList *l; |
1605 GSList *l; |
| 1606 GSList *filename_list = NULL; |
1606 GSList *filename_list = NULL; |
| 1607 GSList *size_list = NULL; |
1607 GSList *size_list = NULL; |
| 1608 int nooffiles = 0; |
1608 int nooffiles = 0; |
| 1609 |
1609 |
| 1716 return; |
1716 return; |
| 1717 /* have to change list into order in which client at other end sends */ |
1717 /* have to change list into order in which client at other end sends */ |
| 1718 filename_list = g_slist_reverse(filename_list); |
1718 filename_list = g_slist_reverse(filename_list); |
| 1719 size_list = g_slist_reverse(size_list); |
1719 size_list = g_slist_reverse(size_list); |
| 1720 filename = filename_list->data; |
1720 filename = filename_list->data; |
| 1721 filesize = atol(size_list->data); |
1721 filesize = g_ascii_strtoll(size_list->data, NULL, 10); |
| 1722 |
1722 |
| 1723 if(!from) return; |
1723 if(!from) return; |
| 1724 xfer_data = g_new0(struct yahoo_xfer_data, 1); |
1724 xfer_data = g_new0(struct yahoo_xfer_data, 1); |
| 1725 xfer_data->version = 15; |
1725 xfer_data->version = 15; |
| 1726 xfer_data->firstoflist = TRUE; |
1726 xfer_data->firstoflist = TRUE; |