Browse Source

Z991239-2910 #comment [rvcfacecapture] 同步连线统计信息和异常告警上报到国产化版本

陈礼鹏80274480 4 years ago
parent
commit
805a1d048b

+ 12 - 0
Module/include/EventCode.h

@@ -571,6 +571,18 @@ ERR_ACCESSAUTH_SHA1_HASH}
 #define EVENT_MOD_CONNECT_SIP_NO_OK									0x30450111	 //sip请求收到180,未收到200ok	
 #define EVENT_MOD_CONNECT_CONNECT_PROXYA_FAILED						0x30450112	 //sip已接通,网络问题,连不上分行媒体网关(proxya)	
 #define EVENT_MOD_CONNECT_NO_SERVER_HB_DISCONNECT					0x30450113	 //长时间未收到远端的心跳包而失去连接	
+
+
+#define LOG_WARN_COUNTERCONNECT_PICKUPCALL							0x30460001	 //pickup call
+#define LOG_WARN_COUNTERCONNECT_HANDFREECALL						0x30460002	 //hand free call
+#define LOG_WARN_COUNTERCONNECT_DOUBLERECORDCALL					0x30460003	 //double record call
+#define LOG_WARN_COUNTERCONNECT_MAKECALL							0x30460004	 //make call
+#define LOG_WARN_COUNTERCONNECT_CONNECT_SUCCESS						0x30460005	 //connect success
+#define LOG_WARN_COUNTERCONNECT_CONNECT_FAILED						0x30460006	 //connect failed
+#define LOG_WARN_COUNTERCONNECT_AUTO_RECONNECT						0x30460007	 //auto reconnect
+#define LOG_WARN_COUNTERCONNECT_CALL_CONNECT_TIME					0x30460008	 //call connect time
+#define LOG_WARN_COUNTERCONNECT_ASSIST_CONNECT_FAILED				0x30460009	 //assist channel connect failed
+#define LOG_WARN_COUNTERCONNECT_SIP_CONNECT_FAILED					0x3046000A	 //sip channel connect failed
 /*----End--CounterConnector------------------------------*/  
 
 

+ 170 - 22
Module/mod_counterconnector/ConnectorFSM.cpp

@@ -1,6 +1,7 @@
 #include "stdafx.h"
 #include "ConnectorFSM.h"
 #include "../include/ModuleMix.h"
+#include "../include/EventCode.h"
 
 
 #define RELEASEING_TIMER_INTERVAL	1200
@@ -11,8 +12,20 @@
 #define LIVEDETECT_CONNECT_INTERVAL	5000   //live detection实体检测间隔5s
 #define LIVEDETECTION_TIMEOUT		60000  //活体检测超时时间60s
 
+#ifndef MAX_PATH
+#define MAX_PATH 260
+#endif
 
 
+#ifdef RVC_OS_LINUX
+unsigned long GetTickCount()
+{
+	struct timespec ts;
+	clock_gettime(CLOCK_MONOTONIC, &ts);
+	return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
+}
+#endif
+
 class  SyncServiceClient:public SyncService_ClientBase
 {
 public:
@@ -24,7 +37,7 @@ public:
 class MyPhoneClient : public PhoneService_ClientBase
 {
 public:
-	MyPhoneClient(CEntityBase *pEntity, ACMCallFSM* fsm) : PhoneService_ClientBase(pEntity), m_fsm(fsm) {}
+	MyPhoneClient(CEntityBase *pEntity, ACMCallFSM* fsm) : PhoneService_ClientBase(pEntity), m_fsm(fsm) {m_bSipConnected = false;}
 	virtual void OnMessage(ErrorCodeEnum Error, PhoneService_PhoneState_Info &Msg, CSmartPointer<IReleasable> pData)
 	{
 		Dbg("rx sip phone state = %d, status = %s", Msg.state, (LPCSTR)Msg.status);
@@ -43,15 +56,31 @@ public:
 					Dbg("sip channel connected");
 					FSMEvent *e = new FSMEvent(USER_EVT_SIP_STATE_CONNECTED);
 					m_fsm->PostEventFIFO(e);
+					m_bSipConnected = true;
+				}
+				break;
+			case ePhone_Calling:
+				{
+					m_bSipConnected = false;
 				}
 				break;
 			default:
 				break;
 			}
+
+			if (ePhone_Terminated == Msg.state){
+				if (!m_bSipConnected){
+					char strmsg[MAX_PATH] = { 0 };
+					_snprintf(strmsg, MAX_PATH, "sip connect failed for %s.", Msg.status.GetData());
+					LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_SIP_CONNECT_FAILED,strmsg);
+				}
+			}
 		}
 	}
 
+public:
 	ACMCallFSM *m_fsm;
+	int m_bSipConnected;
 };
 
 class MyChannelClient : public ChannelService_ClientBase
@@ -127,7 +156,10 @@ ErrorCodeEnum ACMCallFSM::OnInit()
 	m_pPhoneClient = new MyPhoneClient(m_pEntity, this);
 	Error = m_pPhoneClient->Connect();
 	if (Error != Error_Succeed)
+	{
+		LogError(Severity_Middle, Error_Hardware, EVENT_MOD_CONNECT_SIPPHONE_ERROR, "connect sip phone error");
 		goto on_error;
+	}
 	PhoneService_BeginState_Sub PhoneSub;
 	Error = m_pPhoneClient->BeginState(PhoneSub);
 	if (Error != Error_Succeed)
@@ -145,18 +177,15 @@ ErrorCodeEnum ACMCallFSM::OnInit()
 	m_nSysCallType = 0;
 	m_pChannelClient = new MyChannelClient(m_pEntity, this);
 	Error = m_pChannelClient->Connect();
-	if (Error != Error_Succeed) {
-		m_pChannelClient->SafeDelete();
-		m_pChannelClient = NULL;
+	if (Error != Error_Succeed) 
+	{
+		LogError(Severity_Middle, Error_Hardware, EVENT_MOD_CONNECT_ASSIST_ERROR, "connect assistant channel error");
 		goto on_error;
 	}
 	ChannelService_BeginState_Sub ChannelSub;
 	Error = m_pChannelClient->BeginState(ChannelSub);
-	if (Error != Error_Succeed) {
-		m_pChannelClient->GetFunction()->CloseSession();
-		m_pChannelClient = NULL;
+	if (Error != Error_Succeed) 
 		goto on_error;
-	}
 
 	Dbg("fsm init ok!");
 
@@ -225,6 +254,7 @@ BOOL ACMCallFSM::ReConnectionSipphone()
 		Error = m_pPhoneClient->Connect();
 		if (Error != Error_Succeed) 
 		{
+			LogError(Severity_Middle, Error_Hardware, EVENT_MOD_CONNECT_SIPPHONE_ERROR, "connect sip phone error");
 			m_pPhoneClient->SafeDelete();
 			Dbg("m_phoneClient connect fail!");
 			return FALSE;
@@ -298,15 +328,33 @@ void ACMCallFSM::OnStateTrans(int iSrcState, int iDstState)
 	if (iSrcState != FSM_STATE_INIT && iDstState != FSM_STATE_EXIT) {
 		int st1 = TranslateState(iSrcState);
 		int st2 = TranslateState(iDstState);
+
 		if (st1 != st2) {
 			PhoneState evt;
 			evt.state = st2;
 			evt.status = CSimpleStringA::Format("OnStateTrans from state %d to %d", st1, st2);
 			//LOG_TRACE(evt.status);
-			if (!((st2 == eState_Fail)&&(m_nCurChanServer!=Error_Server)&&(m_nCurSipServer!=Error_Server))||m_bHangup)
+			if (!((st2 == eState_Fail)&&(m_nCurChanServer != Error_Server)&&(m_nCurSipServer != Error_Server))||m_bHangup)
 			{
-				Dbg("Broadcast state from %d to %d", st1, st2);
-				SpSendBroadcast(GetEntityBase()->GetFunction(), SP_MSG_OF(PhoneState), SP_MSG_SIG_OF(PhoneState), evt);
+				if (eState_Fail != st1 || eState_Connecting != st2){
+					Dbg("Broadcast state from %d to %d", st1, st2);
+					SpSendBroadcast(GetEntityBase()->GetFunction(), SP_MSG_OF(PhoneState), SP_MSG_SIG_OF(PhoneState), evt);
+				} 
+				else{
+					char strinfo[MAX_PATH] = {0};
+					_snprintf(strinfo, MAX_PATH,"state from %d to %d, auto reconnect, not broadcast state to ui.", st1, st2);
+					LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_AUTO_RECONNECT,strinfo);
+				}
+
+				if (eState_HandFree == st2 || eState_Pickup == st2){
+					if (eState_Connecting == st1){
+						LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_CONNECT_SUCCESS, "connect success!");
+					}
+				}
+
+				if (eState_Fail == st1 && eState_Offline == st2){
+					LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_CONNECT_FAILED, "connect failed!");
+				}
 			}
 			SetCallState(st2);
 			GetEntityBase()->GetFunction()->SetUserDefineState(st2+USER_SIP_OFFLINE);      
@@ -324,7 +372,8 @@ ErrorCodeEnum ACMCallFSM::SetCallState(int state)
 		"B", // Broken
 		"F", // Fail
 		"R", // Releasing
-		"L"	 // LiveDetect
+		"L", // LiveDetect
+		"V"  // Recording
 	};
 
 	char* strCallState = "O";
@@ -347,6 +396,7 @@ void ACMCallFSM::s0_on_entry()
 void ACMCallFSM::s0_on_exit() 
 {
 	m_bHangup = FALSE;
+	m_nStarttime = GetTickCount();
 }
 
 unsigned int ACMCallFSM::s0_on_event(FSMEvent* event)
@@ -356,12 +406,14 @@ unsigned int ACMCallFSM::s0_on_event(FSMEvent* event)
 		memset(&m_CallingParam,0,sizeof(m_CallingParam));  //正常呼叫
 		GetEntityBase()->GetFunction()->SetSysVar(SYSVAR_CALLTYPE, CALLTYPE_NORMAL); // 设置呼叫模式为常规呼叫
 		m_nSysCallType = 0;
+		LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_PICKUPCALL,"begin pickup call");
 	} 
 	else if (event->iEvt == USER_EVT_HANDFREE_CALL) 
 	{
 		GetEntityBase()->GetFunction()->SetSysVar(SYSVAR_CALLTYPE,CALLTYPE_NORMAL); // 设置呼叫模式为常规呼叫
 		m_nSysCallType = 0;
 		memset(&m_CallingParam,0,sizeof(m_CallingParam));							// 正常呼叫
+		LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_HANDFREECALL,"begin hand free call");
 	}
 	else if (event->iEvt == USER_EVT_COMMAND_CALL)
 	{
@@ -401,6 +453,7 @@ unsigned int ACMCallFSM::s0_on_event(FSMEvent* event)
 		//GetEntityBase()->GetFunction()->SetSysVar(SYSVAR_CALLTYPE,CALLTYPE_RECORD); // 设置呼叫模式为双录呼叫
 		m_nSysCallType = 0;
 		Dbg("start double record call,call type is %d.", m_CallingParam.nCallType);
+		LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_DOUBLERECORDCALL,"begin double record call");
 	}
 	else if (event->iEvt == USER_EVT_STOPLOACALREMOTEVIDEO) 
 	{
@@ -539,8 +592,8 @@ unsigned int ACMCallFSM::s10_on_event(FSMEvent* event)
 void ACMCallFSM::s11_on_entry() 
 {
 	ErrorCodeEnum Error = Error_Succeed;
-	if (m_nCurSipServer == Error_Server)
-	{
+	LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_MAKECALL,"begin make call");
+	if (m_nCurSipServer == Error_Server){
 		Error = Error_NetBroken;
 	}
 	if (Error == Error_Succeed)
@@ -602,28 +655,68 @@ unsigned int ACMCallFSM::s11_on_event(FSMEvent* event)
 	if (event->iEvt == USER_EVT_HANGUP)
 	{
 			m_bHangup = TRUE;
+			DWORD now = GetTickCount();
+			int interval = now - m_nStarttime;
+			char msg[128];
+			sprintf(msg, "sip connecting, customer active hangup after: %d", interval);
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_SIPCONNECT_HANGUP, msg);
 	}
 	else if (event->iEvt == USER_EVT_SIP_STATE_IDLE) 
 	{
+		if (m_nCurSipServer == MAIN_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_SIPCONNECT_SIPSTATE_IDLE,"sipphone connect main server failed");
+		}else if (m_nCurSipServer == BACK_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_SIPCONNECT_SIPSTATE_IDLE,"sipphone connect bak server failed");
+		}else{
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_SIPCONNECT_SIPSTATE_IDLE,"sipphone connect error server failed");
+		}
 		m_nCurSipServer?(m_nCurSipServer=Error_Server):(m_nCurSipServer=BACK_SERVER);
 		m_nSipErrorNum++;
 		//StopChannel();
 	} 
 	else if (event->iEvt == USER_EVT_ASSISTCHAN_IDEL)
 	{
+		if (m_nCurSipServer == MAIN_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_SIPCONNECT_CHANSTATE_IDLE,"chan mod idle, main server");
+		}else if (m_nCurSipServer == BACK_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_SIPCONNECT_CHANSTATE_IDLE,"chan mod idle, bak server");
+		}else{
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_SIPCONNECT_CHANSTATE_IDLE,"chan mod idle, error server");
+		}
 		ReConnectionAssistchan();
 	}
 	else if (event->iEvt == USER_EVT_SIPPHONE_IDEL)
 	{
+		if (m_nCurSipServer == MAIN_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_SIPCONNECT_SIPENTITY_RESTART,"sipphone mod idle, main server");
+		}else if (m_nCurSipServer == BACK_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_SIPCONNECT_SIPENTITY_RESTART,"sipphone mod idle, bak server");
+		}else{
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_SIPCONNECT_SIPENTITY_RESTART,"sipphone mod idle, error server");
+		}
 		ReConnectionSipphone();
 	}
 	else if (event->iEvt == EVT_TIMER)
 	{
+		if (m_nCurSipServer == MAIN_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_SIPCONNECT_TIMEOUT,"sipphone connect timeout, main server");
+		}else if (m_nCurSipServer == BACK_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_SIPCONNECT_TIMEOUT,"sipphone connect timeout, bak server");
+		}else{
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_SIPCONNECT_TIMEOUT,"sipphone connect timeout, error server");
+		}
 		Dbg("sip call timeout,release call");
 		m_nSipErrorNum++;
 	}
 	else if (event->iEvt == USER_EVT_JMP_FAIL)
 	{
+		if (m_nCurSipServer == MAIN_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_SIPCONNECT_FUNC_FAILED,"sipphone connect func failed, main server");
+		}else if (m_nCurSipServer == BACK_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_SIPCONNECT_FUNC_FAILED,"sipphone connect func failed, bak server");
+		}else{
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_SIPCONNECT_FUNC_FAILED,"sipphone connect func failed, error server");
+		}
 		m_nSipErrorNum++;
 	}
 	else if (event->iEvt == USER_EVT_STOPLOACALREMOTEVIDEO) 
@@ -635,6 +728,7 @@ unsigned int ACMCallFSM::s11_on_event(FSMEvent* event)
 	}
 	return 0;
 }
+
 void ACMCallFSM::s12_on_entry() 
 {
 	ErrorCodeEnum Error = Error_Succeed;
@@ -676,15 +770,28 @@ void ACMCallFSM::s12_on_entry()
 		PostEventFIFO(new FSMEvent(USER_EVT_JMP_FAIL));
 	}
 }
+
 void ACMCallFSM::s12_on_exit() {}
 unsigned int ACMCallFSM::s12_on_event(FSMEvent* event)
 {
 	if (event->iEvt == USER_EVT_HANGUP)
 	{
 		m_bHangup = TRUE;
+		DWORD now = GetTickCount();
+		int interval = now - m_nStarttime;
+		char msg[128];
+		sprintf(msg, "chan connecting, customer active hangup after: %d", interval);
+		LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_CHANCONNECT_HANGUP, msg);
 	}
 	else if (event->iEvt == USER_EVT_SIP_STATE_IDLE) 
 	{
+		if (m_nCurChanServer == MAIN_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_CHANCONNECT_SIPSTATE_IDLE,"sipphone connect server failed at channel connect, main server");
+		}else if (m_nCurChanServer == BACK_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_CHANCONNECT_SIPSTATE_IDLE,"sipphone connect server failed at channel connect, bak server");
+		}else{
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_CHANCONNECT_SIPSTATE_IDLE,"sipphone connect server failed at channel connect, error server");
+		}
 		m_nCurSipServer?(m_nCurSipServer=Error_Server):(m_nCurSipServer=BACK_SERVER);
 		StopChannel();
 	} 
@@ -692,6 +799,13 @@ unsigned int ACMCallFSM::s12_on_event(FSMEvent* event)
 	{
 		if (!m_bHangup)
 		{
+			if (m_nCurChanServer == MAIN_SERVER){
+				LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_CHANCONNECT_CHANSTATE_IDLE,"chan connect server failed, main server");
+			}else if (m_nCurChanServer == BACK_SERVER){
+				LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_CHANCONNECT_CHANSTATE_IDLE,"chan connect server failed, bak server");
+			}else{
+				LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_CHANCONNECT_CHANSTATE_IDLE,"chan connect server failed, error server");
+			}
 			m_nCurChanServer?(m_nCurChanServer=Error_Server):(m_nCurChanServer=BACK_SERVER);
 		}
 		HangupCall();
@@ -704,10 +818,24 @@ unsigned int ACMCallFSM::s12_on_event(FSMEvent* event)
 	}
 	else if (event->iEvt == USER_EVT_ASSISTCHAN_IDEL)
 	{
+		if (m_nCurChanServer == MAIN_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_CHANCONNECT_CHANENTITY_RESTART,"chan mod idle, main server");
+		}else if (m_nCurChanServer == BACK_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_CHANCONNECT_CHANENTITY_RESTART,"chan mod idle, bak server");
+		}else{
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_CHANCONNECT_CHANENTITY_RESTART,"chan mod idle, error server");
+		}
 		ReConnectionAssistchan();
 	}
 	else if (event->iEvt == USER_EVT_SIPPHONE_IDEL)
 	{
+		if (m_nCurChanServer == MAIN_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_CHANCONNECT_SIPENTITY_RESTART,"sipphone mod idle, main server");
+		}else if (m_nCurChanServer == BACK_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_CHANCONNECT_SIPENTITY_RESTART,"sipphone mod idle, bak server");
+		}else{
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_CHANCONNECT_SIPENTITY_RESTART,"sipphone mod idle, error server");
+		}
 		ReConnectionSipphone();
 	}
 	else if (event->iEvt == USER_EVT_STOPLOACALREMOTEVIDEO) 
@@ -717,9 +845,20 @@ unsigned int ACMCallFSM::s12_on_event(FSMEvent* event)
 		m_bHangup=TRUE;
 		StopVideo();
 	}
+	else if (event->iEvt == USER_EVT_JMP_FAIL) 
+	{
+		if (m_nCurChanServer == MAIN_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_MAIN_CHANCONNECT_FUNC_FAILED,"chan connect func failed, main server");
+		}else if (m_nCurChanServer == BACK_SERVER){
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_BAK_CHANCONNECT_FUNC_FAILED,"chan connect func failed, bak server");
+		}else{
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_CHANCONNECT_FUNC_FAILED,"chan connect func failed, error server");
+		}
+	}
 	
 	return 0;
 }
+
 void ACMCallFSM::s13_on_entry() 
 {
 	if (m_bHandFree) 
@@ -731,7 +870,9 @@ void ACMCallFSM::s13_on_entry()
 		PostEventLIFO(new FSMEvent(USER_EVT_JMP_PICKUP));
 	}
 }
+
 void ACMCallFSM::s13_on_exit() {}
+
 unsigned int ACMCallFSM::s13_on_event(FSMEvent* event)
 {
 	if (event->iEvt == USER_EVT_ASSISTCHAN_IDEL)
@@ -828,7 +969,8 @@ unsigned int ACMCallFSM::s21_on_event(FSMEvent* event)
 			PostEventFIFO(new FSMEvent(USER_EVT_JMP_FAIL));
 			//重启mod_sipphone
 			//RealSipErrorCheck();
-			LogEvent(Severity_High,EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogEvent(Severity_Middle, EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone");
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_RESTART_SIPPHONE,"restart sipphone");
 		}
 	}
 	return 0;
@@ -887,7 +1029,8 @@ unsigned int ACMCallFSM::s23_on_event(FSMEvent* event)
 		{
 			m_nSipErrorNum = 0;
 			//RealSipErrorCheck();
-			LogEvent(Severity_High,EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogEvent(Severity_Middle, EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_RESTART_SIPPHONE,"FAIL TIMES, restart sipphone ");
 		}
 	}
 	return 0;
@@ -1041,7 +1184,8 @@ unsigned int ACMCallFSM::s52_on_event(FSMEvent* event)
 			PostEventFIFO(new FSMEvent(USER_EVT_JMP_FAIL));
 			//重启mod_sipphone
 			//RealSipErrorCheck();
-			LogEvent(Severity_High,EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogEvent(Severity_Middle, EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_RESTART_SIPPHONE,"restart sipphone ");
 		}
 
 	}
@@ -1071,7 +1215,8 @@ unsigned int ACMCallFSM::s53_on_event(FSMEvent* event)
 		{
 			m_nSipErrorNum = 0;
 			//RealSipErrorCheck();
-			LogEvent(Severity_High,EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogEvent(Severity_Middle, EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_RESTART_SIPPHONE,"FAIL TIMES, restart sipphone ");
 		}
 	}
 	return 0;
@@ -1151,7 +1296,8 @@ unsigned int ACMCallFSM::s62_on_event(FSMEvent* event)
 			PostEventFIFO(new FSMEvent(USER_EVT_JMP_FAIL));
 			//重启mod_sipphone
 			//RealSipErrorCheck();
-			LogEvent(Severity_High,EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogEvent(Severity_Middle, EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_RESTART_SIPPHONE,"restart sipphone ");
 		}
 	}
 	return 0;
@@ -1180,7 +1326,8 @@ unsigned int ACMCallFSM::s63_on_event(FSMEvent* event)
 		{
 			m_nSipErrorNum = 0;
 			//RealSipErrorCheck();
-			LogEvent(Severity_High,EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogEvent(Severity_Middle, EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
+			LogWarn(Severity_High, Error_Unexpect, LOG_WARN_COUNTERCONNECT_RESTART_SIPPHONE,"FAIL TIMES, restart sipphone ");
 		}
 	}
 	return 0;
@@ -1212,8 +1359,6 @@ int ACMCallFSM::TranslateState( int innerState )
 	case s52:
 	case s53:
 		return eState_Broken;
-	case s7:
-	case s14:
 	case s60:
 	case s61:
 	case s62:
@@ -1221,6 +1366,9 @@ int ACMCallFSM::TranslateState( int innerState )
 		return eState_Releasing;
 	case s9:
 		return eState_LiveDetect;
+	case s7:
+	case s14:
+		return eState_Recording;
 	default:
 		assert(0);
 		return 0;

+ 1 - 1
Module/mod_counterconnector/ConnectorFSM.h

@@ -446,7 +446,7 @@ public:
 		{
 			Dbg("MSClient connected success!");
 			rc = pMSClient->StopSpeakerRender();
-			Dbg("pMSClient->StopSpeakerRender rc:0x%x",rc);
+			Dbg("pMSClient->StopSpeakerRender rc:0x%08x",rc);
 			if(rc != Error_Succeed){
 				Dbg("Stop Speaker Render failed return 0x%08x", rc);
 			}

+ 1 - 0
Module/mod_counterconnector/ConnectorService.xml

@@ -8,6 +8,7 @@
 	<const name="eState_Fail" value="5"/>
 	<const name="eState_Releasing" value="6"/>
 	<const name="eState_LiveDetect" value="7"/>
+	<const name="eState_Recording" value="8"/>
 	<message name="PhoneState">
 		<param name="state" type="int"/>
 		<param name="status" type="string"/>

+ 9 - 8
Module/mod_counterconnector/CounterConnector_def_g.h

@@ -11,14 +11,15 @@ namespace CounterConnector {
 //
 // const goes here
 //
-#define eState_Offline   0
-#define eState_Connecting   1
-#define eState_HandFree   2
-#define eState_Pickup   3
-#define eState_Broken   4
-#define eState_Fail   5
-#define eState_Releasing   6
-#define eState_LiveDetect   7
+#define eState_Offline 0
+#define eState_Connecting 1
+#define eState_HandFree 2
+#define eState_Pickup 3
+#define eState_Broken 4
+#define eState_Fail 5
+#define eState_Releasing 6
+#define eState_LiveDetect 7
+#define eState_Recording 8
 
 #define ConnectService_Method_StartCall 0
 #define ConnectService_Method_StartCallExternal 1

+ 35 - 10
Module/mod_counterconnector/mod_counterconnector.cpp

@@ -8,7 +8,7 @@
 #include "mod_counterconnector.h"
 #include "CounterConnector_msg_g.h"
 #include "../include/EventCode.h"
-
+#include "y2k_time.h"
 using namespace CounterConnector;
 
 #define EVT_CONVERTER	"EventConverter"
@@ -66,15 +66,14 @@ using namespace CounterConnector;
 			m_IsStand2SType = FALSE;
 		}
 
-		ErrorCodeEnum Error;
-		m_pCounterConnectorChannel = new ChannelCounterConnectorClient(this);
-		Error = m_pCounterConnectorChannel->Connect();
-		if (Error != Error_Succeed) 
-		{
-			m_pCounterConnectorChannel->SafeDelete();
-			Dbg("ChannelCounterConnectorClient connect fail!");
-			return Error;
-		}
+	ErrorCodeEnum Error;
+	m_pCounterConnectorChannel = new ChannelCounterConnectorClient(this);
+	Error = m_pCounterConnectorChannel->Connect();
+	if (Error != Error_Succeed) {
+		LogError(Severity_Middle, Error_Hardware, EVENT_MOD_CONNECT_ASSIST_ERROR, "connect assistant channel error");
+		m_pCounterConnectorChannel->SafeDelete();
+		return Error;
+	}
 
 		{
 			ChannelService_BeginState_Sub Sub;
@@ -776,6 +775,8 @@ void CCounterConnectorEntity::OnDetectionStopUnExpected(const char *pszEntityNam
 
 ChannelCounterConnectorClient::ChannelCounterConnectorClient( CCounterConnectorEntity *pEntity ) : ChannelService_ClientBase(pEntity)
 {
+	m_eLastState = eChannelState_Idle;
+	m_uConnectTime = 0;
 }
 
 void ChannelCounterConnectorClient::OnMessage(ErrorCodeEnum Error, ChannelService_State_Info &Msg, CSmartPointer<IReleasable> pData)
@@ -786,12 +787,36 @@ void ChannelCounterConnectorClient::OnMessage(ErrorCodeEnum Error, ChannelServic
 		if (Msg.state == eChannelState_Idle) 
 		{
 			pEntity->m_fsm.m_bIsAgentControl = FALSE;
+			Dbg("ChannelState is eChannelState_Idle");
+
+			if (eChannelState_Connected == m_eLastState){
+				char strmsg[MAX_PATH] = {0};
+				_snprintf(strmsg, MAX_PATH, "call connected time is %us.", y2k_time_now() - m_uConnectTime);
+				LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_CALL_CONNECT_TIME, strmsg);
+			}
+
+			if (eChannelState_Connecting == m_eLastState){
+				LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_ASSIST_CONNECT_FAILED,"make call failed for assistant channel connect failed!");
+			}
 		} 
 		else if (Msg.state == eChannelState_Connected) 
 		{
 			pEntity->m_fsm.m_bIsAgentControl = TRUE;
 			pEntity->SendCurAudioDevice();
+			Dbg("ChannelState is eChannelState_Connected");
+			m_uConnectTime = y2k_time_now();
+		}
+		else if (eChannelState_Connecting == Msg.state){
+			Dbg("ChannelState is eChannelState_Connecting");
 		}
+		else if(eChannelState_Closing == Msg.state){
+			Dbg("ChannelState is eChannelState_Closing");
+			if (eChannelState_Connecting == m_eLastState){
+				LogWarn(Severity_High, Error_Debug, LOG_WARN_COUNTERCONNECT_ASSIST_CONNECT_FAILED,"make call failed for assistant channel closed.");
+			}
+		}
+
+		m_eLastState = Msg.state;
 	}
 }
 

+ 4 - 0
Module/mod_counterconnector/mod_counterconnector.h

@@ -39,6 +39,10 @@ public:
 	ChannelCounterConnectorClient(CCounterConnectorEntity *pEntity);
 	virtual void OnMessage(ErrorCodeEnum Error, ChannelService_State_Info &Msg,  CSmartPointer<IReleasable> pData);	
 	virtual void OnMessage(ErrorCodeEnum Error, ChannelService_Packet_Info &Msg, CSmartPointer<IReleasable> pData);
+
+private:
+	int m_eLastState;
+	unsigned int m_uConnectTime;
 };
 
 

+ 17 - 0
Module/mod_sipphone/Event.h

@@ -50,6 +50,9 @@
 #define ERROR_MOD_SIP_HANDFREE_ADDVOLUMNFAIL			0x30180170  //免提加强音量失败,级别2	
 #define ERROR_MOD_SIP_HANDFREE_REDUCEVOLUMNFAIL			0x30180171  //免提恢复音量失败,级别2
 
+
+#define EVENT_MOD_SIP_LOCAL_WINDOW_CREATE_FAILED		0x30190501	//创建本地图像渲染框失败
+#define EVENT_MOD_SIP_REMOTE_WINDOW_CREATE_FAILED		0x30190502  //创建远端图像渲染框失败
 #define EVENT_MOD_SIP_AUDIO_RTP_CREATE					0x30190001
 #define EVENT_MOD_SIP_AUDIO_RTP_DESTROY					0x30190002
 
@@ -84,6 +87,20 @@
 #define EVENT_MOD_SIP_LOCAL_VIDEO_RENDER_DESTROY					0x30190033
 #define EVENT_MOD_SIP_REMOTE_VIDEO_RENDER_DESTROY					0x30190034
 
+//audio engine error
+#define ERROR_MOD_SIP_APR_POOL_CREATE_FAILED						0x30190601  //内存分配失败,级别2
+#define ERROR_MOD_SIP_AUDIO_ENGINE_CREATE_FAILED					0x30190602  //audio engine create failed,级别2
+#define ERROR_MOD_SIP_AUDIO_ENGINE_START_FAILED						0x30190603  //audio engine start failed,级别2
+#define ERROR_MOD_SIP_AUDIO_RTP_SESSION_CREATE_FAILED				0x30190604  //audio rtp session create2 failed,级别2
+#define ERROR_MOD_SIP_AUDIO_RTP_SESSION_RESET_FAILED				0x30190605  //audio rtp session reset failed,级别2
+#define ERROR_MOD_SIP_AUDIO_BRIDGE_CREATE_FAILED					0x30190606  //audio bridge create failed,级别2
+#define ERROR_MOD_SIP_AUDIO_MICSPK2_CREATE_FAILED					0x30190607  //audio micspk2 windows create failed,级别2
+#define ERROR_MOD_SIP_AUDIO_DSP_CREATE_FAILED						0x30190608  //audio dsp create failed,级别2
+#define ERROR_MOD_SIP_AUDIO_RESIZE_CREATE_FAILED					0x30190609  //audio resize create failed,级别2
+#define ERROR_MOD_SIP_AUDIO_CODEC_CREATE_FAILED						0x3019060A  //audio codec create failed,级别2
+#define ERROR_MOD_SIP_AUDIO_RTP_CREATE_FAILED						0x3019060B  //audio rtp create failed,级别2
+#define ERROR_MOD_SIP_AUDIO_CONTEXT_CREATE_FAILED					0x3019060C  //audio context create failed,级别2
+
 //event
 #define EVENT_MOD_CONNECT_PICKUP_CALL	0x10303041	// 提机呼叫
 

+ 38 - 40
Module/mod_sipphone/audio_session.cpp

@@ -520,40 +520,35 @@ static int phonemedia_start(audio_session_t *session)
 	if (conf->local_ptime != conf->remote_ptime) {
 		conf->local_ptime = conf->remote_ptime;
 	}
+
 	status = apr_pool_create(&media->pool, NULL);
 	if (status != APR_SUCCESS) {
-		Dbg("create pool failed!");
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_APR_POOL_CREATE_FAILED, "create media pool failed!");
 		return Error_Resource;
 	}
-	else {
-		Dbg("create pool success!");
-	}
 
 	status = audioengine_create(media->pool, &media->engine);
 	if (status != APR_SUCCESS) {
-		Dbg("create audio engine failed!");
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_ENGINE_CREATE_FAILED, "create audio engine failed!");
 		goto on_error;
 	}
-	else {
-		Dbg("create audio engine success!");
-	}
 
 	status = audioengine_start(media->engine);
 	if (status != APR_SUCCESS) {
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_ENGINE_START_FAILED, "audio engine  start failed!");
 		goto on_error;
 	}
-	else {
-		Dbg("audio engine start success!");
-	}
+	Dbg("audioengine_start success!");
 
 	rc = rtp_session_create2(conf->local_rtp_ip, conf->local_rtp_port, 2, &media->rtpsess);
 	if (rc != 0) {
-		char strInfo[MAX_PATH] = { 0 };
-		snprintf(strInfo, MAX_PATH, "audio rtp create2 failed and local port is %d, rc=%d", conf->local_rtp_port, rc);
-		LogWarn(Severity_Middle, Error_InvalidState, EVENT_MOD_SIP_AUDIO_RTP_CREATE, strInfo);
+		char strmsg[MAX_PATH] = { 0 };
+		_snprintf(strmsg, MAX_PATH, "audio rtp session create2 failed and local port is %d, rc=%d", conf->local_rtp_port, rc);
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_RTP_SESSION_CREATE_FAILED, strmsg);
+		LogWarn(Severity_Middle, Error_InvalidState, EVENT_MOD_SIP_AUDIO_RTP_CREATE, strmsg);
 		goto on_error;
 	}
-	else {
+	else{
 		char strMessage[MAX_PATH] = { 0 };
 		snprintf(strMessage, MAX_PATH, "audio rtp create2 success and local port is %d.", conf->local_rtp_port);
 		LogWarn(Severity_Middle, Error_Debug, EVENT_MOD_SIP_AUDIO_RTP_CREATE, strMessage);
@@ -561,18 +556,25 @@ static int phonemedia_start(audio_session_t *session)
 
 	rc = rtp_session_reset2(media->rtpsess, conf->dir, conf->remote_rtp_ip, conf->remote_rtp_port, conf->remote_rtp_port + 1);
 	if (rc != 0) {
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_RTP_SESSION_RESET_FAILED, "audio rtp session reset failed!");
 		goto on_error;
 	}
-	Dbg("rtp_session_reset2 success! rc = %d", rc);
+	Dbg("rtp_session_reset2 success!");
 	
 	status = audiobridge_create(media->pool, media->engine, &media->bridge);
-	if (status != APR_SUCCESS)
+	if (status != APR_SUCCESS){
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_BRIDGE_CREATE_FAILED, "audio bridge create failed!");
 		goto on_error;
+	}
 	Dbg("audiobridge_create success!");
 
 	status = apr_pool_create(&media->micspk_pool, media->pool);
-	if (status != APR_SUCCESS)
+	if (status != APR_SUCCESS){
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_APR_POOL_CREATE_FAILED, "create media micspk_pool failed!");
 		goto on_error;
+	}
+	Dbg("apr_pool_create success!");
+
 	if (in_agc)
 		opt_micspk |= AMS2_OPT_AGC;
 	if (in_ns)
@@ -607,9 +609,10 @@ static int phonemedia_start(audio_session_t *session)
 			write_opt |= AUDIO_DSP_DENOISE;
 		
 		status = audiodsp_create(media->micspk_pool, media->engine, read_opt, write_opt, AUDIO_CLOCK, &media->dspstream);
-		if (status != APR_SUCCESS)
+		if (status != APR_SUCCESS){
+			LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_DSP_CREATE_FAILED, "create audio dsp failed!");
 			goto on_error;
-
+		}
 		Dbg("audiodsp_create success!");
 	}
 
@@ -623,21 +626,23 @@ static int phonemedia_start(audio_session_t *session)
 	status = audioresize_create(media->pool, media->engine, FRAME_TIME*2*AUDIO_CLOCK/1000, 
 		conf->remote_ptime*2*AUDIO_CLOCK/1000, FRAME_TIME*2*AUDIO_CLOCK/1000, 
 		conf->local_ptime*2*AUDIO_CLOCK/1000, &media->resizestream);
-	if (status != APR_SUCCESS)
+	if (status != APR_SUCCESS){
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_RESIZE_CREATE_FAILED, "create audio resize failed!");
 		goto on_error;
+	}
 
-	Dbg("audioresize_create success!");
-	
 	status = audiocodec_create(media->pool, media->engine, codec, AUDIO_CLOCK, FRAME_TIME, 
 		AUDIO_CODEC_OPT_ENCODE_WRITE, &media->codecstream);
-	if (status != APR_SUCCESS)
+	if (status != APR_SUCCESS){
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_CODEC_CREATE_FAILED, "create audio codec failed!");
 		goto on_error;
-
-	Dbg("audiocodec_create success!");
+	}
 
 	status = audiortp_create(media->pool, media->engine, media->rtpsess, &media->rtpstream);
-	if (status != APR_SUCCESS)
+	if (status != APR_SUCCESS){
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_RTP_CREATE_FAILED, "create audio rtp failed!");
 		goto on_error;
+	}
 	Dbg("audio_session_t session addr is 0x%08x, audiortp_create success,and media->rtpstream addrs is 0x%08x!",session, media->rtpstream);
 
 	g_nAudioRecvNum = 0;
@@ -713,27 +718,20 @@ static int phonemedia_start(audio_session_t *session)
 	}
 
 	status = audiocontext_create(media->pool, media->engine, &media->context);
-	if (status != APR_SUCCESS)
+	if (status != APR_SUCCESS){
+		LogWarn(Severity_High, Error_Unexpect, ERROR_MOD_SIP_AUDIO_CONTEXT_CREATE_FAILED, "create audio context failed!");
 		goto on_error;
-
+	}
 	Dbg("audiocontext_create success!");
 
 	audiocontext_add_driver(media->context, &media->bridge->base);
 	audioengine_start_context(media->engine, media->context);
 
-	/*if (media->record.state) 
-	{
-		rc = phonemedia_on_remote_recording(media);
-		if (rc != 0) {
-			goto on_error;
-		}
-	}*/
-
 	return 0;
 
 on_error:
 	phonemedia_stop(media, TRUE);
-	Dbg("phonemedia_start error!!!");
+	Dbg("phonemedia_stop error!!!");
 	return Error_Resource;
 }
 
@@ -743,8 +741,8 @@ static int phonemedia_stop(audio_session_t *session, int b_record_turn_off)
 	if (media->context) {
 		audioengine_stop_context(media->engine, media->context);
 		audiocontext_remove_driver(media->context, &media->bridge->base);
-		//audiocontext_destroy(media->context);
-		//media->context = NULL;
+		audiocontext_destroy(media->context);
+		media->context = NULL;
 	}
 	if (media->engine) {
 		audioengine_stop(media->engine);