mirror of
https://github.com/coturn/coturn.git
synced 2025-10-28 21:41:29 +01:00
working on bw limitations
This commit is contained in:
parent
a92b7191a6
commit
4afd423bef
@ -68,7 +68,7 @@ static void write_http_echo(ioa_socket_handle s)
|
|||||||
len_http = strlen(data_http);
|
len_http = strlen(data_http);
|
||||||
ns_bcopy(data_http,data,len_http);
|
ns_bcopy(data_http,data,len_http);
|
||||||
ioa_network_buffer_set_size(nbh_http,len_http);
|
ioa_network_buffer_set_size(nbh_http,len_http);
|
||||||
send_data_from_ioa_socket_nbh(s, NULL, nbh_http, TTL_IGNORE, TOS_IGNORE);
|
send_data_from_ioa_socket_nbh(s, NULL, nbh_http, TTL_IGNORE, TOS_IGNORE,NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -326,8 +326,6 @@ static void free_blist_elem(ioa_engine_handle e, stun_buffer_list_elem *buf_elem
|
|||||||
|
|
||||||
/************** ENGINE *************************/
|
/************** ENGINE *************************/
|
||||||
|
|
||||||
#define TURN_JIFFIE_SIZE (3)
|
|
||||||
|
|
||||||
static void timer_handler(ioa_engine_handle e, void* arg) {
|
static void timer_handler(ioa_engine_handle e, void* arg) {
|
||||||
|
|
||||||
UNUSED_ARG(arg);
|
UNUSED_ARG(arg);
|
||||||
@ -335,7 +333,7 @@ static void timer_handler(ioa_engine_handle e, void* arg) {
|
|||||||
_log_time_value = turn_time();
|
_log_time_value = turn_time();
|
||||||
_log_time_value_set = 1;
|
_log_time_value_set = 1;
|
||||||
|
|
||||||
e->jiffie = _log_time_value >> TURN_JIFFIE_SIZE;
|
e->jiffie = _log_time_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
ioa_engine_handle create_ioa_engine(super_memory_t *sm,
|
ioa_engine_handle create_ioa_engine(super_memory_t *sm,
|
||||||
@ -641,15 +639,13 @@ void delete_ioa_timer(ioa_timer_handle th)
|
|||||||
|
|
||||||
static int ioa_socket_check_bandwidth(ioa_socket_handle s, size_t sz, int read)
|
static int ioa_socket_check_bandwidth(ioa_socket_handle s, size_t sz, int read)
|
||||||
{
|
{
|
||||||
if(s && (s->e) && sz && (s->sat == CLIENT_SOCKET) && (s->session)) {
|
if(s && (s->e) && sz && ((s->sat == CLIENT_SOCKET) || (s->sat == LISTENER_SOCKET)) && (s->session)) {
|
||||||
|
|
||||||
band_limit_t max_bps = s->session->bps;
|
band_limit_t max_bps = s->session->bps;
|
||||||
|
|
||||||
if(max_bps<1)
|
if(max_bps<1)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
max_bps = max_bps<<TURN_JIFFIE_SIZE;
|
|
||||||
|
|
||||||
band_limit_t bsz = (band_limit_t)sz;
|
band_limit_t bsz = (band_limit_t)sz;
|
||||||
|
|
||||||
if(s->jiffie != s->e->jiffie) {
|
if(s->jiffie != s->e->jiffie) {
|
||||||
@ -2965,7 +2961,7 @@ int udp_send(ioa_socket_handle s, const ioa_addr* dest_addr, const s08bits* buff
|
|||||||
|
|
||||||
int send_data_from_ioa_socket_nbh(ioa_socket_handle s, ioa_addr* dest_addr,
|
int send_data_from_ioa_socket_nbh(ioa_socket_handle s, ioa_addr* dest_addr,
|
||||||
ioa_network_buffer_handle nbh,
|
ioa_network_buffer_handle nbh,
|
||||||
int ttl, int tos)
|
int ttl, int tos, int *skip)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
@ -2986,6 +2982,7 @@ int send_data_from_ioa_socket_nbh(ioa_socket_handle s, ioa_addr* dest_addr,
|
|||||||
if(!ioa_socket_check_bandwidth(s,ioa_network_buffer_get_size(nbh),0)) {
|
if(!ioa_socket_check_bandwidth(s,ioa_network_buffer_get_size(nbh),0)) {
|
||||||
/* Bandwidth exhausted, we pretend everything is fine: */
|
/* Bandwidth exhausted, we pretend everything is fine: */
|
||||||
ret = (int)(ioa_network_buffer_get_size(nbh));
|
ret = (int)(ioa_network_buffer_get_size(nbh));
|
||||||
|
if(skip) *skip = 1;
|
||||||
} else {
|
} else {
|
||||||
if (!ioa_socket_tobeclosed(s) && s->e) {
|
if (!ioa_socket_tobeclosed(s) && s->e) {
|
||||||
|
|
||||||
|
|||||||
@ -243,7 +243,7 @@ void clear_ioa_socket_session_if(ioa_socket_handle s, void *ss);
|
|||||||
tcp_connection *get_ioa_socket_sub_session(ioa_socket_handle s);
|
tcp_connection *get_ioa_socket_sub_session(ioa_socket_handle s);
|
||||||
void set_ioa_socket_sub_session(ioa_socket_handle s, tcp_connection *tc);
|
void set_ioa_socket_sub_session(ioa_socket_handle s, tcp_connection *tc);
|
||||||
int register_callback_on_ioa_socket(ioa_engine_handle e, ioa_socket_handle s, int event_type, ioa_net_event_handler cb, void *ctx, int clean_preexisting);
|
int register_callback_on_ioa_socket(ioa_engine_handle e, ioa_socket_handle s, int event_type, ioa_net_event_handler cb, void *ctx, int clean_preexisting);
|
||||||
int send_data_from_ioa_socket_nbh(ioa_socket_handle s, ioa_addr* dest_addr, ioa_network_buffer_handle nbh, int ttl, int tos);
|
int send_data_from_ioa_socket_nbh(ioa_socket_handle s, ioa_addr* dest_addr, ioa_network_buffer_handle nbh, int ttl, int tos, int *skip);
|
||||||
void close_ioa_socket(ioa_socket_handle s);
|
void close_ioa_socket(ioa_socket_handle s);
|
||||||
#define IOA_CLOSE_SOCKET(S) do { if(S) { close_ioa_socket(S); S = NULL; } } while(0)
|
#define IOA_CLOSE_SOCKET(S) do { if(S) { close_ioa_socket(S); S = NULL; } } while(0)
|
||||||
ioa_socket_handle detach_ioa_socket(ioa_socket_handle s);
|
ioa_socket_handle detach_ioa_socket(ioa_socket_handle s);
|
||||||
|
|||||||
@ -1838,7 +1838,7 @@ static void tcp_deliver_delayed_buffer(unsent_buffer *ub, ioa_socket_handle s, t
|
|||||||
|
|
||||||
u32bits bytes = (u32bits)ioa_network_buffer_get_size(nbh);
|
u32bits bytes = (u32bits)ioa_network_buffer_get_size(nbh);
|
||||||
|
|
||||||
int ret = send_data_from_ioa_socket_nbh(s, NULL, nbh, TTL_IGNORE, TOS_IGNORE);
|
int ret = send_data_from_ioa_socket_nbh(s, NULL, nbh, TTL_IGNORE, TOS_IGNORE, NULL);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
set_ioa_socket_tobeclosed(s);
|
set_ioa_socket_tobeclosed(s);
|
||||||
} else {
|
} else {
|
||||||
@ -1877,7 +1877,7 @@ static void tcp_peer_input_handler(ioa_socket_handle s, int event_type, ioa_net_
|
|||||||
|
|
||||||
u32bits bytes = (u32bits)ioa_network_buffer_get_size(nbh);
|
u32bits bytes = (u32bits)ioa_network_buffer_get_size(nbh);
|
||||||
|
|
||||||
int ret = send_data_from_ioa_socket_nbh(tc->client_s, NULL, nbh, TTL_IGNORE, TOS_IGNORE);
|
int ret = send_data_from_ioa_socket_nbh(tc->client_s, NULL, nbh, TTL_IGNORE, TOS_IGNORE, NULL);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
set_ioa_socket_tobeclosed(s);
|
set_ioa_socket_tobeclosed(s);
|
||||||
} else if(ss) {
|
} else if(ss) {
|
||||||
@ -1917,7 +1917,7 @@ static void tcp_client_input_handler_rfc6062data(ioa_socket_handle s, int event_
|
|||||||
ss->received_bytes += bytes;
|
ss->received_bytes += bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ret = send_data_from_ioa_socket_nbh(tc->peer_s, NULL, nbh, TTL_IGNORE, TOS_IGNORE);
|
int ret = send_data_from_ioa_socket_nbh(tc->peer_s, NULL, nbh, TTL_IGNORE, TOS_IGNORE, NULL);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
set_ioa_socket_tobeclosed(s);
|
set_ioa_socket_tobeclosed(s);
|
||||||
}
|
}
|
||||||
@ -2009,7 +2009,7 @@ static void tcp_peer_connection_completed_callback(int success, void *arg)
|
|||||||
len_test = strlen(data_test);
|
len_test = strlen(data_test);
|
||||||
ns_bcopy(data_test,data,len_test);
|
ns_bcopy(data_test,data,len_test);
|
||||||
ioa_network_buffer_set_size(nbh_test,len_test);
|
ioa_network_buffer_set_size(nbh_test,len_test);
|
||||||
send_data_from_ioa_socket_nbh(tc->peer_s, NULL, nbh_test, TTL_IGNORE, TOS_IGNORE);
|
send_data_from_ioa_socket_nbh(tc->peer_s, NULL, nbh_test, TTL_IGNORE, TOS_IGNORE, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2490,7 +2490,7 @@ int turnserver_accept_tcp_client_data_connection(turn_turnserver *server, tcp_co
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(ss && !err_code) {
|
if(ss && !err_code) {
|
||||||
send_data_from_ioa_socket_nbh(s, NULL, nbh, TTL_IGNORE, TOS_IGNORE);
|
send_data_from_ioa_socket_nbh(s, NULL, nbh, TTL_IGNORE, TOS_IGNORE, NULL);
|
||||||
tcp_deliver_delayed_buffer(&(tc->ub_to_client),s,ss);
|
tcp_deliver_delayed_buffer(&(tc->ub_to_client),s,ss);
|
||||||
IOA_CLOSE_SOCKET(s_to_delete);
|
IOA_CLOSE_SOCKET(s_to_delete);
|
||||||
FUNCEND;
|
FUNCEND;
|
||||||
@ -2501,7 +2501,7 @@ int turnserver_accept_tcp_client_data_connection(turn_turnserver *server, tcp_co
|
|||||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: cannot set TCP tmp client data input callback\n", __FUNCTION__);
|
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: cannot set TCP tmp client data input callback\n", __FUNCTION__);
|
||||||
ioa_network_buffer_delete(server->e, nbh);
|
ioa_network_buffer_delete(server->e, nbh);
|
||||||
} else {
|
} else {
|
||||||
send_data_from_ioa_socket_nbh(s, NULL, nbh, TTL_IGNORE, TOS_IGNORE);
|
send_data_from_ioa_socket_nbh(s, NULL, nbh, TTL_IGNORE, TOS_IGNORE, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2978,7 +2978,7 @@ static int handle_turn_send(turn_turnserver *server, ts_ur_super_session *ss,
|
|||||||
ioa_network_buffer_set_size(nbh,len);
|
ioa_network_buffer_set_size(nbh,len);
|
||||||
}
|
}
|
||||||
ioa_network_buffer_header_init(nbh);
|
ioa_network_buffer_header_init(nbh);
|
||||||
send_data_from_ioa_socket_nbh(get_relay_socket_ss(ss,peer_addr.ss.sa_family), &peer_addr, nbh, in_buffer->recv_ttl-1, in_buffer->recv_tos);
|
send_data_from_ioa_socket_nbh(get_relay_socket_ss(ss,peer_addr.ss.sa_family), &peer_addr, nbh, in_buffer->recv_ttl-1, in_buffer->recv_tos, NULL);
|
||||||
in_buffer->nbh = NULL;
|
in_buffer->nbh = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4103,7 +4103,7 @@ static int write_to_peerchannel(ts_ur_super_session* ss, u16bits chnum, ioa_net_
|
|||||||
|
|
||||||
ioa_network_buffer_header_init(nbh);
|
ioa_network_buffer_header_init(nbh);
|
||||||
|
|
||||||
rc = send_data_from_ioa_socket_nbh(get_relay_socket_ss(ss, chn->peer_addr.ss.sa_family), &(chn->peer_addr), nbh, in_buffer->recv_ttl-1, in_buffer->recv_tos);
|
rc = send_data_from_ioa_socket_nbh(get_relay_socket_ss(ss, chn->peer_addr.ss.sa_family), &(chn->peer_addr), nbh, in_buffer->recv_ttl-1, in_buffer->recv_tos, NULL);
|
||||||
in_buffer->nbh = NULL;
|
in_buffer->nbh = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4248,17 +4248,20 @@ static int write_client_connection(turn_turnserver *server, ts_ur_super_session*
|
|||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
++(ss->sent_packets);
|
|
||||||
ss->sent_bytes += (u32bits)ioa_network_buffer_get_size(nbh);
|
|
||||||
turn_report_session_usage(ss);
|
|
||||||
|
|
||||||
if (eve(server->verbose)) {
|
if (eve(server->verbose)) {
|
||||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO,
|
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO,
|
||||||
"%s: prepare to write to s 0x%lx\n", __FUNCTION__,
|
"%s: prepare to write to s 0x%lx\n", __FUNCTION__,
|
||||||
(long) (ss->client_socket));
|
(long) (ss->client_socket));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ret = send_data_from_ioa_socket_nbh(ss->client_socket, NULL, nbh, ttl, tos);
|
int skip = 0;
|
||||||
|
int ret = send_data_from_ioa_socket_nbh(ss->client_socket, NULL, nbh, ttl, tos, &skip);
|
||||||
|
|
||||||
|
if(!skip) {
|
||||||
|
++(ss->sent_packets);
|
||||||
|
ss->sent_bytes += (u32bits)ioa_network_buffer_get_size(nbh);
|
||||||
|
turn_report_session_usage(ss);
|
||||||
|
}
|
||||||
|
|
||||||
FUNCEND;
|
FUNCEND;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user