mirror of
				https://github.com/coturn/coturn.git
				synced 2025-10-31 06:51:30 +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