Преглед изворни кода

Z991239-3451 #comment 优化连线去分行化功能

80274480 пре 3 година
родитељ
комит
b7954222fb

+ 8 - 0
Module/mod_counterconnector/CMakeLists.txt

@@ -7,6 +7,14 @@ set(${MODULE_PREFIX}_SRCS
 	ConnectorFSM.cpp
 	mod_counterconnector.h
 	mod_counterconnector.cpp
+	strutil.h
+	strutil.cpp
+	callroute_nodelist.h
+	callroute_nodelist.cpp
+	callroute_request.h
+	callroute_request.cpp
+	callrouter.h
+	callrouter.cpp
 	)
 
 set(MOD_VERSION_STRING "0.0.1-dev1")

+ 12 - 25
Module/mod_counterconnector/ConnectorFSM.cpp

@@ -3,7 +3,6 @@
 #include "../include/ModuleMix.h"
 #include "../include/EventCode.h"
 #include "json/json.h"
-#include <regex>
 
 #define RELEASEING_TIMER_INTERVAL	1200
 #define RELEASEING_SIP_TIMER		20000
@@ -369,6 +368,7 @@ ErrorCodeEnum ACMCallFSM::OnExit()
 
 void ACMCallFSM::OnStateTrans(int iSrcState, int iDstState)
 {
+	LOG_FUNCTION();
 	Dbg("FSM state from state %s to %s", GetStateName(iSrcState), GetStateName(iDstState));
 	if (CheckBeginRing(iSrcState, iDstState)) {
 		StartRing();
@@ -419,6 +419,7 @@ void ACMCallFSM::OnStateTrans(int iSrcState, int iDstState)
 
 ErrorCodeEnum ACMCallFSM::SetCallState(int state)
 {
+	LOG_FUNCTION();
 	char *sts[] = {
 		"O", // Offline
 		"C", // Connecting
@@ -592,31 +593,16 @@ unsigned int ACMCallFSM::s9_on_event(FSMEvent* event)
 
 void ACMCallFSM::s8_on_entry() 
 {
+	LOG_FUNCTION();
 	//get call route,采用直接总行方式
-	if ((m_strDirectCenterPattern.GetLength() != 0) && (m_strGrayLaunchUrl.GetLength() != 0)){
-		if (std::regex_match(m_strTerminalId.GetData(), std::regex(m_strDirectCenterPattern.GetData()))) {
-			GrayLaunchReq req;
-			req.m_url = m_strGrayLaunchUrl.GetData();
-			req.m_terminal_no = m_strTerminalId;
-			req.m_branch_no = m_strCallRouteBranchNo;
-			req.m_modular = "counterconnector";
-			GrayLaunchResponse response;
-			bool ret = m_pHttpFunc->Get(req, response);
-			if (ret) {
-				m_bGrayLaunch = response.m_result;
-			}
-			if (m_bGrayLaunch && (m_strCallRouteIP.GetLength() != 0)) {
-				call_info_t call_info;
-				call_info.callroute_server_ip = m_strCallRouteIP;
-				call_info.callroute_server_port = m_iCallRoutePort;
-				call_info.szbranchno = m_strCallRouteBranchNo;
-				call_info.szcaller_num = m_strTerminalId;
-				call_info.szdest_num = m_strCallRouteAccessNo;
-				m_pCallRouteList = get_callroute_list(&call_info);
-			}
-		}
-	}
-
+	call_info_t call_info;
+	call_info.callroute_server_ip = m_strCallRouteIP;
+	call_info.callroute_server_port = m_iCallRoutePort;
+	call_info.szbranchno = m_strCallRouteBranchNo;
+	call_info.szcaller_num = m_strTerminalId;
+	call_info.szdest_num = m_strCallRouteAccessNo;
+	m_pCallRouteList = get_callroute_list(&call_info);
+			
 	int time = GetDelayTime();
 	Dbg("get Delay time = %d",time);
 	if (time > 0)
@@ -676,6 +662,7 @@ unsigned int ACMCallFSM::s10_on_event(FSMEvent* event)
 
 void ACMCallFSM::s11_on_entry() 
 {
+	LOG_FUNCTION();
 	ErrorCodeEnum Error = Error_Succeed;
 	LogWarn(Severity_Middle, Error_Debug, LOG_WARN_COUNTERCONNECT_MAKECALL,"begin make call");
 	if (m_nCurSipServer == Error_Server){

+ 41 - 0
Module/mod_counterconnector/callroute_request.cpp

@@ -2,6 +2,47 @@
 #include "strutil.h"
 
 
+
+/*ÕûÐÎת×Ö·ûÐÍ*/
+char* itoa(int value, char* pstring, int radix)
+{
+	char tmp[33];
+	char* tp = tmp;
+	int i;
+	unsigned v;
+	int sign;
+	char* sp;
+
+	if (radix > 36 || radix <= 1 || NULL == pstring)
+	{
+		return 0;
+	}
+
+	sign = (radix == 10 && value < 0);
+	if (sign)
+		v = -value;
+	else
+		v = (unsigned)value;
+	while (v || tp == tmp)
+	{
+		i = v % radix;
+		v = v / radix;
+		if (i < 10)
+			* tp++ = i + '0';
+		else
+			*tp++ = i + 'a' - 10;
+	}
+
+	sp = pstring;
+
+	if (sign)
+		* sp++ = '-';
+	while (tp > tmp)
+		* sp++ = *--tp;
+	*sp = 0;
+	return pstring;
+}
+
 int fill_packet(proxy_req_packet_t* req_packet, const char* paccessnum, const char* pcalleridnum, const char* branchnum, char*strTime)
 {
 	int ret = -1;

+ 64 - 13
Module/mod_counterconnector/callrouter.cpp

@@ -1,13 +1,36 @@
-#include "stdafx.h"
+
 #include "callrouter.h"
 #include "strutil.h"
 #include "callroute_request.h"
 #include "callroute_nodelist.h"
 #include "SpBase.h"
 
+#ifdef RVC_OS_WIN
 #include <process.h>
 #include <DbgHelp.h>
 #pragma comment(lib, "dbghelp.lib")
+#else
+#include <sys/socket.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <netinet/in.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <sys/ioctl.h> 
+
+typedef int SOCKET;
+
+#ifndef INVALID_SOCKET
+#define INVALID_SOCKET (SOCKET)(~0)
+#endif
+#ifndef SOCKET_ERROR
+#define SOCKET_ERROR (-1)
+#endif
+
+#endif // RVC_WIN32
+
 
 
 
@@ -31,12 +54,20 @@ static int set_socket_attribute(SOCKET client_socket, int timeout)
 	int ret = -1;
 
 	if(setsockopt(client_socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(timeout))==SOCKET_ERROR){
+#ifdef RVC_OS_WIN
 		closesocket(client_socket);
+#else
+		close(client_socket);
+#endif // RVC_OS_WIN
 		return ret;
 	}
 
 	if(setsockopt(client_socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(timeout))==SOCKET_ERROR){
+#ifdef RVC_OS_WIN
 		closesocket(client_socket);
+#else
+		close(client_socket);
+#endif // RVC_OS_WIN
 		return ret;
 	}
 
@@ -59,18 +90,22 @@ static int request_voipgateway_address(call_info_t *call_info, proxy_rsp_packet_
 
 	SOCKET client_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 	if (set_socket_attribute(client_socket, 2000)){
-		Dbg(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("request_voipgateway_address set_socket_attribute failed.");
+		Dbg("request_voipgateway_address set_socket_attribute failed.");
 		return ret;
 	}
 	if (INVALID_SOCKET != client_socket){
 		struct sockaddr_in sa;  
 		sa.sin_family = AF_INET;  
-		sa.sin_addr.S_un.S_addr = inet_addr(call_info->callroute_server_ip);
+		sa.sin_addr.s_addr = inet_addr(call_info->callroute_server_ip);
 		sa.sin_port = htons(call_info->callroute_server_port);
 		memset(sa.sin_zero, 0, sizeof(sa.sin_zero)); 
 
 		//控制为非阻塞方式
-		ioctlsocket(client_socket,FIONBIO,&mode);
+#ifdef RVC_OS_WIN
+		ioctlsocket(client_socket, FIONBIO, &mode);
+#else
+		ioctl(client_socket, FIONBIO, &mode);
+#endif // RVC_OS_WIN
 		ret = connect(client_socket, (struct sockaddr *)&sa, sizeof(struct sockaddr));
 		if (0 == ret){
 			bconnected = TRUE;
@@ -88,10 +123,18 @@ static int request_voipgateway_address(call_info_t *call_info, proxy_rsp_packet_
 		}
 		//控制为阻塞方式
 		mode = 0;  
-		ioctlsocket(client_socket, FIONBIO, &mode);  
+#ifdef RVC_OS_WIN
+		ioctlsocket(client_socket, FIONBIO, &mode);
+#else
+		ioctl(client_socket, FIONBIO, &mode);
+#endif // RVC_OS_WIN
 		if (!bconnected){	//连接失败  
+#ifdef RVC_OS_WIN
 			closesocket(client_socket);
-			Dbg(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("request_voipgateway_address connect callroute server timeout.");
+#else
+			close(client_socket);
+#endif // RVC_OS_WIN
+			Dbg("request_voipgateway_address connect callroute server timeout.");
 			return ret;      //超时
 		} 
 		
@@ -104,16 +147,24 @@ static int request_voipgateway_address(call_info_t *call_info, proxy_rsp_packet_
 		ret = send(client_socket, (const char*)(&req_info), len, 0);
 
 		if (ret <= 0){
+#ifdef RVC_OS_WIN
 			closesocket(client_socket);
-			Dbg(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("request_voipgateway_address send to callroute server failed.");
+#else
+			close(client_socket);
+#endif // RVC_OS_WIN
+			Dbg("request_voipgateway_address send to callroute server failed.");
 			return ret;
 		}
 
 		ret = recv(client_socket, (char*)rsp_packet, rsp_len, 0);
 
+#ifdef RVC_OS_WIN
 		closesocket(client_socket);
+#else
+		close(client_socket);
+#endif // RVC_OS_WIN
 		if (ret <= 0){
-			Dbg(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("request_voipgateway_address recv from callroute server failed.");
+			Dbg("request_voipgateway_address recv from callroute server failed.");
 			return ret;
 		}
 	}
@@ -134,7 +185,7 @@ static bool is_response_packet_valid(proxy_rsp_packet_t* packet_info)
 			memcpy(packgelen, packet_info->req_hdr.packgelen, 4);
 		    memcpy(tradefrom, packet_info->req_hdr.tradefrom, 3);
 			memcpy(requestcode, packet_info->req_hdr.requestcode, 16);
-			Dbg(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get mediaserver address from callroute server failed, rsp packgelen:%s, tradefrom:%s, requestcode:%s!", 
+			Dbg("get mediaserver address from callroute server failed, rsp packgelen:%s, tradefrom:%s, requestcode:%s!", 
 				packgelen,tradefrom, requestcode);
 		}else{
 			bret = true;
@@ -213,14 +264,14 @@ static node_list_head_t *create_node_list_by_callernum(call_info_t *call_info, p
 					_snprintf(new_caller_number, RVC_DATALEN, "%s%s%s",
 						call_info->szcaller_num.GetData(), "#", strinterip);
 
-					Dbg(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("new callroute node: new_caller_number:%s new_touri:%s, assist_ip:%s, assist_port:%s!", 
+					Dbg("new callroute node: new_caller_number:%s new_touri:%s, assist_ip:%s, assist_port:%s!", 
 									new_caller_number, new_touri, packet_info->rsp_body.video_content_ip, packet_info->rsp_body.video_content_port);
 					add_node_to_list(phead, new_caller_number, new_touri, packet_info->rsp_body.video_content_ip, packet_info->rsp_body.video_content_port);
 				}
 			}
 		}
 	}else{
-		Dbg(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("create_node_list_by_callernum failed. szbranchno:%s, szcaller_num:%s, szdest_num:%s.", call_info->szbranchno.GetData(), call_info->szcaller_num.GetData(), call_info->szdest_num.GetData());
+		Dbg("create_node_list_by_callernum failed. szbranchno:%s, szcaller_num:%s, szdest_num:%s.", call_info->szbranchno.GetData(), call_info->szcaller_num.GetData(), call_info->szdest_num.GetData());
 	}
 
 	return phead;
@@ -237,14 +288,14 @@ node_list_head_t *get_callroute_list(call_info_t *call_info)
 		call_info->szdest_num.GetLength() == 0 ||
 		call_info->szcaller_num.GetLength() == 0 ||
 		call_info->szbranchno.GetLength() == 0) {
-		Dbg(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get_callroute_list failed call_info param is null.");
+		Dbg("get_callroute_list failed call_info param is null.");
 		return NULL;
 	}
 
 	reset_buffer(&rsp_info, 0x20, sizeof(proxy_rsp_packet_t));
 	ret = request_voipgateway_address(call_info, &rsp_info, recvlen);
 	if (ret <= 0){
-		Dbg(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get_callroute_list failed szbranchno:%s, szcaller_num:%s, szdest_num:%s.", call_info->szbranchno.GetData(), call_info->szcaller_num.GetData(), call_info->szdest_num.GetData());
+		Dbg("get_callroute_list failed szbranchno:%s, szcaller_num:%s, szdest_num:%s.", call_info->szbranchno.GetData(), call_info->szcaller_num.GetData(), call_info->szdest_num.GetData());
 		return NULL;
 	}
 	

+ 34 - 1
Module/mod_counterconnector/strutil.cpp

@@ -52,6 +52,39 @@ int fifter_string(char*pbuf, size_t usize, const char* psrc, const char cflag)
 	return ret;
 }
 
+
+/*ÎÞ·ûºÅ³¤ÕûÐÎת×Ö·ûÐÍ*/
+char* _ultoa(unsigned long value, char* pstring, int radix)
+{
+	char tmp[33];
+	char* tp = tmp;
+	long i;
+	unsigned long v = value;
+	char* sp;
+
+	if (radix > 36 || radix <= 1 || NULL == pstring){
+		return 0;
+	}
+
+
+	while (v || tp == tmp)
+	{
+		i = v % radix;
+		v = v / radix;
+		if (i < 10)
+			* tp++ = i + '0';
+		else
+			*tp++ = i + 'a' - 10;
+	}
+
+	sp = pstring;
+
+	while (tp > tmp)
+		* sp++ = *--tp;
+	*sp = 0;
+	return pstring;
+}
+
 int get_interger_netaddr(char *strbuf, size_t ubufszie, const char* szip)
 {
 	int ret = -1;
@@ -62,7 +95,7 @@ int get_interger_netaddr(char *strbuf, size_t ubufszie, const char* szip)
 	}
 
 	ulip = inet_addr(szip);
-	ultoa(ulip, strbuf, 10);
+	_ultoa(ulip, strbuf, 10);
 
 	ret = 0;
 	return ret;

+ 0 - 1
Module/mod_counterconnector/strutil.h

@@ -3,7 +3,6 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <io.h>
 #include <string.h>
 
 #ifndef RVC_DATALEN