中间件标准版5.1git,去除基础模块

CallStringMaker.cpp 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include "StdAfx.h"
  2. #include "CallStringMaker.h"
  3. #include "Config.h"
  4. CCallStringMaker::CCallStringMaker(void)
  5. {
  6. }
  7. CCallStringMaker::~CCallStringMaker(void)
  8. {
  9. }
  10. /*****************************************************************
  11. **【函数名称】 __match
  12. **【函数功能】 匹配呼叫字冠
  13. **【参数】
  14. **【返回值】
  15. ****************************************************************/
  16. bool CCallStringMaker::__match( const CString& CalleeNum, TRUNK_MATCH* pTrunkMatch )
  17. {
  18. if(lstrcmp(pTrunkMatch->Prefix, CalleeNum.Left(lstrlen(pTrunkMatch->Prefix))) == 0)
  19. return true;
  20. else
  21. return false;
  22. }
  23. /*****************************************************************
  24. **【函数名称】 __make
  25. **【函数功能】 为中继呼叫生成字符串
  26. **【参数】
  27. **【返回值】
  28. ****************************************************************/
  29. bool CCallStringMaker::__make( CString& CallerNum, CString& CalleeNum, CString& CallString, TRUNK_MATCH* pTrunkMatch )
  30. {
  31. SIP_ACCOUNT* pAccount = CConfig::sipAccount().getAccount(pTrunkMatch->TrunkItemId);
  32. //ASSERT(pAccount != NULL);
  33. if(pAccount == NULL)
  34. {
  35. LOGGER(LOG_LEVEL_WARNING, _T("{CallStringMaker}: 生成呼叫字符串时获取网关账户信息失败, AccountId = %d"), pTrunkMatch->TrunkItemId);
  36. return false;
  37. }
  38. if(CallerNum.GetLength() == 0) // 若主叫号码为空,则用缺省主叫号码
  39. CallerNum = pTrunkMatch->Caller;
  40. CalleeNum = CalleeNum.Mid(lstrlen(pTrunkMatch->Prefix)); // 修正被叫号码(删除出局字冠)
  41. CallString.Format(_T("sofia/gateway/%s/%s"), pAccount->Account, CalleeNum);
  42. return true;
  43. }
  44. /*****************************************************************
  45. **【函数名称】 __make
  46. **【函数功能】 为分机呼叫生成字符串
  47. **【参数】
  48. **【返回值】
  49. ****************************************************************/
  50. bool CCallStringMaker::__make( CString& CalleeNum, CString& CallString )
  51. {
  52. CallString.Format(_T("user/%s"), CalleeNum);
  53. return true;
  54. }
  55. /*****************************************************************
  56. **【函数名称】 makeCallString
  57. **【函数功能】 生成呼叫字符串
  58. **【参数】
  59. **【返回值】
  60. ****************************************************************/
  61. bool CCallStringMaker::makeCallString( CString& CallerNum, CString& CalleeNum, CString& CallString )
  62. {
  63. CCfgTrunkMatch& Match = CConfig::trunkMatch();
  64. POSITION Pos = Match.GetHeadPosition();
  65. while(Pos != NULL)
  66. {
  67. TRUNK_MATCH* pMatch = Match.GetNext(Pos);
  68. ASSERT(pMatch != NULL);
  69. if(__match(CalleeNum, pMatch))
  70. return __make(CallerNum, CalleeNum, CallString, pMatch);
  71. }
  72. return __make(CalleeNum, CallString);
  73. }
  74. /*****************************************************************
  75. **【函数名称】 makeCallStringWithDefault
  76. **【函数功能】 生成呼叫字符串若失败则用缺省网关账户
  77. **【参数】
  78. **【返回值】
  79. ****************************************************************/
  80. bool CCallStringMaker::makeCallStringWithDefault( CString& CallerNum, CString& CalleeNum, CString& CallString )
  81. {
  82. CCfgTrunkMatch& Match = CConfig::trunkMatch();
  83. TRUNK_MATCH* pMatchDefault = Match.GetHead();
  84. POSITION Pos = Match.GetHeadPosition();
  85. while(Pos != NULL)
  86. {
  87. TRUNK_MATCH* pMatch = Match.GetNext(Pos);
  88. ASSERT(pMatch != NULL);
  89. if(pMatch->Priority > pMatchDefault->Priority)
  90. pMatchDefault = pMatch;
  91. if(__match(CalleeNum, pMatch))
  92. return __make(CallerNum, CalleeNum, CallString, pMatch);
  93. }
  94. return __make(CallerNum, CalleeNum, CallString, pMatchDefault);
  95. }