summaryrefslogtreecommitdiff
path: root/testing/nTox.c
diff options
context:
space:
mode:
Diffstat (limited to 'testing/nTox.c')
-rw-r--r--testing/nTox.c125
1 files changed, 125 insertions, 0 deletions
diff --git a/testing/nTox.c b/testing/nTox.c
index 6ac663a6..f82c0fba 100644
--- a/testing/nTox.c
+++ b/testing/nTox.c
@@ -67,6 +67,68 @@ typedef struct {
67Friend_request pending_requests[256]; 67Friend_request pending_requests[256];
68uint8_t num_requests = 0; 68uint8_t num_requests = 0;
69 69
70#define NUM_FILE_SENDERS 256
71typedef struct {
72 FILE *file;
73 uint16_t friendnum;
74 uint8_t filenumber;
75 uint8_t nextpiece[1024];
76 uint16_t piecelength;
77} File_Sender;
78File_Sender file_senders[NUM_FILE_SENDERS];
79uint8_t numfilesenders;
80
81void send_filesenders(Tox *m)
82{
83 uint32_t i;
84
85 for (i = 0; i < NUM_FILE_SENDERS; ++i) {
86 if (file_senders[i].file == 0)
87 continue;
88
89 while (1) {
90 if (!tox_file_senddata(m, file_senders[i].friendnum, file_senders[i].filenumber, file_senders[i].nextpiece,
91 file_senders[i].piecelength))
92 break;
93
94 file_senders[i].piecelength = fread(file_senders[i].nextpiece, 1, 1000, file_senders[i].file);
95
96 if (file_senders[i].piecelength == 0) {
97 fclose(file_senders[i].file);
98 file_senders[i].file = 0;
99 tox_file_sendcontrol(m, file_senders[i].friendnum, 0, file_senders[i].filenumber, 3, 0, 0);
100 char msg[512];
101 sprintf(msg, "[t] %u file transfer: %u completed", file_senders[i].friendnum, file_senders[i].filenumber);
102 new_lines(msg);
103 break;
104 }
105 }
106 }
107}
108int add_filesender(Tox *m, uint16_t friendnum, char *filename)
109{
110 FILE *tempfile = fopen(filename, "r");
111
112 if (tempfile == 0)
113 return -1;
114
115 fseek(tempfile, 0, SEEK_END);
116 uint64_t filesize = ftell(tempfile);
117 fseek(tempfile, 0, SEEK_SET);
118 int filenum = tox_new_filesender(m, friendnum, filesize, (uint8_t *)filename, strlen(filename) + 1);
119
120 if (filenum == -1)
121 return -1;
122
123 file_senders[numfilesenders].file = tempfile;
124 file_senders[numfilesenders].piecelength = fread(file_senders[numfilesenders].nextpiece, 1, 1000,
125 file_senders[numfilesenders].file);
126 file_senders[numfilesenders].friendnum = friendnum;
127 file_senders[numfilesenders].filenumber = filenum;
128 ++numfilesenders;
129 return filenum;
130}
131
70/* 132/*
71 resolve_addr(): 133 resolve_addr():
72 address should represent IPv4 or a hostname with A record 134 address should represent IPv4 or a hostname with A record
@@ -366,6 +428,16 @@ void line_eval(Tox *m, char *line)
366 tox_group_message_send(m, groupnumber, (uint8_t *)*posi + 1, strlen(*posi + 1) + 1)); 428 tox_group_message_send(m, groupnumber, (uint8_t *)*posi + 1, strlen(*posi + 1) + 1));
367 new_lines(msg); 429 new_lines(msg);
368 } 430 }
431 } else if (inpt_command == 't') {
432 char msg[512];
433 char *posi[1];
434 int friendnum = strtoul(line + prompt_offset, posi, 0);
435
436 if (**posi != 0) {
437 sprintf(msg, "[t] Sending file %s to friendnum %u filenumber is %i (-1 means failure)", *posi + 1, friendnum,
438 add_filesender(m, friendnum, *posi + 1));
439 new_lines(msg);
440 }
369 } else if (inpt_command == 'q') { //exit 441 } else if (inpt_command == 'q') { //exit
370 save_data(m); 442 save_data(m);
371 endwin(); 443 endwin();
@@ -586,6 +658,53 @@ void print_groupmessage(Tox *m, int groupnumber, int peernumber, uint8_t *messag
586 new_lines(msg); 658 new_lines(msg);
587} 659}
588 660
661void file_request_accept(Tox *m, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename,
662 uint16_t filename_length, void *userdata)
663{
664 char msg[512];
665 sprintf(msg, "[t] %u is sending us: %s of size %llu", friendnumber, filename, filesize);
666 new_lines(msg);
667
668 if (tox_file_sendcontrol(m, friendnumber, 1, filenumber, 0, 0, 0)) {
669 sprintf(msg, "Accepted file transfer. (saving file as: %u.%u.bin)", friendnumber, filenumber);
670 new_lines(msg);
671 } else
672 new_lines("Could not accept file transfer.");
673}
674
675void file_print_control(Tox *m, int friendnumber, uint8_t send_recieve, uint8_t filenumber, uint8_t control_type,
676 uint8_t *data,
677 uint16_t length, void *userdata)
678{
679 char msg[512] = {0};
680
681 if (control_type == 0)
682 sprintf(msg, "[t] %u accepted file transfer: %u", friendnumber, filenumber);
683 else if (control_type == 3)
684 sprintf(msg, "[t] %u file transfer: %u completed", friendnumber, filenumber);
685 else
686 sprintf(msg, "[t] control %u received", control_type);
687
688 new_lines(msg);
689}
690
691void write_file(Tox *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata)
692{
693 char filename[256];
694 sprintf(filename, "%u.%u.bin", friendnumber, filenumber);
695 FILE *pFile = fopen(filename, "a");
696
697 if (tox_file_dataremaining(m, friendnumber, filenumber, 1) == 0) {
698 //file_control(m, friendnumber, 1, filenumber, 3, 0, 0);
699 char msg[512];
700 sprintf(msg, "[t] %u file transfer: %u completed", friendnumber, filenumber);
701 new_lines(msg);
702 }
703
704 fwrite(data, length, 1, pFile);
705 fclose(pFile);
706}
707
589 708
590int main(int argc, char *argv[]) 709int main(int argc, char *argv[])
591{ 710{
@@ -633,6 +752,9 @@ int main(int argc, char *argv[])
633 tox_callback_statusmessage(m, print_statuschange, NULL); 752 tox_callback_statusmessage(m, print_statuschange, NULL);
634 tox_callback_group_invite(m, print_invite, NULL); 753 tox_callback_group_invite(m, print_invite, NULL);
635 tox_callback_group_message(m, print_groupmessage, NULL); 754 tox_callback_group_message(m, print_groupmessage, NULL);
755 tox_callback_file_data(m, write_file, NULL);
756 tox_callback_file_control(m, file_print_control, NULL);
757 tox_callback_file_sendrequest(m, file_request_accept, NULL);
636 758
637 initscr(); 759 initscr();
638 noecho(); 760 noecho();
@@ -668,6 +790,7 @@ int main(int argc, char *argv[])
668 } 790 }
669 791
670 time_t timestamp0 = time(NULL); 792 time_t timestamp0 = time(NULL);
793
671 while (1) { 794 while (1) {
672 if (on == 0) { 795 if (on == 0) {
673 if (tox_isconnected(m)) { 796 if (tox_isconnected(m)) {
@@ -675,6 +798,7 @@ int main(int argc, char *argv[])
675 on = 1; 798 on = 1;
676 } else { 799 } else {
677 time_t timestamp1 = time(NULL); 800 time_t timestamp1 = time(NULL);
801
678 if (timestamp0 + 10 < timestamp1) { 802 if (timestamp0 + 10 < timestamp1) {
679 timestamp0 = timestamp1; 803 timestamp0 = timestamp1;
680 tox_bootstrap_from_address(m, argv[argvoffset + 1], ipv6enabled, port, binary_string); 804 tox_bootstrap_from_address(m, argv[argvoffset + 1], ipv6enabled, port, binary_string);
@@ -682,6 +806,7 @@ int main(int argc, char *argv[])
682 } 806 }
683 } 807 }
684 808
809 send_filesenders(m);
685 tox_do(m); 810 tox_do(m);
686 c_sleep(1); 811 c_sleep(1);
687 do_refresh(); 812 do_refresh();