summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2014-06-12 11:15:20 -0400
committerirungentoo <irungentoo@gmail.com>2014-06-12 11:15:20 -0400
commit2740099da010846fdb38883ae74cff31b014ca61 (patch)
tree8c50566344c486d7e3d0ae2196cac123ec56e75f
parent4f2674eb0f5b5d12177bb3638dbe60ceed0d5e57 (diff)
pthread is now a core dependency instead of just a toxav dependency.
Fixed possible thread bug with sending A/V packets. TODO: eventually make toxcore thread safe.
-rw-r--r--configure.ac16
-rw-r--r--toxcore/Makefile.inc6
-rw-r--r--toxcore/Messenger.c1
-rw-r--r--toxcore/net_crypto.c11
-rw-r--r--toxcore/net_crypto.h3
5 files changed, 24 insertions, 13 deletions
diff --git a/configure.ac b/configure.ac
index e3b9a77b..0dd88da4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -459,15 +459,13 @@ if (test "x$WIN32" != "xyes") && (test "x$MACH" != "xyes") && (test "x$DISABLE_R
459 ) 459 )
460fi 460fi
461 461
462if test "x$BUILD_AV" = "xyes"; then 462
463 AX_PTHREAD( 463AX_PTHREAD(
464 [], 464 [],
465 [ 465 [
466 AC_MSG_WARN([disabling AV support: required pthread library not found]) 466 AC_MSG_ERROR([required library pthread was not found on your system])
467 BUILD_AV="no" 467 ]
468 ] 468)
469 )
470fi
471 469
472if test "x$BUILD_AV" = "xyes"; then 470if test "x$BUILD_AV" = "xyes"; then
473 PKG_CHECK_MODULES([OPUS], [opus], 471 PKG_CHECK_MODULES([OPUS], [opus],
diff --git a/toxcore/Makefile.inc b/toxcore/Makefile.inc
index 3cfdd73b..8e39f96e 100644
--- a/toxcore/Makefile.inc
+++ b/toxcore/Makefile.inc
@@ -50,7 +50,8 @@ libtoxcore_la_SOURCES = ../toxcore/DHT.h \
50libtoxcore_la_CFLAGS = -I$(top_srcdir) \ 50libtoxcore_la_CFLAGS = -I$(top_srcdir) \
51 -I$(top_srcdir)/toxcore \ 51 -I$(top_srcdir)/toxcore \
52 $(LIBSODIUM_CFLAGS) \ 52 $(LIBSODIUM_CFLAGS) \
53 $(NACL_CFLAGS) 53 $(NACL_CFLAGS) \
54 $(PTHREAD_CFLAGS)
54 55
55libtoxcore_la_LDFLAGS = $(TOXCORE_LT_LDFLAGS) \ 56libtoxcore_la_LDFLAGS = $(TOXCORE_LT_LDFLAGS) \
56 $(EXTRA_LT_LDFLAGS) \ 57 $(EXTRA_LT_LDFLAGS) \
@@ -62,4 +63,5 @@ libtoxcore_la_LDFLAGS = $(TOXCORE_LT_LDFLAGS) \
62 63
63libtoxcore_la_LIBADD = $(LIBSODIUM_LIBS) \ 64libtoxcore_la_LIBADD = $(LIBSODIUM_LIBS) \
64 $(NACL_OBJECTS) \ 65 $(NACL_OBJECTS) \
65 $(NAC_LIBS) 66 $(NAC_LIBS) \
67 $(PTHREAD_LIBS)
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c
index 653a2ee1..05065e62 100644
--- a/toxcore/Messenger.c
+++ b/toxcore/Messenger.c
@@ -2184,6 +2184,7 @@ static int handle_packet(void *object, int i, uint8_t *temp, uint16_t len)
2184 for (i = 0; i < n; i++) { 2184 for (i = 0; i < n; i++) {
2185 add_tcp_relay(m->net_crypto, nodes[i].ip_port, nodes[i].client_id); 2185 add_tcp_relay(m->net_crypto, nodes[i].ip_port, nodes[i].client_id);
2186 } 2186 }
2187
2187 break; 2188 break;
2188 } 2189 }
2189 2190
diff --git a/toxcore/net_crypto.c b/toxcore/net_crypto.c
index bb38af26..78a6121c 100644
--- a/toxcore/net_crypto.c
+++ b/toxcore/net_crypto.c
@@ -728,16 +728,21 @@ static int send_data_packet(Net_Crypto *c, int crypt_connection_id, uint8_t *dat
728 if (conn == 0) 728 if (conn == 0)
729 return -1; 729 return -1;
730 730
731 pthread_mutex_lock(&conn->mutex);
731 uint8_t packet[1 + sizeof(uint16_t) + length + crypto_box_MACBYTES]; 732 uint8_t packet[1 + sizeof(uint16_t) + length + crypto_box_MACBYTES];
732 packet[0] = NET_PACKET_CRYPTO_DATA; 733 packet[0] = NET_PACKET_CRYPTO_DATA;
733 memcpy(packet + 1, conn->sent_nonce + (crypto_box_NONCEBYTES - sizeof(uint16_t)), sizeof(uint16_t)); 734 memcpy(packet + 1, conn->sent_nonce + (crypto_box_NONCEBYTES - sizeof(uint16_t)), sizeof(uint16_t));
734 int len = encrypt_data_symmetric(conn->shared_key, conn->sent_nonce, data, length, packet + 1 + sizeof(uint16_t)); 735 int len = encrypt_data_symmetric(conn->shared_key, conn->sent_nonce, data, length, packet + 1 + sizeof(uint16_t));
735 736
736 if (len + 1 + sizeof(uint16_t) != sizeof(packet)) 737 if (len + 1 + sizeof(uint16_t) != sizeof(packet)) {
738 pthread_mutex_unlock(&conn->mutex);
737 return -1; 739 return -1;
740 }
738 741
739 increment_nonce(conn->sent_nonce); 742 increment_nonce(conn->sent_nonce);
740 return send_packet_to(c, crypt_connection_id, packet, sizeof(packet)); 743 int ret = send_packet_to(c, crypt_connection_id, packet, sizeof(packet));
744 pthread_mutex_unlock(&conn->mutex);
745 return ret;
741} 746}
742 747
743/* Creates and sends a data packet with buffer_start and num to the peer using the fastest route. 748/* Creates and sends a data packet with buffer_start and num to the peer using the fastest route.
@@ -1246,6 +1251,7 @@ static int create_crypto_connection(Net_Crypto *c)
1246 1251
1247 memset(&(c->crypto_connections[c->crypto_connections_length]), 0, sizeof(Crypto_Connection)); 1252 memset(&(c->crypto_connections[c->crypto_connections_length]), 0, sizeof(Crypto_Connection));
1248 int id = c->crypto_connections_length; 1253 int id = c->crypto_connections_length;
1254 pthread_mutex_init(&c->crypto_connections[id].mutex, NULL);
1249 ++c->crypto_connections_length; 1255 ++c->crypto_connections_length;
1250 return id; 1256 return id;
1251} 1257}
@@ -1261,6 +1267,7 @@ static int wipe_crypto_connection(Net_Crypto *c, int crypt_connection_id)
1261 return -1; 1267 return -1;
1262 1268
1263 uint32_t i; 1269 uint32_t i;
1270 pthread_mutex_destroy(&c->crypto_connections[crypt_connection_id].mutex);
1264 memset(&(c->crypto_connections[crypt_connection_id]), 0 , sizeof(Crypto_Connection)); 1271 memset(&(c->crypto_connections[crypt_connection_id]), 0 , sizeof(Crypto_Connection));
1265 1272
1266 for (i = c->crypto_connections_length; i != 0; --i) { 1273 for (i = c->crypto_connections_length; i != 0; --i) {
diff --git a/toxcore/net_crypto.h b/toxcore/net_crypto.h
index b1108ae1..ee790f24 100644
--- a/toxcore/net_crypto.h
+++ b/toxcore/net_crypto.h
@@ -26,6 +26,7 @@
26 26
27#include "DHT.h" 27#include "DHT.h"
28#include "TCP_client.h" 28#include "TCP_client.h"
29#include <pthread.h>
29 30
30#define CRYPTO_CONN_NO_CONNECTION 0 31#define CRYPTO_CONN_NO_CONNECTION 0
31#define CRYPTO_CONN_COOKIE_REQUESTING 1 //send cookie request packets 32#define CRYPTO_CONN_COOKIE_REQUESTING 1 //send cookie request packets
@@ -155,6 +156,8 @@ typedef struct {
155 156
156 Node_format tcp_relays[MAX_TCP_RELAYS_PEER]; 157 Node_format tcp_relays[MAX_TCP_RELAYS_PEER];
157 uint16_t num_tcp_relays; 158 uint16_t num_tcp_relays;
159
160 pthread_mutex_t mutex;
158} Crypto_Connection; 161} Crypto_Connection;
159 162
160typedef struct { 163typedef struct {