diff --git a/INSTALL.md b/INSTALL.md index 78c3d688..adab3c05 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -45,17 +45,18 @@ pkg install autoconf automake gcc-47 On FreeBSD 10+: ```tcsh -pkg install automake autoconf +pkg install net-im/tox ``` +Note, if you install from ports select NaCl for performance, and sodium if you want it to be portable. You should get and install [libsodium](https://github.com/jedisct1/libsodium): ```bash git clone git://github.com/jedisct1/libsodium.git cd libsodium -git checkout tags/0.4.2 +git checkout tags/0.5.0 ./autogen.sh ./configure && make check -sudo checkinstall --install --pkgname libsodium --pkgversion 0.4.2 --nodoc +sudo checkinstall --install --pkgname libsodium --pkgversion 0.5.0 --nodoc sudo ldconfig cd .. ``` @@ -67,7 +68,7 @@ this will install the libs to /usr/local/lib and the headers to /usr/local/inclu ```bash git clone git://github.com/jedisct1/libsodium.git cd libsodium -git checkout tags/0.4.2 +git checkout tags/0.5.0 ./autogen.sh ./configure make check @@ -183,10 +184,10 @@ MinGW will install an "MinGW shell" (you should get a shortcut for it), make sure to perform all operations (i.e., generating/running configure script, compiling, etc.) from the MinGW shell. First download the source tarball from https://download.libsodium.org/libsodium/releases/ and build it. -Assuming that you got the libsodium-0.4.2.tar.gz release: +Assuming that you got the libsodium-0.5.0.tar.gz release: ```cmd -tar -zxvf libsodium-0.4.2.tar.gz -cd libsodium-0.4.2 +tar -zxvf libsodium-0.5.0.tar.gz +cd libsodium-0.5.0 ./configure make make install diff --git a/README.md b/README.md index 853a747d..cbe53af5 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,21 @@ -![Project Tox](https://raw.github.com/irungentoo/ProjectTox-Core/master/other/tox.png "Project Tox") +![Project Tox](https://raw.github.com/irungentoo/toxcore/master/other/tox.png "Project Tox") *** With the rise of governmental monitoring programs, Tox, a FOSS initiative, aims to be an easy to use, all-in-one communication platform that ensures their users full privacy and secure message delivery.

-[**Website**](https://tox.im) **|** [**Wiki**](http://wiki.tox.im/) **|** [**Blog**](https://blog.libtoxcore.so/) **|** [**FAQ**](http://wiki.tox.im/FAQ) **|** [**Binaries**](http://download.tox.im/) **|** [**Clients**](http://wiki.tox.im/Client) **|** [**Compiling**](http://wiki.tox.im/Installing) **|** [**API**](http://api.libtoxcore.so/) **|** [**Qt-GUI**](https://github.com/nurupo/ProjectTox-Qt-GUI) **|** **IRC:** #tox@freenode +[**Website**](https://tox.im) **|** [**Wiki**](https://wiki.tox.im/) **|** [**Blog**](https://blog.libtoxcore.so/) **|** [**FAQ**](http://wiki.tox.im/FAQ) **|** [**Binaries**](https://wiki.tox.im/Binaries) **|** [**Clients**](https://wiki.tox.im/Client) **|** [**Compiling**](https://wiki.tox.im/Installing) **|** [**API**](https://libtoxcore.so/) **|** **IRC:** #tox@freenode ## The Complex Stuff: ### UDP vs. TCP -Tox must use UDP simply because [hole punching](http://en.wikipedia.org/wiki/UDP_hole_punching) with TCP is not as reliable. +Tox must use UDP simply because [hole punching](https://en.wikipedia.org/wiki/UDP_hole_punching) with TCP is not as reliable. However, Tox does use [TCP relays](https://github.com/irungentoo/ProjectTox-Core/blob/master/docs/TCP_Network.txt) as a fallback if it encounters a firewall that prevents UDP hole punching. ### Connecting & Communicating -Every peer is represented as a [byte string][String] (the public key [Tox ID] of the peer). By using torrent-style DHT, peers can find the IP of other peers by using their Tox ID. Once the IP is obtained, peers can initiate a [secure](https://github.com/irungentoo/ProjectTox-Core/wiki/Crypto) connection with each other. Once the connection is made, peers can exchange messages, send files, start video chats, etc. using encrypted communications. +Every peer is represented as a [byte string][String] (the public key [Tox ID] of the peer). By using torrent-style DHT, peers can find the IP of other peers by using their Tox ID. Once the IP is obtained, peers can initiate a [secure](https://github.com/irungentoo/toxcore/wiki/Crypto) connection with each other. Once the connection is made, peers can exchange messages, send files, start video chats, etc. using encrypted communications. -**Current build status:** [![Build Status](https://travis-ci.org/irungentoo/ProjectTox-Core.png?branch=master)](https://travis-ci.org/irungentoo/ProjectTox-Core) +**Current build status:** [![Build Status](https://travis-ci.org/irungentoo/toxcore.png?branch=master)](https://travis-ci.org/irungentoo/toxcore) ## Q&A: @@ -34,9 +34,9 @@ The goal of this project is to create a configuration-free P2P Skype replacement ## Documentation: - [Installation](/INSTALL.md) -- [DHT Protocol](http://wiki.tox.im/index.php/DHT)
-- [Lossless UDP Protocol](http://wiki.tox.im/index.php/Lossless_UDP)
-- [Crypto](http://wiki.tox.im/index.php/Crypto)
-- [Ideas](http://wiki.tox.im/index.php/Ideas) +- [DHT Protocol](https://wiki.tox.im/index.php/DHT)
+- [Lossless UDP Protocol](https://wiki.tox.im/index.php/Lossless_UDP)
+- [Crypto](https://wiki.tox.im/index.php/Crypto)
+- [Ideas](https://wiki.tox.im/index.php/Ideas) [String]: https://en.wikipedia.org/wiki/String_(computer_science) diff --git a/other/fun/sign.c b/other/fun/sign.c index eaea9d6a..56a9d1e2 100644 --- a/other/fun/sign.c +++ b/other/fun/sign.c @@ -36,6 +36,7 @@ int load_file(char *filename, char **result) if (size != fread(*result, sizeof(char), size, f)) { free(*result); + fclose(f); return -2; // -2 means file reading fail } diff --git a/testing/nTox.c b/testing/nTox.c index 0145c6ee..050ec93d 100644 --- a/testing/nTox.c +++ b/testing/nTox.c @@ -531,11 +531,11 @@ void line_eval(Tox *m, char *line) } } } else if (inpt_command == 't') { - char msg[512]; char *posi[1]; int friendnum = strtoul(line + prompt_offset, posi, 0); if (**posi != 0) { + char msg[512]; sprintf(msg, "[t] Sending file %s to friendnum %u filenumber is %i (-1 means failure)", *posi + 1, friendnum, add_filesender(m, friendnum, *posi + 1)); new_lines(msg); @@ -634,7 +634,7 @@ void line_eval(Tox *m, char *line) * otherwise turns spaces into newlines if possible */ void wrap(char output[STRING_LENGTH_WRAPPED], char input[STRING_LENGTH], int line_width) { - size_t i, k, m, len = strlen(input); + size_t i, len = strlen(input); if ((line_width < 4) || (len < (size_t)line_width)) { /* if line_width ridiculously tiny, it's not worth the effort */ @@ -652,8 +652,8 @@ void wrap(char output[STRING_LENGTH_WRAPPED], char input[STRING_LENGTH], int lin for (i = line_width; i < len; i += line_width) { /* look backward for a space to expand/turn into a new line */ - k = i; - m = i - line_width; + size_t k = i; + size_t m = i - line_width; while (input[k] != ' ' && k > m) { k--; @@ -837,7 +837,6 @@ void do_refresh() { int count = 0; char wrap_output[STRING_LENGTH_WRAPPED]; - int L; int i; for (i = 0; i < HISTORY; i++) { @@ -846,7 +845,7 @@ void do_refresh() else wrap(wrap_output, lines[i], x); - L = count_lines(wrap_output); + int L = count_lines(wrap_output); count = count + L; if (count < y) { @@ -921,11 +920,10 @@ static char *data_file_name = NULL; static int load_data(Tox *m) { FILE *data_file = fopen(data_file_name, "r"); - size_t size = 0; if (data_file) { fseek(data_file, 0, SEEK_END); - size = ftell(data_file); + size_t size = ftell(data_file); rewind(data_file); uint8_t data[size]; @@ -1215,7 +1213,6 @@ int main(int argc, char *argv[]) exit(1); int on = 0; - int c = 0; char *filename = "data"; char idstring[200] = {0}; Tox *m; @@ -1282,8 +1279,6 @@ int main(int argc, char *argv[]) time_t timestamp0 = time(NULL); - uint8_t pollok = 0; - while (1) { if (on == 0) { if (tox_isconnected(m)) { @@ -1305,7 +1300,7 @@ int main(int argc, char *argv[]) tox_do(m); do_refresh(); - c = timeout_getch(m); + int c = timeout_getch(m); if (c == ERR || c == 27) continue; diff --git a/toxav/codec.c b/toxav/codec.c index 90606e0a..b2a4f415 100644 --- a/toxav/codec.c +++ b/toxav/codec.c @@ -154,12 +154,11 @@ void queue(JitterBuffer *q, RTPMessage *pk) q->queue[q->rear] = pk; int a; - int b; int j; a = q->rear; for (j = 0; j < q->size - 1; ++j) { - b = a - 1; + int b = a - 1; if (b < 0) b += q->capacity; @@ -336,4 +335,4 @@ int energy_VAD(CodecState* cs, int16_t* PCM, uint16_t frame_size, float energy) if ( cs->EVAD_tolerance_cr ) { cs->EVAD_tolerance_cr --; return 1; } return 0; -} \ No newline at end of file +} diff --git a/toxav/msi.c b/toxav/msi.c index 2f3bb6cb..7fc35cc9 100644 --- a/toxav/msi.c +++ b/toxav/msi.c @@ -431,8 +431,11 @@ MSIMessage *parse_message ( const uint8_t *data, uint16_t length ) */ int stringify_message(MSIMessage *msg, char *dest) { +// THIS CODE HAS NO EFFECT, AND THE ARGUMENTS ARE NOT MODIFIED +#if 0 + #define HDR_TO_STR(__dest, __hdr) if (__hdr.header_value) {\ - char nltstr[MSI_MAXMSG_SIZE]; memset(nltstr, '\0', MSI_MAXMSG_SIZE); int i = 0; \ + char nltstr[MSI_MAXMSG_SIZE]; memset(nltstr+__hdr.size, '\0', MSI_MAXMSG_SIZE-__hdr.size); int i = 0; \ for ( ; i < __hdr.size; i ++) nltstr[i] = (char)__hdr.header_value[i]; \ } @@ -452,6 +455,7 @@ int stringify_message(MSIMessage *msg, char *dest) // U8_TO_NLTCHAR(msg->version.header_value, msg->version.size, nltstr, MSI_MAXMSG_SIZE); // sprintf(dest, "Version: %s\n", nltstr); // } +#endif return 0; } diff --git a/toxav/rtp.c b/toxav/rtp.c index ba8d3e84..1b18777f 100644 --- a/toxav/rtp.c +++ b/toxav/rtp.c @@ -604,7 +604,7 @@ int rtp_release_session_recv ( RTPSession *session ) void rtp_queue_adjust_limit(RTPSession *session, uint64_t limit) { pthread_mutex_lock(&session->mutex); - + RTPMessage *_tmp, * _it = session->oldest_msg; for ( ; session->queue_size > limit; _it = _tmp ) { diff --git a/toxav/toxav.c b/toxav/toxav.c index b21910bf..74eb4302 100644 --- a/toxav/toxav.c +++ b/toxav/toxav.c @@ -475,16 +475,20 @@ inline__ int toxav_recv_video ( ToxAv *av, int32_t call_index, vpx_image_t **out if (cii(call_index, av->msi_session)) return ErrorNoCall; uint8_t packet [RTP_PAYLOAD_SIZE]; - int recved_size = 0; - int rc; CallSpecific *call = &av->calls[call_index]; + int recved_size = 0; + do { recved_size = toxav_recv_rtp_payload(av, call_index, TypeVideo, packet); - if (recved_size > 0 && ( rc = vpx_codec_decode(&call->cs->v_decoder, packet, recved_size, NULL, 0) ) != VPX_CODEC_OK) { - LOGGER_ERROR("Error decoding video: %s\n", vpx_codec_err_to_string(rc)); - return ErrorInternal; + if (recved_size > 0) { + int rc = vpx_codec_decode(&call->cs->v_decoder, packet, recved_size, NULL, 0); + + if (rc != VPX_CODEC_OK) { + LOGGER_ERROR("Error decoding video: %s\n", vpx_codec_err_to_string(rc)); + return ErrorInternal; + } } } while (recved_size > 0); diff --git a/toxcore/DHT.c b/toxcore/DHT.c index b09ea0c9..133e9392 100644 --- a/toxcore/DHT.c +++ b/toxcore/DHT.c @@ -2221,11 +2221,11 @@ uint16_t random_nodes_path(DHT *dht, Node_format *nodes, uint16_t max_num) return 0; uint16_t count = 0; - Client_data *list = NULL; uint16_t list_size = 0; uint32_t i; for (i = 0; i < max_num; ++i) { + Client_data *list = NULL; uint16_t rand_num = rand() % (dht->num_friends); list = dht->friends_list[rand_num].client_list; list_size = MAX_FRIEND_CLIENTS; diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c index 3f913d4c..bb70a44a 100644 --- a/toxcore/Messenger.c +++ b/toxcore/Messenger.c @@ -581,9 +581,11 @@ int m_copy_statusmessage(Messenger *m, int32_t friendnumber, uint8_t *buf, uint3 if (friend_not_valid(m, friendnumber)) return -1; - memset(buf, 0, maxlen); - memcpy(buf, m->friendlist[friendnumber].statusmessage, MIN(maxlen, m->friendlist[friendnumber].statusmessage_length)); - return MIN(maxlen, m->friendlist[friendnumber].statusmessage_length); + int msglen = MIN(maxlen, m->friendlist[friendnumber].statusmessage_length); + + memcpy(buf, m->friendlist[friendnumber].statusmessage, msglen); + memset(buf + msglen, 0, maxlen - msglen); + return msglen; } /* return the size of friendnumber's user status. @@ -596,9 +598,10 @@ int m_get_self_statusmessage_size(Messenger *m) int m_copy_self_statusmessage(Messenger *m, uint8_t *buf, uint32_t maxlen) { - memset(buf, 0, maxlen); - memcpy(buf, m->statusmessage, MIN(maxlen, m->statusmessage_length)); - return MIN(maxlen, m->statusmessage_length); + int msglen = MIN(maxlen, m->statusmessage_length); + memcpy(buf, m->statusmessage, msglen); + memset(buf + msglen, 0, maxlen - msglen); + return msglen; } uint8_t m_get_userstatus(Messenger *m, int32_t friendnumber) @@ -2693,7 +2696,6 @@ void messenger_save(Messenger *m, uint8_t *data) memset(relays, 0, len); copy_connected_tcp_relays(m->net_crypto, relays, NUM_SAVED_TCP_RELAYS); memcpy(data, relays, len); - data += len; } static int messenger_load_state_callback(void *outer, const uint8_t *data, uint32_t length, uint16_t type) diff --git a/toxcore/TCP_server.c b/toxcore/TCP_server.c index b900db6b..5652513e 100644 --- a/toxcore/TCP_server.c +++ b/toxcore/TCP_server.c @@ -818,9 +818,10 @@ static sock_t new_listening_TCP_socket(int family, uint16_t port) return ~0; } - int ok = 1; #ifndef TCP_SERVER_USE_EPOLL - ok = set_socket_nonblock(sock); + int ok = set_socket_nonblock(sock); +#else + int ok = 1; #endif if (ok && family == AF_INET6) { diff --git a/toxcore/assoc.c b/toxcore/assoc.c index 5ea67965..4d837aa3 100644 --- a/toxcore/assoc.c +++ b/toxcore/assoc.c @@ -886,7 +886,7 @@ void do_Assoc(Assoc *assoc, DHT *dht) * send getnode() requests to both */ uint8_t *target_id = NULL; Client_entry *heard = NULL, *seen = NULL; - size_t i, k, m, bckt; + size_t i, k, m; for (i = 1; i < assoc->candidates_bucket_count; i++) { if (i % 2) @@ -894,7 +894,7 @@ void do_Assoc(Assoc *assoc, DHT *dht) else k = i >> 1; - bckt = (candidate + k) % assoc->candidates_bucket_count; + size_t bckt = (candidate + k) % assoc->candidates_bucket_count; for (m = 0; m < assoc->candidates_bucket_size; m++) if (assoc->candidates[bckt].list[m].hash) { diff --git a/toxcore/network.c b/toxcore/network.c index 68359016..1217238a 100644 --- a/toxcore/network.c +++ b/toxcore/network.c @@ -596,10 +596,10 @@ Networking_Core *new_networking(IP ip, uint16_t port) */ uint16_t port_to_try = port; *portptr = htons(port_to_try); - int tries, res; + int tries; for (tries = TOX_PORTRANGE_FROM; tries <= TOX_PORTRANGE_TO; tries++) { - res = bind(temp->sock, (struct sockaddr *)&addr, addrsize); + int res = bind(temp->sock, (struct sockaddr *)&addr, addrsize); if (!res) { temp->port = *portptr; diff --git a/toxcore/onion_client.c b/toxcore/onion_client.c index 96795059..40701e2d 100644 --- a/toxcore/onion_client.c +++ b/toxcore/onion_client.c @@ -1001,7 +1001,7 @@ static void do_friend(Onion_Client *onion_c, uint16_t friendnum) if (count < (uint32_t)rand() % MAX_ONION_CLIENTS) { Node_format nodes_list[MAX_SENT_NODES]; uint32_t num_nodes = get_close_nodes(onion_c->dht, onion_c->friends_list[friendnum].real_client_id, nodes_list, - rand() % 2 ? AF_INET : AF_INET6, 1, 0); + (rand() % 2) ? AF_INET : AF_INET6, 1, 0); for (i = 0; i < num_nodes; ++i) client_send_announce_request(onion_c, friendnum + 1, nodes_list[i].ip_port, nodes_list[i].client_id, 0, ~0); @@ -1083,7 +1083,7 @@ static void do_announce(Onion_Client *onion_c) if (count < (uint32_t)rand() % MAX_ONION_CLIENTS) { Node_format nodes_list[MAX_SENT_NODES]; uint32_t num_nodes = get_close_nodes(onion_c->dht, onion_c->c->self_public_key, nodes_list, - rand() % 2 ? AF_INET : AF_INET6, 1, 0); + (rand() % 2) ? AF_INET : AF_INET6, 1, 0); for (i = 0; i < num_nodes; ++i) { client_send_announce_request(onion_c, 0, nodes_list[i].ip_port, nodes_list[i].client_id, 0, ~0);