⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipgatewaydlg.cpp

📁 三汇CTI示例程序源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		SetEngWinLab(this,	IDC_STATIC_IP,		GATEWAY3);
		SetEngWinLab(this,	ID_DISCONNECT,		GATEWAY4);
		SetEngWinLab(this,	IDOK,				GATEWAY5);
	}
}

///////////////////////////////////////////////////////////////////////////////////////////////
//  update Analog channels's list control
void CIPGatewayDlg::UpDateAnalogChListCtrl()
{
	for(int i = 0; i < m_nTotalAnalogCh; i++)
	{
		CString strState;
		switch(m_AnalogCh[i].Step) 
		{
			case E_STATE_ANALOG_UNAVAILABLE:			strState.LoadString(IDS_GATEWAY72);	break;
			case E_STATE_ANALOG_IDLE:					strState.LoadString(IDS_GATEWAY38);	break;
			case E_STATE_ANALOG_WAIT_CALLER_CONNECT:	strState.LoadString(IDS_GATEWAY39);	break;
			case E_STATE_ANALOG_PLAY_SELECT:			strState.LoadString(IDS_GATEWAY40);	break;
			case E_STATE_ANALOG_CHECK_PLAY_SELECT:		strState.LoadString(IDS_GATEWAY41);	break;
			case E_STATE_ANALOG_WAIT_IP_DIAL:			strState.LoadString(IDS_GATEWAY42);	break;
			case E_STATE_ANALOG_WAIT_IP_PICKUP:			strState.LoadString(IDS_GATEWAY43);	break;
			case E_STATE_ANALOG_WAIT_HANGUP:			strState.LoadString(IDS_GATEWAY44);	break;
			case E_STATE_ANALOG_CALLOUT:				strState.LoadString(IDS_GATEWAY45);	break;
			case E_STATE_ANALOG_WAIT_CALLEE_PICKUP:		strState.LoadString(IDS_GATEWAY46);	break;
			case E_STATE_ANALOG_CALLEE_PICKEDUP:		strState.LoadString(IDS_GATEWAY47);	break;
			default:									strState.LoadString(IDS_GATEWAY48);	break;								strState = "未定义";			break ;
		}

		if(m_AnalogChList.GetItemText(i,2) != strState)
		{
			m_AnalogChList.SetItemText(i, 2, strState);
		}
		
		CString strDirection;
		if(m_AnalogCh[i].iDirection == 1)
		{
			strDirection.LoadString(IDS_GATEWAY49); 
		}
		else
		{
			if(m_AnalogCh[i].iDirection == 2)
			{
				strDirection.LoadString(IDS_GATEWAY50);
			}
			else
			{
				strDirection = "";
			}
		}
		
		if(m_AnalogChList.GetItemText(i,3) != strDirection)
		{
			m_AnalogChList.SetItemText(i, 3,  strDirection);
		}
		
		char szChId[3];
		itoa(m_AnalogCh[i].nIpCh,szChId,10);
		if(m_AnalogChList.GetItemText(i, 4) != szChId)
		{
			m_AnalogChList.SetItemText(i, 4,  szChId);
		}
		
		if(m_AnalogChList.GetItemText(i, 5) != m_AnalogCh[i].szCallerTelNumber)
		{
			m_AnalogChList.SetItemText(i, 5,  m_AnalogCh[i].szCallerTelNumber);
		}
		
		if(m_AnalogChList.GetItemText(i, 6) != m_AnalogCh[i].szCalleeTelNumber)
		{
			m_AnalogChList.SetItemText(i, 6,  m_AnalogCh[i].szCalleeTelNumber);
		}
	}
}

///////////////////////////////////////////////////////////////////////////////////////////////
// update SS1 channels's list control
void CIPGatewayDlg::UpDateSS1ChListCtrl()
{
	for(int i = 0; i < m_nTotalSS1Ch; i++)
	{
		CString strState;
		switch(m_SS1Ch[i].Step) 
		{
			case E_STATE_SS1_UNAVAILABLE:				strState.LoadString(IDS_GATEWAY71);	break;
			case E_STATE_SS1_IDLE:						strState.LoadString(IDS_GATEWAY52);	break;
			case E_STATE_SS1_WAIT_CALLER_CONNECT:		strState.LoadString(IDS_GATEWAY53);	break;
			case E_STATE_SS1_PLAY_SELECT:				strState.LoadString(IDS_GATEWAY54);	break;
			case E_STATE_SS1_CHECK_PLAY_SELECT:			strState.LoadString(IDS_GATEWAY55);	break;
			case E_STATE_SS1_WAIT_IP_DIAL:				strState.LoadString(IDS_GATEWAY56);	break;
			case E_STATE_SS1_WAIT_IP_PICKUP:			strState.LoadString(IDS_GATEWAY57);	break;
			case E_STATE_SS1_WAIT_HANGUP:				strState.LoadString(IDS_GATEWAY58);	break;
			case E_STATE_SS1_CALLOUT:					strState.LoadString(IDS_GATEWAY59);	break;
			case E_STATE_SS1_WAIT_CALLEE_PICKUP:		strState.LoadString(IDS_GATEWAY60);	break;
			case E_STATE_SS1_CALLEE_PICKEDUP:			strState.LoadString(IDS_GATEWAY61);	break;
			default:									strState.LoadString(IDS_GATEWAY62);	break;								strState = "未定义";			break ;
		}
		
		if(m_SS1ChList.GetItemText(i,2) != strState)
		{
			m_SS1ChList.SetItemText(i, 2, strState);
		}
		
		CString strDirection;
		if(m_SS1Ch[i].iDirection == 1)
		{
			strDirection.LoadString(IDS_GATEWAY68); 
		}
		else
		{
			if(m_SS1Ch[i].iDirection == 2)
			{
				strDirection.LoadString(IDS_GATEWAY69);
			}
			else
			{
				strDirection = "";
			}
		}
		
		if(m_SS1ChList.GetItemText(i,3) != strDirection)
		{
			m_SS1ChList.SetItemText(i, 3,  strDirection);
		}
		
		char szChId[3];
		itoa(m_SS1Ch[i].nIpCh,szChId,10);
		if(m_SS1ChList.GetItemText(i, 4) != szChId)
		{
			m_SS1ChList.SetItemText(i, 4,  szChId);
		}
		
		if(m_SS1ChList.GetItemText(i, 5) != m_SS1Ch[i].szCallerTelNumber)
		{
			m_SS1ChList.SetItemText(i, 5,  m_SS1Ch[i].szCallerTelNumber);
		}
		
		if(m_SS1ChList.GetItemText(i, 6) != m_SS1Ch[i].szCalleeTelNumber)
		{
			m_SS1ChList.SetItemText(i, 6,  m_SS1Ch[i].szCalleeTelNumber);
		}
	}
}

void CIPGatewayDlg::UpDateIpChListCtrl()
{
	for(int i = 0; i < m_nTotalIpCh; i++)
	{
		CString strState;
		switch( m_IpCh[i].Step ) 
		{
			case E_STATE_IP_UNAVAILABLE:			strState.LoadString(IDS_GATEWAY73);		break;
			case E_STATE_IP_IDLE:					strState.LoadString(IDS_GATEWAY25);		break ;
			case E_STATE_IP_WAIT_CALLER_CONNECT:	strState.LoadString(IDS_GATEWAY26);		break ;
			case E_STATE_IP_PLAY_SELECT1:			strState.LoadString(IDS_GATEWAY27);		break ;
			case E_STATE_IP_CHECK_PLAY_SELECT1:		strState.LoadString(IDS_GATEWAY28);		break ;
			case E_STATE_IP_PLAY_SELECT2:			strState.LoadString(IDS_GATEWAY74);		break ;
			case E_STATE_IP_CHECK_PLAY_SELECT2:		strState.LoadString(IDS_GATEWAY75);		break ;
			case E_STATE_IP_WAIT_LINKCH_DIAL:		strState.LoadString(IDS_GATEWAY29);		break ;
			case E_STATE_IP_WAIT_LINKCH_PICKUP:		strState.LoadString(IDS_GATEWAY30);		break ;
			case E_STATE_IP_WAIT_HANGUP:			strState.LoadString(IDS_GATEWAY31);		break ;
			case E_STATE_IP_CALLOUT:				strState.LoadString(IDS_GATEWAY32);		break ;
			case E_STATE_IP_WAIT_CALLEE_PICKUP:		strState.LoadString(IDS_GATEWAY33);		break ;
			case E_STATE_IP_CALLEE_PICKEDUP:		strState.LoadString(IDS_GATEWAY34);		break ;
			default:								strState.LoadString(IDS_GATEWAY35);		break ;								strState = "未定义";			break ;
		}
		
		if(m_IpChList.GetItemText(i,2) != strState)
		{
			m_IpChList.SetItemText(i, 2, strState);
		}
		
		CString strDirection;
		if(m_IpCh[i].iDirection == 1)
		{
			
			strDirection.LoadString(IDS_GATEWAY36); 
		}
		else
		{
			if(m_IpCh[i].iDirection == 2)
			{
				strDirection.LoadString(IDS_GATEWAY37); 
			}
			else
			{
				strDirection = "";
			}
		}
		
		if(m_IpChList.GetItemText(i,3) != strDirection)
		{
			m_IpChList.SetItemText(i, 3,  strDirection);
		}
		
		char szChId[3];
		itoa(m_IpCh[i].nLinkCh,szChId,10);
		if(m_IpChList.GetItemText(i, 4) != szChId)
		{
			m_IpChList.SetItemText(i, 4,  szChId);
		}
		
		if(m_IpChList.GetItemText(i, 5) != m_IpCh[i].szCallerTelNumber)
		{
			m_IpChList.SetItemText(i, 5,  m_IpCh[i].szCallerTelNumber);
		}
		
		if(m_IpChList.GetItemText(i, 6) != m_IpCh[i].szCalleeTelNumber)
		{
			m_IpChList.SetItemText(i, 6,  m_IpCh[i].szCalleeTelNumber);
		}
		
		char szCodec[3];
		ltoa(m_IpCh[i].ulCodecType,szCodec,10);
		if(m_IpChList.GetItemText(i,4) != szCodec)
		{
			m_IpChList.SetItemText(i, 4,  szCodec);
		}	
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////

// Analog channel operation functions
void CIPGatewayDlg::Session_SetAnalogChState(int nAnalogCh, ANALOGCH_STATE state)
{
	for(int i = 0; i < m_nTotalAnalogCh; i++)
	{
		if(m_AnalogCh[i].nChId == nAnalogCh)
		{
			m_AnalogCh[i].Step = state;
			break;
		}
	}
}

BOOL CIPGatewayDlg::Session_SetAnalogChDial(int nAnalogCh, int nIpCh, char *szCallerTelNumber, char *szCalleeTelNumber, int iDirection)
{
	for(int i = 0; i < m_nTotalAnalogCh; i++)
	{
		if(m_AnalogCh[i].nChId == nAnalogCh)
		{
			ASSERT(E_STATE_ANALOG_IDLE == m_AnalogCh[i].Step);
			ASSERT('\0' != szCalleeTelNumber[0]);
			m_AnalogCh[i].nIpCh = nIpCh;
			strcpy(m_AnalogCh[i].szCallerTelNumber, szCallerTelNumber);
			strcpy(m_AnalogCh[i].szCalleeTelNumber, szCalleeTelNumber);
			m_AnalogCh[i].iDirection = iDirection;
			m_AnalogCh[i].Step = E_STATE_ANALOG_CALLOUT;
			return TRUE;
		}
	}

	return FALSE;
}

int CIPGatewayDlg::Session_FindIdleAnalogCh()
{
	int iSearchMode = 0x1;
	int nAnalogCh = SsmSearchIdleCallOutCh(iSearchMode, 0);
	if(-1 == nAnalogCh)
	{
		AppErrorHandler(-1);
		return -1;
	}
	else
	{
		if(0 == SsmGetChType(nAnalogCh))
		{
			return nAnalogCh;
		}
		else
		{
			return -1;
		}
	}
}

BOOL CIPGatewayDlg::Session_IsAnalogChPickedUp(int nChId)
{
	for(int i = 0; i < m_nTotalAnalogCh; i++)
	{
		if(m_AnalogCh[i].nChId == nChId)
		{
			if(E_STATE_ANALOG_CALLEE_PICKEDUP == m_AnalogCh[i].Step)
			{
				return TRUE;
			}
		}
	}
	return FALSE;
}

BOOL CIPGatewayDlg::Session_IsAnalogChIdle(int nChId)
{
	for(int i = 0; i < m_nTotalAnalogCh; i++)
	{
		if(m_AnalogCh[i].nChId == nChId)
		{
			if(E_STATE_ANALOG_IDLE == m_AnalogCh[i].Step)
			{
				return TRUE;
			}
		}
	}
	return FALSE;
}

// SS1 channel operation function
void CIPGatewayDlg::Session_SetSS1ChState(int nSS1Ch, SS1CH_STATE state)
{
	for(int i = 0; i < m_nTotalSS1Ch; i++)
	{
		if(m_SS1Ch[i].nChId == nSS1Ch)
		{
			m_SS1Ch[i].Step = state;
			break;
		}
	}
}

BOOL CIPGatewayDlg::Session_SetSS1ChDial(int nSS1Ch, int nIpCh, char *szCallerTelNumber, char *szCalleeTelNumber, int iDirection)
{
	for(int i = 0; i < m_nTotalSS1Ch; i++)
	{
		if(m_SS1Ch[i].nChId == nSS1Ch)
		{
			ASSERT(E_STATE_SS1_IDLE == m_SS1Ch[i].Step);
			ASSERT('\0' != szCalleeTelNumber[0]);
			m_SS1Ch[i].nIpCh = nIpCh;
			strcpy(m_SS1Ch[i].szCallerTelNumber, szCallerTelNumber);
			strcpy(m_SS1Ch[i].szCalleeTelNumber, szCalleeTelNumber);
			m_SS1Ch[i].iDirection = iDirection;
			m_SS1Ch[i].Step = E_STATE_SS1_CALLOUT;
			return TRUE;
		}
	}
	return FALSE;
}

int CIPGatewayDlg::Session_FindIdleSS1Ch()
{
	int iSearchMode = 0x1 << 1;
	int nSS1Ch = SsmSearchIdleCallOutCh(iSearchMode, 0);
	if(-1 == nSS1Ch)
	{
		AppErrorHandler(-1);
		return -1;
	}
	else
	{
		if(4 == SsmGetChType(nSS1Ch))
		{
			int nDirection;
			int iRet;
			
			iRet = SsmGetAutoCallDirection(nSS1Ch, &nDirection);
			if((1 == nDirection) || (2 == nDirection))
			{
				return nSS1Ch;
			}
			else
			{
				return -1;
			}
		}
		else
		{
			return -1;
		}
	}
}

BOOL CIPGatewayDlg::Session_IsSS1ChPickedUp(int nChId)
{
	for(int i = 0; i < m_nTotalSS1Ch; i++)
	{
		if(m_SS1Ch[i].nChId == nChId)
		{
			if(E_STATE_SS1_CALLEE_PICKEDUP == m_SS1Ch[i].Step)
			{
				return TRUE;
			}
		}
	}
	return FALSE;
}

BOOL CIPGatewayDlg::Session_IsSS1ChIdle(int nChId)
{
	for(int i = 0; i < m_nTotalSS1Ch; i++)
	{
		if(m_SS1Ch[i].nChId == nChId)
		{
			if(E_STATE_SS1_IDLE == m_SS1Ch[i].Step)
			{
				return TRUE;
			}
		}
	}
	return FALSE;
}

// IP channel operation function
void CIPGatewayDlg::Session_SetIpChDial(int nIpCh, int nLinkCh, char *szCallerTelNumber, char *szCalleeTelNumber, int iDirection)
{
	for(int i = 0; i < m_nTotalIpCh; i++)
	{
		if(m_IpCh[i].nChId == nIpCh)
		{
			ASSERT(E_STATE_IP_IDLE == m_IpCh[i].Step);
			ASSERT('\0' != szCalleeTelNumber[0]);
			m_IpCh[i].nLinkCh = nLinkCh;
			strcpy(m_IpCh[i].szCallerTelNumber, szCallerTelNumber);
			strcpy(m_IpCh[i].szCalleeTelNumber, szCalleeTelNumber);
			m_IpCh[i].iDirection = iDirection;
			m_IpCh[i].Step = E_STATE_IP_CALLOUT;
		}
	}
}

int CIPGatewayDlg::Session_FindIdleIpCh()
{

	int iSearchMode;
	if(PROTOCOL_H323 == m_nIPProtocol)
	{
		iSearchMode = 0x1 << 9;
	}
	else
	{
		iSearchMode = 0x1 << 8;
	}
	
	int nIpCh = SsmSearchIdleCallOutCh(iSearchMode, 0);
	if(-1 == nIpCh)
	{
		AppErrorHandler(-1);
		return -1;
	}
	else
	{
		if(m_nIPProtocol == SsmGetChType(nIpCh))
		{
			return nIpCh;
		}
		else
		{
			return -1;
		}
	}
}

BOOL CIPGatewayDlg::Session_IsIpChPickedUp(int nChId)
{
	for(int i = 0; i < m_nTotalIpCh; i++)
	{
		if(m_IpCh[i].nChId == nChId)
		{
			if(E_STATE_IP_CALLEE_PICKEDUP == m_IpCh[i].Step)
			{
				return TRUE;
			}
		}
	}
	return FALSE;
}

BOOL CIPGatewayDlg::Session_IsIpChIdle(int nChId)
{
	for(int i = 0; i < m_nTotalIpCh; i++)
	{
		if(m_IpCh[i].nChId == nChId)
		{
			if(E_STATE_IP_IDLE == m_IpCh[i].Step)
			{
				return TRUE;
			}
		}
	}
	return FALSE;
}

BOOL CIPGatewayDlg::Session_IsIPLinkChIdle(int nLinkCh, int nLinkType)
{
	switch(nLinkType)
	{
		case LINK_WITH_ANALOG:
			return Session_IsAnalogChIdle(nLinkCh);
		case LINK_WITH_SS1:
			return Session_IsSS1ChIdle(nLinkCh);
		default:		
			return FALSE;
	}
}

BOOL CIPGatewayDlg::Session_SetIPLinkChDial(int nLinkCh, int nLinkType, int nIpCh, char *szCallerTelNumber, char *szCalleeTelNumber, int iDirection)
{
	switch(nLinkType)
	{
		case LINK_WITH_ANALOG:	
			return Session_SetAnalogChDial(nLinkCh, nIpCh, szCallerTelNumber, szCalleeTelNumber, iDirection);
		case LINK_WITH_SS1:
			return Session_SetSS1ChDial(nLinkCh, nIpCh, szCallerTelNumber, szCalleeTelNumber, iDirection);
		default:
			return FALSE;
	}
}

int CIPGatewayDlg::Session_FindIdleIPLinkCh(int nLinkType)
{
	switch(nLinkType)
	{
		case LINK_WITH_ANALOG:
			return Session_FindIdleAnalogCh();
		case LINK_WITH_SS1:
			return Session_FindIdleSS1Ch();
		default:
			return -1;
	}
}

BOOL CIPGatewayDlg::Session_IsIPLinkChPickedUp(int nLinkCh, int nLinkType)
{
	switch(nLinkType)
	{
		case LINK_WITH_ANALOG:
			return Session_IsAnalogChPickedUp(nLinkCh);
		case LINK_WITH_SS1:
			return Session_IsSS1ChPickedUp(nLinkType);
		default:
			return FALSE;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -