소스 검색

created netengine.c get_relay_server utility method to reduce code duplication (#1032)

Scott Godin 3 년 전
부모
커밋
a7316a3d30
1개의 변경된 파일55개의 추가작업 그리고 109개의 파일을 삭제
  1. 55 109
      src/apps/relay/netengine.c

+ 55 - 109
src/apps/relay/netengine.c

@@ -67,6 +67,8 @@ static struct auth_server authserver[256];
 static struct relay_server *general_relay_servers[1+((turnserver_id)-1)];
 static struct relay_server *udp_relay_servers[1+((turnserver_id)-1)];
 
+static struct relay_server* get_relay_server(turnserver_id id);
+
 //////////////////////////////////////////////
 
 static void run_events(struct event_base *eb, ioa_engine_handle e);
@@ -441,6 +443,42 @@ static void allocate_relay_addrs_ports(void) {
 
 static int handle_relay_message(relay_server_handle rs, struct message_to_relay *sm);
 
+static struct relay_server* get_relay_server(turnserver_id id) {
+	struct relay_server *rs = NULL;
+	if(id>=TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP) {
+		size_t dest = id-TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP;
+		if(dest >= get_real_udp_relay_servers_number()) {
+			TURN_LOG_FUNC(
+					TURN_LOG_LEVEL_ERROR,
+					"%s: Too large UDP relay number: %d, total=%d\n",
+					__FUNCTION__,(int)dest,(int)get_real_udp_relay_servers_number());
+		}
+		rs = udp_relay_servers[dest];
+		if(!rs) {
+			TURN_LOG_FUNC(
+				TURN_LOG_LEVEL_ERROR,
+					"%s: Wrong UDP relay number: %d, total=%d\n",
+					__FUNCTION__,(int)dest,(int)get_real_udp_relay_servers_number());
+		}
+	} else {
+		size_t dest = id;
+		if(dest >= get_real_general_relay_servers_number()) {
+			TURN_LOG_FUNC(
+					TURN_LOG_LEVEL_ERROR,
+					"%s: Too large general relay number: %d, total=%d\n",
+					__FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number());
+		}
+		rs = general_relay_servers[dest];
+		if(!rs) {
+			TURN_LOG_FUNC(
+				TURN_LOG_LEVEL_ERROR,
+				"%s: Wrong general relay number: %d, total=%d\n",
+				__FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number());
+		}
+	}
+	return rs;
+}
+
 static pthread_mutex_t auth_message_counter_mutex = PTHREAD_MUTEX_INITIALIZER;
 static authserver_id auth_message_counter = 1;
 
@@ -481,42 +519,15 @@ static void auth_server_receive_message(struct bufferevent *bev, void *ptr)
     	  am.success = 1;
       }
     }
-    
-    size_t dest = am.id;
-    
+
     struct evbuffer *output = NULL;
-    
-    if(dest>=TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP) {
-      dest -= TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP;
-      if(dest >= get_real_udp_relay_servers_number()) {
-    	  TURN_LOG_FUNC(
-		      TURN_LOG_LEVEL_ERROR,
-		      "%s: Too large UDP relay number: %d\n",
-		      __FUNCTION__,(int)dest);
-      } else if(!(udp_relay_servers[dest])) {
-    	  TURN_LOG_FUNC(
-    	  	TURN_LOG_LEVEL_ERROR,
-    	  	"%s: Wrong UDP relay number: %d, total %d\n",
-    	  	__FUNCTION__,(int)dest, (int)get_real_udp_relay_servers_number());
-      } else {
-    	  output = bufferevent_get_output(udp_relay_servers[dest]->auth_out_buf);
-      }
-    } else {
-      if(dest >= get_real_general_relay_servers_number()) {
-    	  TURN_LOG_FUNC(
-		      TURN_LOG_LEVEL_ERROR,
-		      "%s: Too large general relay number: %d, total %d\n",
-		      __FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number());
-      } else if(!(general_relay_servers[dest])) {
-    	  TURN_LOG_FUNC(
-    	  		      TURN_LOG_LEVEL_ERROR,
-    	  		      "%s: Wrong general relay number: %d, total %d\n",
-    	  		      __FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number());
-      } else {
-    	  output = bufferevent_get_output(general_relay_servers[dest]->auth_out_buf);
-      }
-    }
-    
+	struct relay_server* relay_server = get_relay_server(am.id);
+	if(relay_server) {
+		output = bufferevent_get_output(relay_server->auth_out_buf);
+	} else {
+    	TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: can't find relay for turn_server_id: %d\n", __FUNCTION__,(int)am.id);
+	}
+
     if(output)
       evbuffer_add(output,&am,sizeof(struct auth_message));
     else {
@@ -585,41 +596,10 @@ static int send_socket_to_relay(turnserver_id id, uint64_t cid, stun_tid *tid, i
 
 	ioa_socket_handle s_to_delete = s;
 
-	struct relay_server *rs = NULL;
-	if(id>=TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP) {
-		size_t dest = id-TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP;
-		if(dest >= get_real_udp_relay_servers_number()) {
-			TURN_LOG_FUNC(
-					TURN_LOG_LEVEL_ERROR,
-					"%s: Too large UDP relay number: %d, rmt=%d, total=%d\n",
-					__FUNCTION__,(int)dest,(int)rmt, (int)get_real_udp_relay_servers_number());
-			goto err;
-		}
-		rs = udp_relay_servers[dest];
-		if(!rs) {
-			TURN_LOG_FUNC(
-				TURN_LOG_LEVEL_ERROR,
-					"%s: Wrong UDP relay number: %d, rmt=%d, total=%d\n",
-					__FUNCTION__,(int)dest,(int)rmt, (int)get_real_udp_relay_servers_number());
-			goto err;
-		}
-	} else {
-		size_t dest = id;
-		if(dest >= get_real_general_relay_servers_number()) {
-			TURN_LOG_FUNC(
-					TURN_LOG_LEVEL_ERROR,
-					"%s: Too large general relay number: %d, rmt=%d, total=%d\n",
-					__FUNCTION__,(int)dest,(int)rmt, (int)get_real_general_relay_servers_number());
-			goto err;
-		}
-		rs = general_relay_servers[dest];
-		if(!rs) {
-			TURN_LOG_FUNC(
-				TURN_LOG_LEVEL_ERROR,
-				"%s: Wrong general relay number: %d, rmt=%d, total=%d\n",
-				__FUNCTION__,(int)dest,(int)rmt, (int)get_real_general_relay_servers_number());
-			goto err;
-		}
+	struct relay_server *rs = get_relay_server(id);
+	if(!rs) {
+		TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: can't find relay for turn_server_id: %d\n", __FUNCTION__,(int)id);
+		goto err;
 	}
 
 	switch (rmt) {
@@ -716,45 +696,11 @@ int send_session_cancellation_to_relay(turnsession_id sid)
 
 	turnserver_id id = (turnserver_id)(sid / TURN_SESSION_ID_FACTOR);
 
-	struct relay_server *rs = NULL;
-	if(id>=TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP) {
-		size_t dest = id-TURNSERVER_ID_BOUNDARY_BETWEEN_TCP_AND_UDP;
-		if(dest >= get_real_udp_relay_servers_number()) {
-			TURN_LOG_FUNC(
-					TURN_LOG_LEVEL_ERROR,
-					"%s: Too large UDP relay number: %d, total=%d\n",
-					__FUNCTION__,(int)dest,(int)get_real_udp_relay_servers_number());
-			ret = -1;
-			goto err;
-		}
-		rs = udp_relay_servers[dest];
-		if(!rs) {
-			TURN_LOG_FUNC(
-				TURN_LOG_LEVEL_ERROR,
-					"%s: Wrong UDP relay number: %d, total=%d\n",
-					__FUNCTION__,(int)dest,(int)get_real_udp_relay_servers_number());
-			ret = -1;
-			goto err;
-		}
-	} else {
-		size_t dest = id;
-		if(dest >= get_real_general_relay_servers_number()) {
-			TURN_LOG_FUNC(
-					TURN_LOG_LEVEL_ERROR,
-					"%s: Too large general relay number: %d, total=%d\n",
-					__FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number());
-			ret = -1;
-			goto err;
-		}
-		rs = general_relay_servers[dest];
-		if(!rs) {
-			TURN_LOG_FUNC(
-				TURN_LOG_LEVEL_ERROR,
-				"%s: Wrong general relay number: %d, total=%d\n",
-				__FUNCTION__,(int)dest,(int)get_real_general_relay_servers_number());
-			ret = -1;
-			goto err;
-		}
+	struct relay_server *rs = get_relay_server(id);
+	if(!rs) {
+    	TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "%s: can't find relay for turn_server_id: %d\n", __FUNCTION__,(int)id);
+		ret = -1;
+		goto err;
 	}
 
 	sm.relay_server = rs;