diff --git a/examples/run_tests.sh b/examples/run_tests.sh index 7484d3c9..74b54dc7 100755 --- a/examples/run_tests.sh +++ b/examples/run_tests.sh @@ -7,7 +7,7 @@ if [ ! -f $BINDIR/turnserver ]; then fi echo 'Running turnserver' -$BINDIR/turnserver --use-auth-secret --static-auth-secret=secret --realm=north.gov --allow-loopback-peers --no-cli --cert ../examples/ca/turn_server_cert.pem --pkey ../examples/ca/turn_server_pkey.pem > /dev/null & +$BINDIR/turnserver --use-auth-secret --sock-buf-size=1048576 --static-auth-secret=secret --realm=north.gov --allow-loopback-peers --no-cli --cert ../examples/ca/turn_server_cert.pem --pkey ../examples/ca/turn_server_pkey.pem & echo 'Running peer client' $BINDIR/turnutils_peer -L 127.0.0.1 -L ::1 -L 0.0.0.0 > /dev/null & diff --git a/src/apps/relay/dtls_listener.c b/src/apps/relay/dtls_listener.c index 6911aa43..47cdd0ce 100644 --- a/src/apps/relay/dtls_listener.c +++ b/src/apps/relay/dtls_listener.c @@ -78,7 +78,7 @@ struct dtls_listener_relay_server_info { ///////////// forward declarations //////// -static int create_server_socket(dtls_listener_relay_server_type *server, int report_creation); +static int create_server_socket(dtls_listener_relay_server_type *server, int report_creation, int sock_buf_size); static int clean_server(dtls_listener_relay_server_type *server); static int reopen_server_socket(dtls_listener_relay_server_type *server, evutil_socket_t fd); @@ -740,7 +740,7 @@ start_udp_cycle: ///////////////////// operations ////////////////////////// -static int create_server_socket(dtls_listener_relay_server_type *server, int report_creation) { +static int create_server_socket(dtls_listener_relay_server_type *server, int report_creation, int sock_buf_size) { FUNCSTART; @@ -762,7 +762,7 @@ static int create_server_socket(dtls_listener_relay_server_type *server, int rep server->udp_listen_s = create_ioa_socket_from_fd(server->e, udp_listen_fd, NULL, UDP_SOCKET, LISTENER_SOCKET, NULL, &(server->addr)); - set_ioa_socket_buf_size(server->udp_listen_s, server->ts->sock_buf_size); + set_ioa_socket_buf_size(server->udp_listen_s, sock_buf_size); if (sock_bind_to_device(udp_listen_fd, (unsigned char *)server->ifname) < 0) { TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Cannot bind listener socket to device %s\n", server->ifname); @@ -831,7 +831,7 @@ static int reopen_server_socket(dtls_listener_relay_server_type *server, evutil_ } if (!(server->udp_listen_s)) { - return create_server_socket(server, 1); + return create_server_socket(server, 1, turn_params.sock_buf_size); } const ioa_socket_raw udp_listen_fd = @@ -896,7 +896,7 @@ static int dtls_verify_callback(int ok, X509_STORE_CTX *ctx) { #endif static int init_server(dtls_listener_relay_server_type *server, const char *ifname, const char *local_address, int port, - int verbose, ioa_engine_handle e, turn_turnserver *ts, int report_creation, + int sock_buf_size, int verbose, ioa_engine_handle e, turn_turnserver *ts, int report_creation, ioa_engine_new_connection_event_handler send_socket) { if (!server) { @@ -921,7 +921,7 @@ static int init_server(dtls_listener_relay_server_type *server, const char *ifna server->e = e; - return create_server_socket(server, report_creation); + return create_server_socket(server, report_creation, turn_params.sock_buf_size); } static int clean_server(dtls_listener_relay_server_type *server) { @@ -952,14 +952,15 @@ void setup_dtls_callbacks(SSL_CTX *ctx) { #endif dtls_listener_relay_server_type *create_dtls_listener_server(const char *ifname, const char *local_address, int port, - int verbose, ioa_engine_handle e, turn_turnserver *ts, - int report_creation, + int sock_buf_size, int verbose, ioa_engine_handle e, + turn_turnserver *ts, int report_creation, ioa_engine_new_connection_event_handler send_socket) { dtls_listener_relay_server_type *server = (dtls_listener_relay_server_type *)allocate_super_memory_engine(e, sizeof(dtls_listener_relay_server_type)); - if (init_server(server, ifname, local_address, port, verbose, e, ts, report_creation, send_socket) < 0) { + if (init_server(server, ifname, local_address, port, sock_buf_size, verbose, e, ts, report_creation, send_socket) < + 0) { return NULL; } else { return server; diff --git a/src/apps/relay/dtls_listener.h b/src/apps/relay/dtls_listener.h index 70ec5438..677d6d2e 100644 --- a/src/apps/relay/dtls_listener.h +++ b/src/apps/relay/dtls_listener.h @@ -59,8 +59,8 @@ void setup_dtls_callbacks(SSL_CTX *ctx); #endif dtls_listener_relay_server_type *create_dtls_listener_server(const char *ifname, const char *local_address, int port, - int verbose, ioa_engine_handle e, turn_turnserver *ts, - int report_creation, + int sock_buf_size, int verbose, ioa_engine_handle e, + turn_turnserver *ts, int report_creation, ioa_engine_new_connection_event_handler send_socket); void udp_send_message(dtls_listener_relay_server_type *server, ioa_network_buffer_handle nbh, ioa_addr *dest); diff --git a/src/apps/relay/netengine.c b/src/apps/relay/netengine.c index cb152a4c..aae42a80 100644 --- a/src/apps/relay/netengine.c +++ b/src/apps/relay/netengine.c @@ -1155,8 +1155,8 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) { turn_params.listener.aux_udp_services[index] = (dtls_listener_relay_server_type **)allocate_super_memory_engine( udp_relay_servers[udp_relay_server_index]->ioa_eng, sizeof(dtls_listener_relay_server_type *)); turn_params.listener.aux_udp_services[index][0] = - create_dtls_listener_server(turn_params.listener_ifname, saddr, port, turn_params.verbose, - udp_relay_servers[udp_relay_server_index]->ioa_eng, + create_dtls_listener_server(turn_params.listener_ifname, saddr, port, turn_params.sock_buf_size, + turn_params.verbose, udp_relay_servers[udp_relay_server_index]->ioa_eng, &(udp_relay_servers[udp_relay_server_index]->server), 1, NULL); if (turn_params.general_relay_servers_number > 1) { @@ -1182,9 +1182,9 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) { turn_params.listener.udp_services[index] = (dtls_listener_relay_server_type **)allocate_super_memory_engine( udp_relay_servers[udp_relay_server_index]->ioa_eng, sizeof(dtls_listener_relay_server_type *)); turn_params.listener.udp_services[index][0] = create_dtls_listener_server( - turn_params.listener_ifname, turn_params.listener.addrs[i], turn_params.listener_port, turn_params.verbose, - udp_relay_servers[udp_relay_server_index]->ioa_eng, &(udp_relay_servers[udp_relay_server_index]->server), 1, - NULL); + turn_params.listener_ifname, turn_params.listener.addrs[i], turn_params.listener_port, + turn_params.sock_buf_size, turn_params.verbose, udp_relay_servers[udp_relay_server_index]->ioa_eng, + &(udp_relay_servers[udp_relay_server_index]->server), 1, NULL); if (turn_params.general_relay_servers_number > 1) { ++udp_relay_server_index; @@ -1201,9 +1201,9 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) { turn_params.listener.udp_services[index + 1] = (dtls_listener_relay_server_type **)allocate_super_memory_engine( udp_relay_servers[udp_relay_server_index]->ioa_eng, sizeof(dtls_listener_relay_server_type *)); turn_params.listener.udp_services[index + 1][0] = create_dtls_listener_server( - turn_params.listener_ifname, turn_params.listener.addrs[i], get_alt_listener_port(), turn_params.verbose, - udp_relay_servers[udp_relay_server_index]->ioa_eng, &(udp_relay_servers[udp_relay_server_index]->server), 1, - NULL); + turn_params.listener_ifname, turn_params.listener.addrs[i], get_alt_listener_port(), + turn_params.sock_buf_size, turn_params.verbose, udp_relay_servers[udp_relay_server_index]->ioa_eng, + &(udp_relay_servers[udp_relay_server_index]->server), 1, NULL); if (turn_params.general_relay_servers_number > 1) { ++udp_relay_server_index; @@ -1227,7 +1227,7 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) { udp_relay_servers[udp_relay_server_index]->ioa_eng, sizeof(dtls_listener_relay_server_type *)); turn_params.listener.dtls_services[index][0] = create_dtls_listener_server( turn_params.listener_ifname, turn_params.listener.addrs[i], turn_params.tls_listener_port, - turn_params.verbose, udp_relay_servers[udp_relay_server_index]->ioa_eng, + turn_params.sock_buf_size, turn_params.verbose, udp_relay_servers[udp_relay_server_index]->ioa_eng, &(udp_relay_servers[udp_relay_server_index]->server), 1, NULL); if (turn_params.general_relay_servers_number > 1) { @@ -1247,7 +1247,7 @@ static void setup_socket_per_endpoint_udp_listener_servers(void) { udp_relay_servers[udp_relay_server_index]->ioa_eng, sizeof(dtls_listener_relay_server_type *)); turn_params.listener.dtls_services[index + 1][0] = create_dtls_listener_server( turn_params.listener_ifname, turn_params.listener.addrs[i], get_alt_tls_listener_port(), - turn_params.verbose, udp_relay_servers[udp_relay_server_index]->ioa_eng, + turn_params.sock_buf_size, turn_params.verbose, udp_relay_servers[udp_relay_server_index]->ioa_eng, &(udp_relay_servers[udp_relay_server_index]->server), 1, NULL); if (turn_params.general_relay_servers_number > 1) { @@ -1299,9 +1299,10 @@ static void setup_socket_per_thread_udp_listener_servers(void) { sizeof(dtls_listener_relay_server_type *) * get_real_general_relay_servers_number()); for (relayindex = 0; relayindex < get_real_general_relay_servers_number(); relayindex++) { - turn_params.listener.aux_udp_services[index][relayindex] = create_dtls_listener_server( - turn_params.listener_ifname, saddr, port, turn_params.verbose, general_relay_servers[relayindex]->ioa_eng, - &(general_relay_servers[relayindex]->server), !relayindex, NULL); + turn_params.listener.aux_udp_services[index][relayindex] = + create_dtls_listener_server(turn_params.listener_ifname, saddr, port, turn_params.sock_buf_size, + turn_params.verbose, general_relay_servers[relayindex]->ioa_eng, + &(general_relay_servers[relayindex]->server), !relayindex, NULL); } } } @@ -1320,9 +1321,9 @@ static void setup_socket_per_thread_udp_listener_servers(void) { for (relayindex = 0; relayindex < get_real_general_relay_servers_number(); relayindex++) { turn_params.listener.udp_services[index][relayindex] = create_dtls_listener_server( - turn_params.listener_ifname, turn_params.listener.addrs[i], turn_params.listener_port, turn_params.verbose, - general_relay_servers[relayindex]->ioa_eng, &(general_relay_servers[relayindex]->server), !relayindex, - NULL); + turn_params.listener_ifname, turn_params.listener.addrs[i], turn_params.listener_port, + turn_params.sock_buf_size, turn_params.verbose, general_relay_servers[relayindex]->ioa_eng, + &(general_relay_servers[relayindex]->server), !relayindex, NULL); } if (turn_params.rfc5780) { @@ -1333,9 +1334,9 @@ static void setup_socket_per_thread_udp_listener_servers(void) { for (relayindex = 0; relayindex < get_real_general_relay_servers_number(); relayindex++) { turn_params.listener.udp_services[index + 1][relayindex] = create_dtls_listener_server( - turn_params.listener_ifname, turn_params.listener.addrs[i], get_alt_listener_port(), turn_params.verbose, - general_relay_servers[relayindex]->ioa_eng, &(general_relay_servers[relayindex]->server), !relayindex, - NULL); + turn_params.listener_ifname, turn_params.listener.addrs[i], get_alt_listener_port(), + turn_params.sock_buf_size, turn_params.verbose, general_relay_servers[relayindex]->ioa_eng, + &(general_relay_servers[relayindex]->server), !relayindex, NULL); } } } else { @@ -1353,7 +1354,7 @@ static void setup_socket_per_thread_udp_listener_servers(void) { for (relayindex = 0; relayindex < get_real_general_relay_servers_number(); relayindex++) { turn_params.listener.dtls_services[index][relayindex] = create_dtls_listener_server( turn_params.listener_ifname, turn_params.listener.addrs[i], turn_params.tls_listener_port, - turn_params.verbose, general_relay_servers[relayindex]->ioa_eng, + turn_params.sock_buf_size, turn_params.verbose, general_relay_servers[relayindex]->ioa_eng, &(general_relay_servers[relayindex]->server), !relayindex, NULL); } @@ -1367,7 +1368,7 @@ static void setup_socket_per_thread_udp_listener_servers(void) { for (relayindex = 0; relayindex < get_real_general_relay_servers_number(); relayindex++) { turn_params.listener.dtls_services[index + 1][relayindex] = create_dtls_listener_server( turn_params.listener_ifname, turn_params.listener.addrs[i], get_alt_tls_listener_port(), - turn_params.verbose, general_relay_servers[relayindex]->ioa_eng, + turn_params.sock_buf_size, turn_params.verbose, general_relay_servers[relayindex]->ioa_eng, &(general_relay_servers[relayindex]->server), !relayindex, NULL); } } @@ -1399,9 +1400,9 @@ static void setup_socket_per_session_udp_listener_servers(void) { turn_params.listener.aux_udp_services[index] = (dtls_listener_relay_server_type **)allocate_super_memory_engine( turn_params.listener.ioa_eng, sizeof(dtls_listener_relay_server_type *)); - turn_params.listener.aux_udp_services[index][0] = - create_dtls_listener_server(turn_params.listener_ifname, saddr, port, turn_params.verbose, - turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); + turn_params.listener.aux_udp_services[index][0] = create_dtls_listener_server( + turn_params.listener_ifname, saddr, port, turn_params.sock_buf_size, turn_params.verbose, + turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); } } @@ -1416,18 +1417,20 @@ static void setup_socket_per_session_udp_listener_servers(void) { turn_params.listener.udp_services[index] = (dtls_listener_relay_server_type **)allocate_super_memory_engine( turn_params.listener.ioa_eng, sizeof(dtls_listener_relay_server_type *)); - turn_params.listener.udp_services[index][0] = create_dtls_listener_server( - turn_params.listener_ifname, turn_params.listener.addrs[i], turn_params.listener_port, turn_params.verbose, - turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); + turn_params.listener.udp_services[index][0] = + create_dtls_listener_server(turn_params.listener_ifname, turn_params.listener.addrs[i], + turn_params.listener_port, turn_params.sock_buf_size, turn_params.verbose, + turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); if (turn_params.rfc5780) { turn_params.listener.udp_services[index + 1] = (dtls_listener_relay_server_type **)allocate_super_memory_engine( turn_params.listener.ioa_eng, sizeof(dtls_listener_relay_server_type *)); - turn_params.listener.udp_services[index + 1][0] = create_dtls_listener_server( - turn_params.listener_ifname, turn_params.listener.addrs[i], get_alt_listener_port(), turn_params.verbose, - turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); + turn_params.listener.udp_services[index + 1][0] = + create_dtls_listener_server(turn_params.listener_ifname, turn_params.listener.addrs[i], + get_alt_listener_port(), turn_params.sock_buf_size, turn_params.verbose, + turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); } } else { turn_params.listener.udp_services[index] = NULL; @@ -1440,9 +1443,10 @@ static void setup_socket_per_session_udp_listener_servers(void) { turn_params.listener.dtls_services[index] = (dtls_listener_relay_server_type **)allocate_super_memory_engine( turn_params.listener.ioa_eng, sizeof(dtls_listener_relay_server_type *)); - turn_params.listener.dtls_services[index][0] = create_dtls_listener_server( - turn_params.listener_ifname, turn_params.listener.addrs[i], turn_params.tls_listener_port, - turn_params.verbose, turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); + turn_params.listener.dtls_services[index][0] = + create_dtls_listener_server(turn_params.listener_ifname, turn_params.listener.addrs[i], + turn_params.tls_listener_port, turn_params.sock_buf_size, turn_params.verbose, + turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); if (turn_params.rfc5780) { @@ -1450,9 +1454,10 @@ static void setup_socket_per_session_udp_listener_servers(void) { (dtls_listener_relay_server_type **)allocate_super_memory_engine(turn_params.listener.ioa_eng, sizeof(dtls_listener_relay_server_type *)); - turn_params.listener.dtls_services[index + 1][0] = create_dtls_listener_server( - turn_params.listener_ifname, turn_params.listener.addrs[i], get_alt_tls_listener_port(), - turn_params.verbose, turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); + turn_params.listener.dtls_services[index + 1][0] = + create_dtls_listener_server(turn_params.listener_ifname, turn_params.listener.addrs[i], + get_alt_tls_listener_port(), turn_params.sock_buf_size, turn_params.verbose, + turn_params.listener.ioa_eng, NULL, 1, send_socket_to_general_relay); } } else { turn_params.listener.dtls_services[index] = NULL;