#include "StdAfx.h" #include "AidedUnit.h" #include "Config.h" #include "MC.h" CAidedUnit::CAidedUnit(LPCTSTR Prefix) : m_Prefix(Prefix) { } CAidedUnit::~CAidedUnit(void) { } /***************************************************************** **【函数名称】 add **【函数功能】 添加中继项 **【参数】 **【返回值】 ****************************************************************/ void CAidedUnit::add( TRUNK_MATCH* pTrunkMatch ) { ASSERT(pTrunkMatch != NULL); if(m_TrunkItemList.IsEmpty() || m_TrunkItemList.GetHead()->Priority <= pTrunkMatch->Priority) { m_TrunkItemList.AddHead(pTrunkMatch); } else { POSITION Pos = m_TrunkItemList.GetTailPosition(); while(Pos != NULL) { POSITION PosCur = Pos; TRUNK_MATCH* pLastMatch = m_TrunkItemList.GetPrev(Pos); if(pLastMatch->Priority >= pTrunkMatch->Priority) { m_TrunkItemList.InsertAfter(PosCur, pTrunkMatch); break; } } } } /***************************************************************** **【函数名称】 match **【函数功能】 匹配呼叫字冠 **【参数】 **【返回值】 ****************************************************************/ bool CAidedUnit::match( const CString& CalleeNum ) { if(m_Prefix == CalleeNum.Left(m_Prefix.GetLength())) return true; else return false; } /***************************************************************** **【函数名称】 aidedAlloc **【函数功能】 辅助分配通道 **【参数】 **【返回值】 ****************************************************************/ COneLeg* CAidedUnit::aidedAlloc( CString& CallerNum, CString& CalleeNum, TRUNK_ITEM** pTrunkItem ) { ASSERT(pTrunkItem != NULL); COneLeg* pCallLeg = NULL; TRUNK_MATCH* pMatch = NULL; TRUNK_ITEM* pItem = NULL; POSITION Pos = m_TrunkItemList.GetHeadPosition(); while(Pos != NULL) { pMatch = m_TrunkItemList.GetNext(Pos); pItem = CConfig::trunkItem().getTrunkItem(pMatch->TrunkItemId); ASSERT(pItem != NULL); if(pItem != NULL) { pCallLeg = CMC::GetInstance().allocFreeTrunk(pItem->Node, pItem->Board, pItem->Span); if(pCallLeg != NULL) { if(CallerNum.GetLength() == 0) // 若主叫号码为空,则用缺省主叫号码 CallerNum = pMatch->Caller; CalleeNum = CalleeNum.Mid(m_Prefix.GetLength()); // 修正被叫号码(删除出局字冠) *pTrunkItem = pItem; return pCallLeg; } } } return NULL; } /***************************************************************** **【函数名称】 aidedAlloc **【函数功能】 辅助分配通道不修正被叫号码 **【参数】 **【返回值】 ****************************************************************/ COneLeg* CAidedUnit::aidedAlloc( CString& CallerNum, TRUNK_ITEM** pTrunkItem ) { ASSERT(pTrunkItem != NULL); COneLeg* pCallLeg = NULL; TRUNK_MATCH* pMatch = NULL; TRUNK_ITEM* pItem = NULL; POSITION Pos = m_TrunkItemList.GetHeadPosition(); while(Pos != NULL) { pMatch = m_TrunkItemList.GetNext(Pos); pItem = CConfig::trunkItem().getTrunkItem(pMatch->TrunkItemId); ASSERT(pItem != NULL); if(pItem != NULL) { pCallLeg = CMC::GetInstance().allocFreeTrunk(pItem->Node, pItem->Board, pItem->Span); if(pCallLeg != NULL) { if(CallerNum.GetLength() == 0) // 若主叫号码为空,则用缺省主叫号码 CallerNum = pMatch->Caller; *pTrunkItem = pItem; return pCallLeg; } } } return NULL; }