| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #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;
- }
|