| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #include "StdAfx.h"
- #include "CallStringMaker.h"
- #include "Config.h"
- CCallStringMaker::CCallStringMaker(void)
- {
- }
- CCallStringMaker::~CCallStringMaker(void)
- {
- }
- /*****************************************************************
- **【函数名称】 __match
- **【函数功能】 匹配呼叫字冠
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CCallStringMaker::__match( const CString& CalleeNum, TRUNK_MATCH* pTrunkMatch )
- {
- if(lstrcmp(pTrunkMatch->Prefix, CalleeNum.Left(lstrlen(pTrunkMatch->Prefix))) == 0)
- return true;
- else
- return false;
- }
- /*****************************************************************
- **【函数名称】 __make
- **【函数功能】 为中继呼叫生成字符串
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CCallStringMaker::__make( CString& CallerNum, CString& CalleeNum, CString& CallString, TRUNK_MATCH* pTrunkMatch )
- {
- SIP_ACCOUNT* pAccount = CConfig::sipAccount().getAccount(pTrunkMatch->TrunkItemId);
- //ASSERT(pAccount != NULL);
- if(pAccount == NULL)
- {
- LOGGER(LOG_LEVEL_WARNING, _T("{CallStringMaker}: 生成呼叫字符串时获取网关账户信息失败, AccountId = %d"), pTrunkMatch->TrunkItemId);
- return false;
- }
- if(CallerNum.GetLength() == 0) // 若主叫号码为空,则用缺省主叫号码
- CallerNum = pTrunkMatch->Caller;
- CalleeNum = CalleeNum.Mid(lstrlen(pTrunkMatch->Prefix)); // 修正被叫号码(删除出局字冠)
- CallString.Format(_T("sofia/gateway/%s/%s"), pAccount->Account, CalleeNum);
- return true;
- }
- /*****************************************************************
- **【函数名称】 __make
- **【函数功能】 为分机呼叫生成字符串
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CCallStringMaker::__make( CString& CalleeNum, CString& CallString )
- {
- CallString.Format(_T("user/%s"), CalleeNum);
- return true;
- }
- /*****************************************************************
- **【函数名称】 makeCallString
- **【函数功能】 生成呼叫字符串
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CCallStringMaker::makeCallString( CString& CallerNum, CString& CalleeNum, CString& CallString )
- {
- CCfgTrunkMatch& Match = CConfig::trunkMatch();
- POSITION Pos = Match.GetHeadPosition();
- while(Pos != NULL)
- {
- TRUNK_MATCH* pMatch = Match.GetNext(Pos);
- ASSERT(pMatch != NULL);
- if(__match(CalleeNum, pMatch))
- return __make(CallerNum, CalleeNum, CallString, pMatch);
- }
- return __make(CalleeNum, CallString);
- }
- /*****************************************************************
- **【函数名称】 makeCallStringWithDefault
- **【函数功能】 生成呼叫字符串若失败则用缺省网关账户
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CCallStringMaker::makeCallStringWithDefault( CString& CallerNum, CString& CalleeNum, CString& CallString )
- {
- CCfgTrunkMatch& Match = CConfig::trunkMatch();
- TRUNK_MATCH* pMatchDefault = Match.GetHead();
- POSITION Pos = Match.GetHeadPosition();
- while(Pos != NULL)
- {
- TRUNK_MATCH* pMatch = Match.GetNext(Pos);
- ASSERT(pMatch != NULL);
- if(pMatch->Priority > pMatchDefault->Priority)
- pMatchDefault = pMatch;
- if(__match(CalleeNum, pMatch))
- return __make(CallerNum, CalleeNum, CallString, pMatch);
- }
- return __make(CallerNum, CalleeNum, CallString, pMatchDefault);
- }
|