mirror of
				https://github.com/coturn/coturn.git
				synced 2025-10-30 22:40:59 +01:00 
			
		
		
		
	working on bandwidth draft
This commit is contained in:
		
							parent
							
								
									9218a1fc43
								
							
						
					
					
						commit
						f9608553fb
					
				| @ -77,6 +77,32 @@ static void barrier_wait_func(const char* func, int line) | |||||||
| 
 | 
 | ||||||
| #define barrier_wait() barrier_wait_func(__FUNCTION__,__LINE__) | #define barrier_wait() barrier_wait_func(__FUNCTION__,__LINE__) | ||||||
| 
 | 
 | ||||||
|  | /////////////// Bandwidth //////////////////
 | ||||||
|  | 
 | ||||||
|  | static pthread_mutex_t mutex_bps; | ||||||
|  | 
 | ||||||
|  | static band_limit_t allocate_bps(band_limit_t bps) | ||||||
|  | { | ||||||
|  | 	band_limit_t ret = 0; | ||||||
|  | 	if(bps>0) { | ||||||
|  | 		pthread_mutex_lock(&mutex_bps); | ||||||
|  | 
 | ||||||
|  | 		if(turn_params.bps_capacity_allocated < turn_params.bps_capacity) { | ||||||
|  | 			band_limit_t reserve = turn_params.bps_capacity - turn_params.bps_capacity_allocated; | ||||||
|  | 			if(reserve <= bps) { | ||||||
|  | 				ret = reserve; | ||||||
|  | 				turn_params.bps_capacity_allocated = turn_params.bps_capacity; | ||||||
|  | 			} else { | ||||||
|  | 				ret = bps; | ||||||
|  | 				turn_params.bps_capacity_allocated -= ret; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		pthread_mutex_unlock(&mutex_bps); | ||||||
|  | 	} | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /////////////// AUX SERVERS ////////////////
 | /////////////// AUX SERVERS ////////////////
 | ||||||
| 
 | 
 | ||||||
| static void add_aux_server_list(const char *saddr, turn_server_addrs_list_t *list) | static void add_aux_server_list(const char *saddr, turn_server_addrs_list_t *list) | ||||||
| @ -1382,7 +1408,7 @@ static void setup_relay_server(struct relay_server *rs, ioa_engine_handle e, int | |||||||
| 			 &turn_params.secure_stun, turn_params.shatype, &turn_params.mobility, | 			 &turn_params.secure_stun, turn_params.shatype, &turn_params.mobility, | ||||||
| 			 turn_params.server_relay, | 			 turn_params.server_relay, | ||||||
| 			 send_turn_session_info, | 			 send_turn_session_info, | ||||||
| 			 turn_params.max_bps); | 			 turn_params.max_bps, allocate_bps); | ||||||
| 	 | 	 | ||||||
| 	if(to_set_rfc5780) { | 	if(to_set_rfc5780) { | ||||||
| 		set_rfc5780(&(rs->server), get_alt_addr, send_message_from_listener_to_client); | 		set_rfc5780(&(rs->server), get_alt_addr, send_message_from_listener_to_client); | ||||||
| @ -1527,6 +1553,8 @@ void setup_server(void) | |||||||
| { | { | ||||||
| 	evthread_use_pthreads(); | 	evthread_use_pthreads(); | ||||||
| 
 | 
 | ||||||
|  | 	pthread_mutex_init(&mutex_bps, NULL); | ||||||
|  | 
 | ||||||
| #if !defined(TURN_NO_THREAD_BARRIERS) | #if !defined(TURN_NO_THREAD_BARRIERS) | ||||||
| 
 | 
 | ||||||
| 	/* relay threads plus auth thread plus main listener thread */ | 	/* relay threads plus auth thread plus main listener thread */ | ||||||
|  | |||||||
| @ -4349,7 +4349,7 @@ void init_turn_server(turn_turnserver* server, | |||||||
| 		send_socket_to_relay_cb send_socket_to_relay, | 		send_socket_to_relay_cb send_socket_to_relay, | ||||||
| 		vintp secure_stun, SHATYPE shatype, vintp mobility, int server_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) { | 		band_limit_t max_bps, allocate_bps_cb allocate_bps_func) { | ||||||
| 
 | 
 | ||||||
| 	if (!server) | 	if (!server) | ||||||
| 		return; | 		return; | ||||||
| @ -4407,6 +4407,7 @@ void init_turn_server(turn_turnserver* server, | |||||||
| 	server->send_socket_to_relay = send_socket_to_relay; | 	server->send_socket_to_relay = send_socket_to_relay; | ||||||
| 
 | 
 | ||||||
| 	server->max_bps = max_bps; | 	server->max_bps = max_bps; | ||||||
|  | 	server->allocate_bps_func = allocate_bps_func; | ||||||
| 
 | 
 | ||||||
| 	set_ioa_timer(server->e, 1, 0, timer_timeout_handler, server, 1, "timer_timeout_handler"); | 	set_ioa_timer(server->e, 1, 0, timer_timeout_handler, server, 1, "timer_timeout_handler"); | ||||||
| } | } | ||||||
|  | |||||||
| @ -92,7 +92,7 @@ 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_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 int (*send_turn_session_info_cb)(struct turn_session_info *tsi); | ||||||
| 
 | 
 | ||||||
| typedef vint band_limit_t; | typedef band_limit_t (*allocate_bps_cb)(band_limit_t bps); | ||||||
| 
 | 
 | ||||||
| struct _turn_turnserver { | struct _turn_turnserver { | ||||||
| 
 | 
 | ||||||
| @ -154,6 +154,7 @@ struct _turn_turnserver { | |||||||
| 
 | 
 | ||||||
| 	/* Bandwidth draft: */ | 	/* Bandwidth draft: */ | ||||||
| 	band_limit_t max_bps; | 	band_limit_t max_bps; | ||||||
|  | 	allocate_bps_cb allocate_bps_func; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| ///////////////////////////////////////////
 | ///////////////////////////////////////////
 | ||||||
| @ -188,7 +189,8 @@ void init_turn_server(turn_turnserver* server, | |||||||
| 				    vintp mobility, | 				    vintp mobility, | ||||||
| 				    int server_relay, | 				    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); | 				    band_limit_t max_bps, | ||||||
|  | 				    allocate_bps_cb allocate_bps_func); | ||||||
| 
 | 
 | ||||||
| ioa_engine_handle turn_server_get_engine(turn_turnserver *s); | ioa_engine_handle turn_server_get_engine(turn_turnserver *s); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -60,6 +60,7 @@ struct _realm_options_t { | |||||||
| //////////////// session info //////////////////////
 | //////////////// session info //////////////////////
 | ||||||
| 
 | 
 | ||||||
| typedef u64bits turnsession_id; | typedef u64bits turnsession_id; | ||||||
|  | typedef unsigned int band_limit_t; | ||||||
| 
 | 
 | ||||||
| #define NONCE_MAX_SIZE (NONCE_LENGTH_32BITS*4+1) | #define NONCE_MAX_SIZE (NONCE_LENGTH_32BITS*4+1) | ||||||
| 
 | 
 | ||||||
| @ -103,6 +104,8 @@ struct _ts_ur_super_session { | |||||||
|   realm_options_t realm_options; |   realm_options_t realm_options; | ||||||
|   int realm_set; |   int realm_set; | ||||||
|   s08bits origin[STUN_MAX_ORIGIN_SIZE + 1]; |   s08bits origin[STUN_MAX_ORIGIN_SIZE + 1]; | ||||||
|  |   /* Bandwidth */ | ||||||
|  |   band_limit_t bps; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| ////// Session info for statistics //////
 | ////// Session info for statistics //////
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user