diff --git a/src/apps/relay/mainrelay.c b/src/apps/relay/mainrelay.c index 2cc7901..c08b09b 100644 --- a/src/apps/relay/mainrelay.c +++ b/src/apps/relay/mainrelay.c @@ -92,7 +92,7 @@ LOW_DEFAULT_PORTS_BOUNDARY,HIGH_DEFAULT_PORTS_BOUNDARY,0,0,"", /////////////// stop server //////////////// 0, /////////////// MISC PARAMS //////////////// -0,0,0,0,0,SHATYPE_SHA1,':',0,0,TURN_CREDENTIALS_NONE,0,0,0,0,0, +0,0,0,0,0,SHATYPE_SHA1,':',0,0,TURN_CREDENTIALS_NONE,0,0,0,0,0,0, ///////////// Users DB ////////////// { TURN_USERDB_TYPE_FILE, {"\0",NULL}, {0,NULL,NULL, {NULL,0}} } @@ -1715,6 +1715,11 @@ int main(int argc, char **argv) } } + if(turn_params.bps_capacity && !(turn_params.max_bps)) { + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "\nCONFIG ERROR: If you set the --bps-capacity option, then you must set --max-bps options, too.\n"); + exit(-1); + } + if(turn_params.no_udp_relay && turn_params.no_tcp_relay) { TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "\nCONFIG ERROR: --no-udp-relay and --no-tcp-relay options cannot be used together.\n"); exit(-1); diff --git a/src/apps/relay/mainrelay.h b/src/apps/relay/mainrelay.h index 2f56ad3..2dc2230 100644 --- a/src/apps/relay/mainrelay.h +++ b/src/apps/relay/mainrelay.h @@ -300,6 +300,7 @@ typedef struct _turn_params_ { int use_auth_secret_with_timestamp; band_limit_t max_bps; band_limit_t bps_capacity; + band_limit_t bps_capacity_allocated; vint total_quota; vint user_quota; diff --git a/src/apps/relay/netengine.c b/src/apps/relay/netengine.c index 64cab84..64be86d 100644 --- a/src/apps/relay/netengine.c +++ b/src/apps/relay/netengine.c @@ -1381,7 +1381,8 @@ static void setup_relay_server(struct relay_server *rs, ioa_engine_handle e, int send_socket_to_relay, &turn_params.secure_stun, turn_params.shatype, &turn_params.mobility, turn_params.server_relay, - send_turn_session_info); + send_turn_session_info, + turn_params.max_bps); if(to_set_rfc5780) { set_rfc5780(&(rs->server), get_alt_addr, send_message_from_listener_to_client); diff --git a/src/apps/relay/ns_ioalib_impl.h b/src/apps/relay/ns_ioalib_impl.h index 2dee934..08f2235 100644 --- a/src/apps/relay/ns_ioalib_impl.h +++ b/src/apps/relay/ns_ioalib_impl.h @@ -80,8 +80,6 @@ typedef struct _stun_buffer_list { size_t tsz; } stun_buffer_list; -typedef vint band_limit_t; - /* * New connection callback */ diff --git a/src/apps/relay/turncli.c b/src/apps/relay/turncli.c index 17dcc24..ed003d8 100644 --- a/src/apps/relay/turncli.c +++ b/src/apps/relay/turncli.c @@ -361,6 +361,10 @@ static void change_cli_param(struct cli_session* cs, const char* pn) cli_max_output_sessions = atoi(pn+strlen("cli-max-output-sessions")); cli_print_uint(cs,(unsigned long)cli_max_output_sessions,"cli-max-output-sessions",2); return; + } else if(strstr(pn,"bps-capacity")==pn) { + turn_params.bps_capacity = atoi(pn+strlen("bps-capacity")); + cli_print_uint(cs,(unsigned long)turn_params.bps_capacity,"bps-capacity",2); + return; } myprintf(cs, "\n"); @@ -714,7 +718,8 @@ static void cli_print_configuration(struct cli_session* cs) cli_print_uint(cs,(unsigned long)turn_params.min_port,"min-port",0); cli_print_uint(cs,(unsigned long)turn_params.max_port,"max-port",0); - cli_print_uint(cs,(unsigned long)turn_params.bps_capacity,"bps_capacity",0); + cli_print_uint(cs,(unsigned long)turn_params.bps_capacity,"bps-capacity",2); + cli_print_uint(cs,(unsigned long)turn_params.bps_capacity_allocated,"Allocated bps-capacity",0); cli_print_ip_range_list(cs,&turn_params.ip_whitelist,"Whitelist IP",0); cli_print_ip_range_list(cs,&turn_params.ip_blacklist,"Blacklist IP",0); diff --git a/src/server/ns_turn_server.c b/src/server/ns_turn_server.c index 041a393..362c34f 100644 --- a/src/server/ns_turn_server.c +++ b/src/server/ns_turn_server.c @@ -4348,7 +4348,8 @@ void init_turn_server(turn_turnserver* server, ip_range_list_t* ip_whitelist, ip_range_list_t* ip_blacklist, send_socket_to_relay_cb send_socket_to_relay, vintp secure_stun, SHATYPE shatype, vintp mobility, int server_relay, - send_turn_session_info_cb send_turn_session_info) { + send_turn_session_info_cb send_turn_session_info, + band_limit_t max_bps) { if (!server) return; @@ -4405,6 +4406,8 @@ void init_turn_server(turn_turnserver* server, server->send_socket_to_relay = send_socket_to_relay; + server->max_bps = max_bps; + set_ioa_timer(server->e, 1, 0, timer_timeout_handler, server, 1, "timer_timeout_handler"); } diff --git a/src/server/ns_turn_server.h b/src/server/ns_turn_server.h index ea740e6..f55470f 100644 --- a/src/server/ns_turn_server.h +++ b/src/server/ns_turn_server.h @@ -92,6 +92,8 @@ typedef void (*release_allocation_quota_cb)(u08bits *username, u08bits *realm); typedef int (*send_socket_to_relay_cb)(turnserver_id id, u64bits cid, stun_tid *tid, ioa_socket_handle s, int message_integrity, MESSAGE_TO_RELAY_TYPE rmt, ioa_net_data *nd); typedef int (*send_turn_session_info_cb)(struct turn_session_info *tsi); +typedef vint band_limit_t; + struct _turn_turnserver { turnserver_id id; @@ -149,6 +151,9 @@ struct _turn_turnserver { /* Server relay */ int server_relay; + + /* Bandwidth draft: */ + band_limit_t max_bps; }; /////////////////////////////////////////// @@ -182,7 +187,8 @@ void init_turn_server(turn_turnserver* server, SHATYPE shatype, vintp mobility, int server_relay, - send_turn_session_info_cb send_turn_session_info); + send_turn_session_info_cb send_turn_session_info, + band_limit_t max_bps); ioa_engine_handle turn_server_get_engine(turn_turnserver *s);