From 55ee70dea0632a3a49bf91c0452845d18e2b0922 Mon Sep 17 00:00:00 2001 From: mom040267 Date: Sun, 1 Mar 2015 01:37:44 +0000 Subject: [PATCH] control traffic excluded from the bandwidth limitation --- src/apps/relay/dtls_listener.c | 2 +- src/apps/relay/ns_ioalib_engine_impl.c | 36 +++++++++++++++++--------- src/apps/relay/ns_ioalib_impl.h | 2 +- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/apps/relay/dtls_listener.c b/src/apps/relay/dtls_listener.c index 87aac30..0762fbc 100644 --- a/src/apps/relay/dtls_listener.c +++ b/src/apps/relay/dtls_listener.c @@ -367,7 +367,7 @@ static int handle_udp_packet(dtls_listener_relay_server_type *server, } } - if(ioa_socket_check_bandwidth(s,ioa_network_buffer_get_size(sm->m.sm.nd.nbh),1)) { + if(ioa_socket_check_bandwidth(s,sm->m.sm.nd.nbh,1)) { s->e = ioa_eng; if (s && s->read_cb && sm->m.sm.nd.nbh) { s->read_cb(s, IOA_EV_READ, &(sm->m.sm.nd), s->read_ctx, 1); diff --git a/src/apps/relay/ns_ioalib_engine_impl.c b/src/apps/relay/ns_ioalib_engine_impl.c index 0ffa18a..8dc1ab6 100644 --- a/src/apps/relay/ns_ioalib_engine_impl.c +++ b/src/apps/relay/ns_ioalib_engine_impl.c @@ -637,12 +637,14 @@ void delete_ioa_timer(ioa_timer_handle th) /************** SOCKETS HELPERS ***********************/ -int ioa_socket_check_bandwidth(ioa_socket_handle s, size_t sz, int read) +int ioa_socket_check_bandwidth(ioa_socket_handle s, ioa_network_buffer_handle nbh, int read) { - if(s && (s->e) && sz && + if(s && (s->e) && nbh && ((s->sat == CLIENT_SOCKET) || (s->sat == RELAY_SOCKET) || (s->sat == RELAY_RTCP_SOCKET)) && (s->session)) { + size_t sz = ioa_network_buffer_get_size(nbh); + band_limit_t max_bps = s->session->bps; if(max_bps<1) @@ -657,9 +659,12 @@ int ioa_socket_check_bandwidth(ioa_socket_handle s, size_t sz, int read) s->jiffie_bytes_write = 0; if(bsz > max_bps) { - - return 0; - + u08bits *buf = ioa_network_buffer_data(nbh); + if((s->sat == CLIENT_SOCKET) && ((read && stun_is_request_str(buf,sz)) || (!read && stun_is_response_str(buf,sz)))) { + return 1; + } else { + return 0; + } } else { if(read) s->jiffie_bytes_read = bsz; @@ -676,7 +681,12 @@ int ioa_socket_check_bandwidth(ioa_socket_handle s, size_t sz, int read) else nsz = s->jiffie_bytes_write + bsz; if(nsz > max_bps) { - return 0; + u08bits *buf = ioa_network_buffer_data(nbh); + if((s->sat == CLIENT_SOCKET) && ((read && stun_is_request_str(buf,sz)) || (!read && stun_is_response_str(buf,sz)))) { + return 1; + } else { + return 0; + } } else { if(read) s->jiffie_bytes_read = nsz; @@ -2382,11 +2392,13 @@ static int socket_input_worker(ioa_socket_handle s) } if ((ret!=-1) && (len >= 0)) { - if(ioa_socket_check_bandwidth(s,(size_t)len,1)) { - if(app_msg_len) - buf_elem->buf.len = app_msg_len; - else - buf_elem->buf.len = len; + + if(app_msg_len) + buf_elem->buf.len = app_msg_len; + else + buf_elem->buf.len = len; + + if(ioa_socket_check_bandwidth(s,buf_elem,1)) { if(s->read_cb) { ioa_net_data nd; @@ -2981,7 +2993,7 @@ int send_data_from_ioa_socket_nbh(ioa_socket_handle s, ioa_addr* dest_addr, TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "!!! %s socket: 0x%lx was closed\n", __FUNCTION__,(long)s); } else if (nbh) { - if(!ioa_socket_check_bandwidth(s,ioa_network_buffer_get_size(nbh),0)) { + if(!ioa_socket_check_bandwidth(s,nbh,0)) { /* Bandwidth exhausted, we pretend everything is fine: */ ret = (int)(ioa_network_buffer_get_size(nbh)); if(skip) *skip = 1; diff --git a/src/apps/relay/ns_ioalib_impl.h b/src/apps/relay/ns_ioalib_impl.h index 8abfe65..6a6ff8b 100644 --- a/src/apps/relay/ns_ioalib_impl.h +++ b/src/apps/relay/ns_ioalib_impl.h @@ -303,7 +303,7 @@ int send_data_from_ioa_socket_tcp(ioa_socket_handle s, const void *data, size_t int send_str_from_ioa_socket_tcp(ioa_socket_handle s, const void *data); int send_ulong_from_ioa_socket_tcp(ioa_socket_handle s, size_t data); -int ioa_socket_check_bandwidth(ioa_socket_handle s, size_t sz, int read); +int ioa_socket_check_bandwidth(ioa_socket_handle s, ioa_network_buffer_handle nbh, int read); ///////////////////////// SUPER MEMORY ////////