comparison src/toc.c @ 1469:d74112de59ed

[gaim-migrate @ 1479] get file in toc works (send file works better on different-endianness? systems. bah i hate endianness). also i like jabber.org as my primary server :-D committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Sun, 04 Feb 2001 11:05:04 +0000
parents 1a24237f5865
children 5a5284be5d66
comparison
equal deleted inserted replaced
1468:9db35684c68c 1469:d74112de59ed
46 #include "pixmaps/aol_icon.xpm" 46 #include "pixmaps/aol_icon.xpm"
47 #include "pixmaps/away_icon.xpm" 47 #include "pixmaps/away_icon.xpm"
48 #include "pixmaps/dt_icon.xpm" 48 #include "pixmaps/dt_icon.xpm"
49 #include "pixmaps/free_icon.xpm" 49 #include "pixmaps/free_icon.xpm"
50 50
51 #define REVISION "gaim:$Revision: 1476 $" 51 #define REVISION "gaim:$Revision: 1479 $"
52 52
53 #define TYPE_SIGNON 1 53 #define TYPE_SIGNON 1
54 #define TYPE_DATA 2 54 #define TYPE_DATA 2
55 #define TYPE_ERROR 3 55 #define TYPE_ERROR 3
56 #define TYPE_SIGNOFF 4 56 #define TYPE_SIGNOFF 4
1416 ft->recvsize += rt; 1416 ft->recvsize += rt;
1417 for (i = 0; i < rt; i++) 1417 for (i = 0; i < rt; i++)
1418 fprintf(ft->file, "%c", buf[i]); 1418 fprintf(ft->file, "%c", buf[i]);
1419 1419
1420 if (ft->recvsize == ntohl(ft->hdr.size)) { 1420 if (ft->recvsize == ntohl(ft->hdr.size)) {
1421 ft->hdr.hdrtype = 0x402; 1421 ft->hdr.hdrtype = htons(0x0204);
1422 ft->hdr.filesleft = htons(ntohs(ft->hdr.filesleft) - 1); 1422 ft->hdr.filesleft = htons(ntohs(ft->hdr.filesleft) - 1);
1423 ft->hdr.partsleft = htons(ntohs(ft->hdr.partsleft) - 1); 1423 ft->hdr.partsleft = htons(ntohs(ft->hdr.partsleft) - 1);
1424 ft->hdr.recvcsum = ft->hdr.checksum; /* uh... */ 1424 ft->hdr.recvcsum = ft->hdr.checksum; /* uh... */
1425 ft->hdr.nrecvd = htons(ntohs(ft->hdr.nrecvd) + 1); 1425 ft->hdr.nrecvd = htons(ntohs(ft->hdr.nrecvd) + 1);
1426 ft->hdr.flags = 0; 1426 ft->hdr.flags = 0;
1427 write(source, ft, 256); 1427 write(source, ft, 256);
1428 debug_header(ft);
1428 ft->recvsize = 0; 1429 ft->recvsize = 0;
1429 fclose(ft->file); 1430 fclose(ft->file);
1430 if (ft->hdr.filesleft == 0) { 1431 if (ft->hdr.filesleft == 0) {
1431 gdk_input_remove(ft->inpa); 1432 gdk_input_remove(ft->inpa);
1432 close(source); 1433 close(source);
1490 char buf[BUF_LONG]; 1491 char buf[BUF_LONG];
1491 1492
1492 struct file_transfer *ft = data; 1493 struct file_transfer *ft = data;
1493 1494
1494 if (cond & GDK_INPUT_EXCEPTION) { 1495 if (cond & GDK_INPUT_EXCEPTION) {
1496 do_error_dialog("The file tranfer has been aborted; the other side most likely"
1497 " cancelled.", "Error");
1495 gdk_input_remove(ft->inpa); 1498 gdk_input_remove(ft->inpa);
1496 close(source); 1499 close(source);
1497 g_free(ft->filename); 1500 g_free(ft->filename);
1498 g_free(ft->user); 1501 g_free(ft->user);
1499 g_free(ft->ip); 1502 g_free(ft->ip);
1517 toc_get_file_callback, ft); 1520 toc_get_file_callback, ft);
1518 } 1521 }
1519 return; 1522 return;
1520 } 1523 }
1521 1524
1522 if (ft->hdr.hdrtype == 0x0811) { 1525 if (ft->hdr.hdrtype == htons(0x1108)) {
1523 struct tm *fortime; 1526 struct tm *fortime;
1524 struct stat st; 1527 struct stat st;
1525 1528
1526 read(source, ft, 8); 1529 read(source, ft, 8);
1527 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); 1530 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8));
1531 fortime = localtime(&st.st_mtime); 1534 fortime = localtime(&st.st_mtime);
1532 g_snprintf(buf, sizeof(buf), "%2d/%2d/%4d %2d:%2d %8ld %s\r\n", 1535 g_snprintf(buf, sizeof(buf), "%2d/%2d/%4d %2d:%2d %8ld %s\r\n",
1533 fortime->tm_mon + 1, fortime->tm_mday, fortime->tm_year + 1900, 1536 fortime->tm_mon + 1, fortime->tm_mday, fortime->tm_year + 1900,
1534 fortime->tm_hour + 1, fortime->tm_min + 1, (long)st.st_size, 1537 fortime->tm_hour + 1, fortime->tm_min + 1, (long)st.st_size,
1535 g_basename(ft->filename)); 1538 g_basename(ft->filename));
1536 write(source, ft, 256); 1539 write(source, buf, ntohl(ft->hdr.size));
1537 return; 1540 return;
1538 } 1541 }
1539 1542
1540 if (ft->hdr.hdrtype == 0x0912) { 1543 if (ft->hdr.hdrtype == htons(0x1209)) {
1541 read(source, ft, 8); 1544 read(source, ft, 8);
1542 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); 1545 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8));
1543 debug_header(ft); 1546 debug_header(ft);
1544 return; 1547 return;
1545 } 1548 }
1546 1549
1547 if (ft->hdr.hdrtype == 0x0b12) { 1550 if (ft->hdr.hdrtype == htons(0x120b)) {
1548 read(source, ft, 8); 1551 read(source, ft, 8);
1549 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); 1552 read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8));
1550 debug_header(ft); 1553 debug_header(ft);
1551 1554
1552 if (ft->hdr.hdrtype != 0xc12) { 1555 if (ft->hdr.hdrtype != htons(0x120c)) {
1553 g_snprintf(buf, sizeof(buf), "%s decided to cancel the transfer", ft->user); 1556 g_snprintf(buf, sizeof(buf), "%s decided to cancel the transfer", ft->user);
1557 do_error_dialog(buf, "Error");
1554 gdk_input_remove(ft->inpa); 1558 gdk_input_remove(ft->inpa);
1555 close(source); 1559 close(source);
1556 g_free(ft->filename); 1560 g_free(ft->filename);
1557 g_free(ft->user); 1561 g_free(ft->user);
1558 g_free(ft->ip); 1562 g_free(ft->ip);
1659 } 1663 }
1660 1664
1661 hdr = (struct file_header *)ft; 1665 hdr = (struct file_header *)ft;
1662 hdr->magic[0] = 'O'; hdr->magic[1] = 'F'; hdr->magic[2] = 'T'; hdr->magic[3] = '2'; 1666 hdr->magic[0] = 'O'; hdr->magic[1] = 'F'; hdr->magic[2] = 'T'; hdr->magic[3] = '2';
1663 hdr->hdrlen = htons(256); 1667 hdr->hdrlen = htons(256);
1664 hdr->hdrtype = 0x0811; 1668 hdr->hdrtype = htons(0x1108);
1665 buf = frombase64(ft->cookie); 1669 buf = frombase64(ft->cookie);
1666 g_snprintf(hdr->bcookie, 8, "%s", buf); 1670 g_snprintf(hdr->bcookie, 8, "%s", buf);
1667 g_free (buf); 1671 g_free(buf);
1668 hdr->totfiles = htons(1); hdr->filesleft = htons(1); 1672 hdr->totfiles = htons(1); hdr->filesleft = htons(1);
1669 hdr->totparts = htons(1); hdr->partsleft = htons(1); 1673 hdr->totparts = htons(1); hdr->partsleft = htons(1);
1670 hdr->totsize = htonl((long)st.st_size); /* combined size of all files */ 1674 hdr->totsize = htonl((long)st.st_size); /* combined size of all files */
1671 /* size = strlen("mm/dd/yyyy hh:mm sizesize 'name'\r\n") */ 1675 /* size = strlen("mm/dd/yyyy hh:mm sizesize 'name'\r\n") */
1672 hdr->size = htonl(28 + strlen(g_basename(ft->filename))); /* size of listing.txt */ 1676 hdr->size = htonl(28 + strlen(g_basename(ft->filename))); /* size of listing.txt */