修改三方通话功能,在发起三方通话时,先保持住主叫,然后再拉回主叫到会议

Config.cpp 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #include "StdAfx.h"
  2. #include "Config.h"
  3. #include "DBCtrl.h"
  4. int CConfig::m_ListenPort = SC_LISTEN_PORT;
  5. TTS_TYPE CConfig::m_TtsType = TTS_NONE;
  6. TCHAR CConfig::m_McAddr[IP_PORT_LEN] = _T("127.0.0.1");
  7. int CConfig::m_McPort = 9001;
  8. int CConfig::m_DigitalTrunkCount = 0;
  9. int CConfig::m_VoipTrunkCount = 0;
  10. TCHAR CConfig::m_VoipSignallingAddr[IP_PORT_LEN] = { 0 };
  11. TCHAR CConfig::m_VoipMediaAddr[IP_PORT_LEN] = { 0 };
  12. TCHAR CConfig::m_FaxServerAddr[IP_PORT_LEN] = { 0 };
  13. int CConfig::m_FaxServerPort = 0;
  14. CString CConfig::m_LogFilePath = __T("");
  15. CString CConfig::m_TtsPath = __T("");
  16. CConfig::ExtenMap CConfig::m_MapExten;
  17. CCfgSipAccount CConfig::m_SipAccount;
  18. CCfgTrunkItem CConfig::m_TrunkItem;
  19. CCfgTrunkMatch CConfig::m_TrunkMatch;
  20. CConfig::CConfig(void)
  21. {
  22. }
  23. bool CConfig::load(void)
  24. {
  25. CString DataTemp = _T("");
  26. IOtlConnection* pConn = IOtlConnection::getInstance();
  27. // 打开数据库连接
  28. if(!pConn->Connect())
  29. return false;
  30. if(!m_SipAccount.load())
  31. return false;
  32. if(!m_TrunkItem.load())
  33. return false;
  34. if(!m_TrunkMatch.load())
  35. return false;
  36. m_ListenPort = pConn->GetSingleDataStr2Int(_T("SELECT value FROM conf_dev WHERE Name='ScPort'"));
  37. DataTemp = pConn->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='TtsType'"));
  38. m_TtsType = (TTS_TYPE)atoi(DataTemp);
  39. DataTemp = pConn->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='McAddr'"));
  40. lstrcpy(m_McAddr, DataTemp);
  41. m_McPort = pConn->GetSingleDataStr2Int(_T("SELECT value FROM conf_dev WHERE Name='McPort'"));
  42. m_DigitalTrunkCount = pConn->GetSingleDataStr2Int(_T("SELECT value FROM conf_dev WHERE Name='DigTrunkCount'"));
  43. m_VoipTrunkCount = pConn->GetSingleDataStr2Int(_T("SELECT value FROM conf_dev WHERE Name='VoipTrunkCount'"));
  44. DataTemp = pConn->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='VoipSignallingAddr'"));
  45. lstrcpy(m_VoipSignallingAddr, DataTemp);
  46. DataTemp = pConn->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='VoipMediaAddr'"));
  47. lstrcpy(m_VoipMediaAddr, DataTemp);
  48. DataTemp = pConn->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='FaxServerAddr'"));
  49. lstrcpy(m_FaxServerAddr, DataTemp);
  50. m_FaxServerPort = pConn->GetSingleDataStr2Int(_T("SELECT value FROM conf_dev WHERE Name='FaxServerPort'"));
  51. // 读取日志文件路径
  52. m_LogFilePath = pConn->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE name = 'LogPath'"));
  53. m_TtsPath = pConn->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE name = 'TtsBufferPath'"));
  54. DataTemp.Format(_T("SELECT id, value FROM conf_line WHERE type = %d"), LINE_EXTEN);
  55. IOtlRecordset* pExtens = pConn->QueryRecords(DataTemp);
  56. if (NULL != pExtens)
  57. {
  58. while(!pExtens->IsEOF())
  59. {
  60. pExtens->MoveNextRow();
  61. int ExtenId = pExtens->GetValueIntByIndex(1);
  62. DataTemp = pExtens->GetValueStrByIndex(2);
  63. m_MapExten.SetAt(ExtenId, DataTemp);
  64. } // end while
  65. IOtlRecordset::DestroyInstance(pExtens); // 释放记录集
  66. }
  67. pConn->Disconnect();
  68. return true;
  69. }
  70. bool CConfig::isContainsExten(char* p_tel)
  71. {
  72. if (p_tel == NULL)
  73. return false;
  74. if (strlen(p_tel) == 0)
  75. return false;
  76. char t_tel_buf[32] = { 0 };
  77. getCallNumFromSipAddr(p_tel, t_tel_buf);
  78. UINT t_extenId = atoi(t_tel_buf);
  79. CString t_exten;
  80. CConfig::ExtenMap& t_ExtMap = CConfig::extenMap();
  81. bool t_b_isFound = t_ExtMap.Lookup(t_extenId, t_exten);
  82. if (t_b_isFound)
  83. return true;
  84. return false;
  85. }
  86. void CConfig::getCallNumFromSipAddr(char* p_sip_uri, char* p_tel_buf)
  87. {
  88. if (p_sip_uri == NULL)
  89. return;
  90. if (p_tel_buf == NULL)
  91. return;
  92. char* t_p_pos;
  93. char t_szTmpAddr[200];
  94. lstrcpy(t_szTmpAddr, p_sip_uri);
  95. TCHAR *p = strstr(t_szTmpAddr, _T("@"));
  96. if (p != NULL)
  97. *p = 0;
  98. p = strstr(t_szTmpAddr, _T(":"));
  99. if (p == NULL)
  100. t_p_pos = t_szTmpAddr;
  101. else
  102. t_p_pos = p + 1;
  103. strncpy(p_tel_buf, t_p_pos, sizeof(p_tel_buf) - 1);
  104. return;
  105. }