|
|
@@ -37,6 +37,18 @@ static unsigned int barrier_count = 0;
|
|
|
static pthread_barrier_t barrier;
|
|
|
#endif
|
|
|
|
|
|
+////////////// Auth Server ////////////////
|
|
|
+
|
|
|
+struct auth_server {
|
|
|
+ struct event_base* event_base;
|
|
|
+ struct bufferevent *in_buf;
|
|
|
+ struct bufferevent *out_buf;
|
|
|
+ pthread_t thr;
|
|
|
+ redis_context_handle rch;
|
|
|
+};
|
|
|
+
|
|
|
+static struct auth_server authserver = {NULL,NULL,NULL,0,NULL};
|
|
|
+
|
|
|
//////////////////////////////////////////////
|
|
|
|
|
|
#define get_real_general_relay_servers_number() (turn_params.general_relay_servers_number > 1 ? turn_params.general_relay_servers_number : 1)
|
|
|
@@ -356,7 +368,7 @@ static int handle_relay_message(relay_server_handle rs, struct message_to_relay
|
|
|
|
|
|
void send_auth_message_to_auth_server(struct auth_message *am)
|
|
|
{
|
|
|
- struct evbuffer *output = bufferevent_get_output(turn_params.authserver.out_buf);
|
|
|
+ struct evbuffer *output = bufferevent_get_output(authserver.out_buf);
|
|
|
if(evbuffer_add(output,am,sizeof(struct auth_message))<0) {
|
|
|
fprintf(stderr,"%s: Weird buffer error\n",__FUNCTION__);
|
|
|
}
|
|
|
@@ -1689,33 +1701,34 @@ static void* run_auth_server_thread(void *arg)
|
|
|
{
|
|
|
ignore_sigpipe();
|
|
|
|
|
|
- ns_bzero(&turn_params.authserver,sizeof(struct auth_server));
|
|
|
+ struct auth_server *as = (struct auth_server*)arg;
|
|
|
|
|
|
- turn_params.authserver.event_base = turn_event_base_new();
|
|
|
- TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO,"IO method (auth thread): %s\n",event_base_get_method(turn_params.authserver.event_base));
|
|
|
+ ns_bzero(as,sizeof(struct auth_server));
|
|
|
+
|
|
|
+ as->event_base = turn_event_base_new();
|
|
|
+ TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO,"IO method (auth thread): %s\n",event_base_get_method(as->event_base));
|
|
|
|
|
|
struct bufferevent *pair[2];
|
|
|
|
|
|
- bufferevent_pair_new(turn_params.authserver.event_base, TURN_BUFFEREVENTS_OPTIONS, pair);
|
|
|
- turn_params.authserver.in_buf = pair[0];
|
|
|
- turn_params.authserver.out_buf = pair[1];
|
|
|
- bufferevent_setcb(turn_params.authserver.in_buf, auth_server_receive_message, NULL, NULL, &turn_params.authserver);
|
|
|
- bufferevent_enable(turn_params.authserver.in_buf, EV_READ);
|
|
|
+ bufferevent_pair_new(as->event_base, TURN_BUFFEREVENTS_OPTIONS, pair);
|
|
|
+ as->in_buf = pair[0];
|
|
|
+ as->out_buf = pair[1];
|
|
|
+ bufferevent_setcb(as->in_buf, auth_server_receive_message, NULL, NULL, as);
|
|
|
+ bufferevent_enable(as->in_buf, EV_READ);
|
|
|
|
|
|
#if !defined(TURN_NO_HIREDIS)
|
|
|
- turn_params.authserver.rch = get_redis_async_connection(turn_params.authserver.event_base, turn_params.redis_statsdb, 1);
|
|
|
+ as->rch = get_redis_async_connection(as->event_base, turn_params.redis_statsdb, 1);
|
|
|
#endif
|
|
|
|
|
|
- struct auth_server *authserver = &turn_params.authserver;
|
|
|
- struct event_base *eb = authserver->event_base;
|
|
|
+ struct event_base *eb = as->event_base;
|
|
|
|
|
|
barrier_wait();
|
|
|
|
|
|
while(run_auth_server_flag) {
|
|
|
reread_realms();
|
|
|
- run_events(eb,NULL);
|
|
|
update_white_and_black_lists();
|
|
|
- auth_ping(authserver->rch);
|
|
|
+ auth_ping(as->rch);
|
|
|
+ run_events(eb,NULL);
|
|
|
#if defined(DB_TEST)
|
|
|
run_db_test();
|
|
|
#endif
|
|
|
@@ -1724,13 +1737,13 @@ static void* run_auth_server_thread(void *arg)
|
|
|
return arg;
|
|
|
}
|
|
|
|
|
|
-static void setup_auth_server(void)
|
|
|
+static void setup_auth_server(struct auth_server *as)
|
|
|
{
|
|
|
- if(pthread_create(&(turn_params.authserver.thr), NULL, run_auth_server_thread, NULL)<0) {
|
|
|
+ if(pthread_create(&(as->thr), NULL, run_auth_server_thread, as)<0) {
|
|
|
perror("Cannot create auth thread\n");
|
|
|
exit(-1);
|
|
|
}
|
|
|
- pthread_detach(turn_params.authserver.thr);
|
|
|
+ pthread_detach(as->thr);
|
|
|
}
|
|
|
|
|
|
static void* run_cli_server_thread(void *arg)
|
|
|
@@ -1815,7 +1828,7 @@ void setup_server(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- setup_auth_server();
|
|
|
+ setup_auth_server(&authserver);
|
|
|
if(use_cli)
|
|
|
setup_cli_server();
|
|
|
|