diff options
author | irungentoo <irungentoo@gmail.com> | 2013-10-01 18:59:33 -0400 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2013-10-01 18:59:33 -0400 |
commit | 6182af8449920a0256b91affe74d873066b17c99 (patch) | |
tree | c700118aa53c4fb9825dc77ecea12bb9bf0a15f2 | |
parent | 6dbc8a54969421c5baeb0ec7bb50779c62ae2e44 (diff) |
nTox updated with changes in core, some file sending things fixes.
-rw-r--r-- | testing/nTox.c | 60 | ||||
-rw-r--r-- | toxcore/Messenger.c | 36 | ||||
-rw-r--r-- | toxcore/Messenger.h | 16 |
3 files changed, 104 insertions, 8 deletions
diff --git a/testing/nTox.c b/testing/nTox.c index cbf8d028..92827554 100644 --- a/testing/nTox.c +++ b/testing/nTox.c | |||
@@ -103,17 +103,26 @@ void send_filesenders(Tox *m) | |||
103 | } | 103 | } |
104 | int add_filesender(Tox *m, uint16_t friendnum, char *filename) | 104 | int add_filesender(Tox *m, uint16_t friendnum, char *filename) |
105 | { | 105 | { |
106 | file_senders[numfilesenders].file = fopen(filename, "r"); | 106 | FILE *tempfile = fopen(filename, "r"); |
107 | 107 | ||
108 | if (file_senders[numfilesenders].file == 0) | 108 | if (tempfile == 0) |
109 | return -1; | 109 | return -1; |
110 | 110 | ||
111 | fseek(tempfile, 0, SEEK_END); | ||
112 | uint64_t filesize = ftell(tempfile); | ||
113 | fseek(tempfile, 0, SEEK_SET); | ||
114 | int filenum = new_filesender(m, friendnum, filesize, filename, strlen(filename) + 1); | ||
115 | |||
116 | if (filenum == -1) | ||
117 | return -1; | ||
118 | |||
119 | file_senders[numfilesenders].file = tempfile; | ||
111 | file_senders[numfilesenders].piecelength = fread(file_senders[numfilesenders].nextpiece, 1, 1000, | 120 | file_senders[numfilesenders].piecelength = fread(file_senders[numfilesenders].nextpiece, 1, 1000, |
112 | file_senders[numfilesenders].file); | 121 | file_senders[numfilesenders].file); |
113 | file_senders[numfilesenders].friendnum = friendnum; | 122 | file_senders[numfilesenders].friendnum = friendnum; |
114 | file_senders[numfilesenders].filenumber = numfilesenders; | 123 | file_senders[numfilesenders].filenumber = filenum; |
115 | ++numfilesenders; | 124 | ++numfilesenders; |
116 | return (numfilesenders - 1); | 125 | return filenum; |
117 | } | 126 | } |
118 | 127 | ||
119 | /* | 128 | /* |
@@ -421,7 +430,7 @@ void line_eval(Tox *m, char *line) | |||
421 | int friendnum = strtoul(line + prompt_offset, posi, 0); | 430 | int friendnum = strtoul(line + prompt_offset, posi, 0); |
422 | 431 | ||
423 | if (**posi != 0) { | 432 | if (**posi != 0) { |
424 | sprintf(msg, "[t] Sending file %s to friendnum %u returned %i (-1 means failure)", *posi + 1, friendnum, | 433 | sprintf(msg, "[t] Sending file %s to friendnum %u filenumber is %i (-1 means failure)", *posi + 1, friendnum, |
425 | add_filesender(m, friendnum, *posi + 1)); | 434 | add_filesender(m, friendnum, *posi + 1)); |
426 | new_lines(msg); | 435 | new_lines(msg); |
427 | } | 436 | } |
@@ -645,11 +654,48 @@ void print_groupmessage(Tox *m, int groupnumber, int peernumber, uint8_t *messag | |||
645 | new_lines(msg); | 654 | new_lines(msg); |
646 | } | 655 | } |
647 | 656 | ||
648 | void write_file(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata) | 657 | void file_request_accept(Tox *m, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, |
658 | uint16_t filename_length, void *userdata) | ||
659 | { | ||
660 | char msg[512]; | ||
661 | sprintf(msg, "[t] %u is sending us: %s of size %llu", friendnumber, filename, filesize); | ||
662 | new_lines(msg); | ||
663 | |||
664 | if (file_control(m, friendnumber, filenumber, 0, 0, 0)) { | ||
665 | sprintf(msg, "Accepted file transfer. (saving file as: %u.%u.bin)", friendnumber, filenumber); | ||
666 | new_lines(msg); | ||
667 | } else | ||
668 | new_lines("Could not accept file transfer."); | ||
669 | } | ||
670 | |||
671 | void file_print_control(Tox *m, int friendnumber, uint8_t filenumber, uint8_t control_type, uint8_t *data, | ||
672 | uint16_t length, void *userdata) | ||
673 | { | ||
674 | char msg[512] = {0}; | ||
675 | |||
676 | if (control_type == 0) | ||
677 | sprintf(msg, "[t] %u accepted file transfer: %u", friendnumber, filenumber, friendnumber, filenumber); | ||
678 | else if (control_type == 3) | ||
679 | sprintf(msg, "[t] %u file transfer: %u completed", friendnumber, filenumber); | ||
680 | else | ||
681 | sprintf(msg, "[t] control %u received", control_type); | ||
682 | |||
683 | new_lines(msg); | ||
684 | } | ||
685 | |||
686 | void write_file(Tox *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata) | ||
649 | { | 687 | { |
650 | char filename[256]; | 688 | char filename[256]; |
651 | sprintf(filename, "%u.%u.bin", friendnumber, filenumber); | 689 | sprintf(filename, "%u.%u.bin", friendnumber, filenumber); |
652 | FILE *pFile = fopen(filename, "a"); | 690 | FILE *pFile = fopen(filename, "a"); |
691 | |||
692 | if (file_dataremaining(m, friendnumber, filenumber, 1) == 0) { | ||
693 | file_control(m, friendnumber, filenumber, 3, 0, 0); | ||
694 | char msg[512]; | ||
695 | sprintf(msg, "[t] %u file transfer: %u completed", friendnumber, filenumber); | ||
696 | new_lines(msg); | ||
697 | } | ||
698 | |||
653 | fwrite(data, length, 1, pFile); | 699 | fwrite(data, length, 1, pFile); |
654 | fclose(pFile); | 700 | fclose(pFile); |
655 | } | 701 | } |
@@ -702,6 +748,8 @@ int main(int argc, char *argv[]) | |||
702 | tox_callback_group_invite(m, print_invite, NULL); | 748 | tox_callback_group_invite(m, print_invite, NULL); |
703 | tox_callback_group_message(m, print_groupmessage, NULL); | 749 | tox_callback_group_message(m, print_groupmessage, NULL); |
704 | callback_file_data(m, write_file, NULL); | 750 | callback_file_data(m, write_file, NULL); |
751 | callback_file_control(m, file_print_control, NULL); | ||
752 | callback_file_sendrequest(m, file_request_accept, NULL); | ||
705 | 753 | ||
706 | initscr(); | 754 | initscr(); |
707 | noecho(); | 755 | noecho(); |
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c index 39bcd704..49be4a0a 100644 --- a/toxcore/Messenger.c +++ b/toxcore/Messenger.c | |||
@@ -1038,7 +1038,7 @@ int file_control(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t mes | |||
1038 | if (friend_not_valid(m, friendnumber)) | 1038 | if (friend_not_valid(m, friendnumber)) |
1039 | return 0; | 1039 | return 0; |
1040 | 1040 | ||
1041 | if (m->friendlist[friendnumber].file_sending[filenumber].status == 0) | 1041 | if (m->friendlist[friendnumber].file_receiving[filenumber].status == 0) |
1042 | return 0; | 1042 | return 0; |
1043 | 1043 | ||
1044 | uint8_t packet[MAX_DATA_SIZE]; | 1044 | uint8_t packet[MAX_DATA_SIZE]; |
@@ -1097,6 +1097,34 @@ int file_data(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t *data, | |||
1097 | return 0; | 1097 | return 0; |
1098 | 1098 | ||
1099 | } | 1099 | } |
1100 | |||
1101 | /* Give the number of bytes left to be sent/received. | ||
1102 | * | ||
1103 | * send_receive is 0 if we want the sending files, 1 if we want the receiving. | ||
1104 | * | ||
1105 | * return number of bytes remaining to be sent/received on success | ||
1106 | * return 0 on failure | ||
1107 | */ | ||
1108 | uint64_t file_dataremaining(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t send_receive) | ||
1109 | { | ||
1110 | if (friend_not_valid(m, friendnumber)) | ||
1111 | return 0; | ||
1112 | |||
1113 | if (send_receive == 0) { | ||
1114 | if (m->friendlist[friendnumber].file_sending[filenumber].status == 0) | ||
1115 | return 0; | ||
1116 | |||
1117 | return m->friendlist[friendnumber].file_sending[filenumber].size - | ||
1118 | m->friendlist[friendnumber].file_sending[filenumber].transferred; | ||
1119 | } else { | ||
1120 | if (m->friendlist[friendnumber].file_receiving[filenumber].status == 0) | ||
1121 | return 0; | ||
1122 | |||
1123 | return m->friendlist[friendnumber].file_receiving[filenumber].size - | ||
1124 | m->friendlist[friendnumber].file_receiving[filenumber].transferred; | ||
1125 | } | ||
1126 | } | ||
1127 | |||
1100 | /* Run this when the friend disconnects. | 1128 | /* Run this when the friend disconnects. |
1101 | * Sets all current file transfers to broken. | 1129 | * Sets all current file transfers to broken. |
1102 | */ | 1130 | */ |
@@ -1427,9 +1455,11 @@ void doFriends(Messenger *m) | |||
1427 | uint8_t filenumber = data[0]; | 1455 | uint8_t filenumber = data[0]; |
1428 | uint64_t filesize; | 1456 | uint64_t filesize; |
1429 | memcpy(&filesize, data + 1, sizeof(filesize)); | 1457 | memcpy(&filesize, data + 1, sizeof(filesize)); |
1430 | |||
1431 | //TODO: | 1458 | //TODO: |
1432 | //filesize = ntohll(filesize); | 1459 | //filesize = ntohll(filesize); |
1460 | m->friendlist[i].file_receiving[filenumber].status = 1; | ||
1461 | m->friendlist[i].file_receiving[filenumber].size = filesize; | ||
1462 | |||
1433 | if (m->file_sendrequest) | 1463 | if (m->file_sendrequest) |
1434 | (*m->file_sendrequest)(m, i, filenumber, filesize, data + 1 + sizeof(uint64_t), data_length - 1 - sizeof(uint64_t), | 1464 | (*m->file_sendrequest)(m, i, filenumber, filesize, data + 1 + sizeof(uint64_t), data_length - 1 - sizeof(uint64_t), |
1435 | m->file_sendrequest_userdata); | 1465 | m->file_sendrequest_userdata); |
@@ -1462,6 +1492,8 @@ void doFriends(Messenger *m) | |||
1462 | if (m->friendlist[i].file_receiving[filenumber].status == 0) | 1492 | if (m->friendlist[i].file_receiving[filenumber].status == 0) |
1463 | break; | 1493 | break; |
1464 | 1494 | ||
1495 | m->friendlist[i].file_receiving[filenumber].transferred += (data_length - 1); | ||
1496 | |||
1465 | if (m->file_filedata) | 1497 | if (m->file_filedata) |
1466 | (*m->file_filedata)(m, i, filenumber, data + 1, data_length - 1, m->file_filedata_userdata); | 1498 | (*m->file_filedata)(m, i, filenumber, data + 1, data_length - 1, m->file_filedata_userdata); |
1467 | 1499 | ||
diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h index fbf4d767..ca99fa18 100644 --- a/toxcore/Messenger.h +++ b/toxcore/Messenger.h | |||
@@ -502,6 +502,13 @@ void callback_file_data(Messenger *m, void (*function)(Messenger *m, int, uint8_ | |||
502 | int file_sendrequest(Messenger *m, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, | 502 | int file_sendrequest(Messenger *m, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, |
503 | uint16_t filename_length); | 503 | uint16_t filename_length); |
504 | 504 | ||
505 | /* Send a file send request. | ||
506 | * Maximum filename length is 256 bytes. | ||
507 | * return file number on success | ||
508 | * return -1 on failure | ||
509 | */ | ||
510 | int new_filesender(Messenger *m, int friendnumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length); | ||
511 | |||
505 | /* Send a file control request. | 512 | /* Send a file control request. |
506 | * | 513 | * |
507 | * return 1 on success | 514 | * return 1 on success |
@@ -517,6 +524,15 @@ int file_control(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t mes | |||
517 | */ | 524 | */ |
518 | int file_data(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length); | 525 | int file_data(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length); |
519 | 526 | ||
527 | /* Give the number of bytes left to be sent/received. | ||
528 | * | ||
529 | * send_receive is 0 if we want the sending files, 1 if we want the receiving. | ||
530 | * | ||
531 | * return number of bytes remaining to be sent/received on success | ||
532 | * return 0 on failure | ||
533 | */ | ||
534 | uint64_t file_dataremaining(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t send_receive); | ||
535 | |||
520 | /*********************************/ | 536 | /*********************************/ |
521 | 537 | ||
522 | /* Run this at startup. | 538 | /* Run this at startup. |