#include "StdAfx.h" #include "ConfigLoader.h" #include "Config.h" #include "DialogProgress.h" SINGLETON_IMPLEMENT(CConfigLoader) CConfigLoader::CConfigLoader(void) { } CConfigLoader::~CConfigLoader(void) { } /***************************************************************** **【函数名称】 __loadIpoExtCfg **【函数功能】 加载IPO分机线路配置项 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::__loadIpoLineCfg( void ) { CString SQL; IOtlConnection* pOtl = IOtlConnection::getInstance(); CConfig& Config = CConfig::GetInstance(); SQL.Format(_T("SELECT name, value, value2 FROM conf_vs")); IOtlRecordset* pLineSet = pOtl->QueryRecords(SQL); if (NULL == pLineSet) return false; CString LineNo; CString LineType; CString AssoVsLineNO; while(!pLineSet->IsEOF()) { IpoLine* pLine = new IpoLine; ASSERT(pLine != NULL); pLineSet->MoveNextRow(); pLine->LineType = pLineSet->GetValueStrByIndex(1); pLine->LineNO = pLineSet->GetValueStrByIndex(2); pLine->AssoVsLineNO = pLineSet->GetValueStrByIndex(3); Config.m_IpoLineList.AddTail(pLine); } // end while IOtlRecordset::DestroyInstance(pLineSet); // 释放记录集 return true; } /***************************************************************** **【函数名称】 __loadExtenCfg **【函数功能】 加载线路配置项 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::__loadExtenCfg( void ) { CString DataTemp; IOtlConnection* pOtl = IOtlConnection::getInstance(); CConfig& Config = CConfig::GetInstance(); DataTemp.Format(_T("SELECT id, value FROM conf_line WHERE type = %d ORDER BY id ASC"), LINE_EXTEN); IOtlRecordset* pExtens = pOtl->QueryRecords(DataTemp); if (NULL == pExtens) return false; while(!pExtens->IsEOF()) { pExtens->MoveNextRow(); int ExtenId = pExtens->GetValueIntByIndex(1); DataTemp = pExtens->GetValueStrByIndex(2); Config.m_MapExten.SetAt(ExtenId, DataTemp); } // end while IOtlRecordset::DestroyInstance(pExtens); // 释放记录集 return true; } /***************************************************************** **【函数名称】 __loadSipAccountCfg **【函数功能】 加载sip账号配置项 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::__loadSipAccountCfg( void ) { long Count=IOtlConnection::getInstance()->GetSingleDataInt(_T("select count(*) from information_schema.columns where table_name = 'conf_sip_account' and column_name = 'IsDynamicGw'")); IOtlRecordset* pAccountRcd = NULL; BOOL bAddOk = FALSE; if (Count == 1) { pAccountRcd = IOtlConnection::getInstance()->QueryRecords(_T("SELECT id, account, auth_account, password, proxy_addr, proxy_port, reg, reg_interval, IsDynamicGw FROM conf_sip_account ORDER BY id ASC")); } else if (Count == 0) { bAddOk = IOtlConnection::getInstance()->ExecCommand(_T("ALTER TABLE conf_sip_account ADD IsDynamicGw VARCHAR (10) NOT NULL DEFAULT 'false'")); if (bAddOk == TRUE) { pAccountRcd = IOtlConnection::getInstance()->QueryRecords(_T("SELECT id, account, auth_account, password, proxy_addr, proxy_port, reg, reg_interval, IsDynamicGw FROM conf_sip_account ORDER BY id ASC")); } else { pAccountRcd = IOtlConnection::getInstance()->QueryRecords(_T("SELECT id, account, auth_account, password, proxy_addr, proxy_port, reg, reg_interval FROM conf_sip_account ORDER BY id ASC")); } } if (NULL == pAccountRcd) return false; CConfig& Config = CConfig::GetInstance(); while(!pAccountRcd->IsEOF()) { SIP_ACCOUNT* pSipAccount = new SIP_ACCOUNT; ASSERT(pSipAccount != NULL); ZeroMemory(pSipAccount, sizeof(SIP_ACCOUNT)); pAccountRcd->MoveNextRow(); pSipAccount->Id = pAccountRcd->GetValueIntByIndex(1); lstrcpy(pSipAccount->Account, pAccountRcd->GetValueStrByIndex(2)); lstrcpy(pSipAccount->AuthAccount, pAccountRcd->GetValueStrByIndex(3)); lstrcpy(pSipAccount->Password, pAccountRcd->GetValueStrByIndex(4)); lstrcpy(pSipAccount->Proxy, pAccountRcd->GetValueStrByIndex(5)); pSipAccount->ProxyPort = pAccountRcd->GetValueIntByIndex(6); if(lstrcmp(CONST_DEF_SIP_REG_TRUE, pAccountRcd->GetValueStrByIndex(7)) == 0) pSipAccount->IsReg = true; else pSipAccount->IsReg = false; pSipAccount->RegInterval = pAccountRcd->GetValueIntByIndex(8); if (Count == 1 || bAddOk == TRUE) { if (lstrcmp(_T("true"), pAccountRcd->GetValueStrByIndex(9)) == 0) pSipAccount->IsDynamicGw = true; else pSipAccount->IsDynamicGw = false; } else { pSipAccount->IsDynamicGw = false; } Config.m_SipAccount.AddTail(pSipAccount); } // end while IOtlRecordset::DestroyInstance(pAccountRcd); // 释放记录集 return true; } /***************************************************************** **【函数名称】 __loadTrunkItemCfg **【函数功能】 加载中继配置项 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::__loadTrunkItemCfg( void ) { IOtlRecordset* pTrunkRcd = IOtlConnection::getInstance()->QueryRecords(_T("SELECT id, node, board, span, sip_user FROM conf_trunk_item ORDER BY id ASC")); if (NULL == pTrunkRcd) return false; CConfig& Config = CConfig::GetInstance(); while(!pTrunkRcd->IsEOF()) { TRUNK_ITEM* pTrunk = new TRUNK_ITEM; ASSERT(pTrunk != NULL); ZeroMemory(pTrunk, sizeof(TRUNK_ITEM)); pTrunkRcd->MoveNextRow(); pTrunk->Id = pTrunkRcd->GetValueIntByIndex(1); pTrunk->Node = pTrunkRcd->GetValueIntByIndex(2); pTrunk->Board = pTrunkRcd->GetValueIntByIndex(3); pTrunk->Span = pTrunkRcd->GetValueIntByIndex(4); pTrunk->SipAccountId = pTrunkRcd->GetValueIntByIndex(5); Config.m_TrunkItem.AddTail(pTrunk); } // end while IOtlRecordset::DestroyInstance(pTrunkRcd); // 释放记录集 return true; } /***************************************************************** **【函数名称】 __loadTrunkMatchCfg **【函数功能】 加载中继匹配配置项 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::__loadTrunkMatchCfg( void ) { IOtlRecordset* pMatchRcd = IOtlConnection::getInstance()->QueryRecords(_T("SELECT id, prefix, caller, trunk_id, priority FROM conf_trunk_match ORDER BY id ASC")); if (NULL == pMatchRcd) return false; CConfig& Config = CConfig::GetInstance(); while(!pMatchRcd->IsEOF()) { TRUNK_MATCH* pMatch = new TRUNK_MATCH; ASSERT(pMatch != NULL); ZeroMemory(pMatch, sizeof(TRUNK_MATCH)); pMatchRcd->MoveNextRow(); pMatch->Id = pMatchRcd->GetValueIntByIndex(1); lstrcpy(pMatch->Prefix, pMatchRcd->GetValueStrByIndex(2)); lstrcpy(pMatch->Caller, pMatchRcd->GetValueStrByIndex(3)); pMatch->TrunkItemId = pMatchRcd->GetValueIntByIndex(4); pMatch->Priority = pMatchRcd->GetValueIntByIndex(5); Config.m_TrunkMatch.AddTail(pMatch); } // end while IOtlRecordset::DestroyInstance(pMatchRcd); // 释放记录集 return true; } /***************************************************************** **【函数名称】 createTableConfig **【函数功能】 创建配置表 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::createTableConfig( DB_TYPE DbTp ) { return m_DbSetter.createTableConfig(DbTp); } /***************************************************************** **【函数名称】 createTableStatistics **【函数功能】 创建统计表 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::createTableStatistics( DB_TYPE DbTp ) { if(!m_DbSetter.createTableStatistics(DbTp)) return false; return m_DbSetter.addStoredProcedure(DbTp); } /***************************************************************** **【函数名称】 load **【函数功能】 加载配置项 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::load( void ) { IOtlConnection* pOtl = IOtlConnection::getInstance(); CConfig& Config = CConfig::GetInstance(); CString DataTemp = _T(""); CDialogProgress Dlg; Dlg.Create(CDialogProgress::IDD); Dlg.ShowWindow(SW_SHOW); Dlg.setProgressRange(7); Dlg.setHint(_T("配置参数加载中...")); #pragma region 中间件配置 // CTI配置 Config.m_CtiIp = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='CtiAddr'")); Config.m_CtiPort = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='CtiPort'")); Config.m_RecPath = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='RecPath'")); DataTemp = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='RecType'")); Config.m_RecType = (RecordType)atoi(DataTemp); DataTemp = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='DevType'")); Config.m_DevType = (DEV_TYPE)atoi(DataTemp); Dlg.setProgressPos(1); // ACD配置 Config.m_AcdPort = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='AcdPort'")); Config.m_AgentLockedPeriod = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='AgentLockedPeriod'")); Config.m_PPTime = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='PPTime'")); DataTemp = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='PPType'")); Config.m_PPTriggeredType = (PPTriggeredType)atoi(DataTemp); DataTemp = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='QueueType'")); Config.m_QueueType = (QUEUE_TYPE)atoi(DataTemp); Dlg.setProgressPos(2); // IVR配置 Config.m_LeaveWordPath = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='LeaveWordPath'")); Config.m_IvrFlowCount = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='IvrFlowCount'")); IOtlRecordset* pRD = pOtl->QueryRecords(_T("SELECT * FROM conf_ivr_flow")); if (NULL != pRD) { while(!pRD->IsEOF()) { pRD->MoveNextRow(); DataTemp = pRD->GetValueStr(_T("FilePath")); Config.m_FLowList.AddTail(DataTemp); } IOtlRecordset::DestroyInstance(pRD); // 释放记录集 } Dlg.setProgressPos(3); // 其它配置 Config.m_LogFilePath = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='LogPath'")); Config.m_MaxConcurrency = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='CallConcurrency'")); Config.m_TtsBufferPath = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='TtsBufferPath'")); DataTemp = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_system WHERE Name='TtsType'")); Config.m_TtsType = (TTS_TYPE)atoi(DataTemp); Dlg.setProgressPos(4); #pragma endregion #pragma region 设备配置 // 毅航配置 Config.m_ScAddr = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='ScAddr'")); Config.m_ScPort = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='ScPort'")); Config.m_McAddr = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='McAddr'")); Config.m_McPort = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='McPort'")); Config.m_DigitalTrunkCount = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='DigTrunkCount'")); Config.m_VoipTrunkCount = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='VoipTrunkCount'")); Config.m_VoipSignallingAddr = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='VoipSignallingAddr'")); Config.m_VoipMediaAddr = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='VoipMediaAddr'")); Config.m_FaxServerAddr = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='FaxServerAddr'")); Config.m_FaxServerPort = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='FaxServerPort'")); Dlg.setProgressPos(5); // IPO配置 Config.m_IpoAddr = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='DevLinkIp'")); Config.m_IpoPwd = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='DevLinkPwd'")); Config.m_IpoLinkPort = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE Name='IpoLinkPort'")); if(!__loadIpoLineCfg()) { Dlg.setHint(_T("IPO线路配置信息读取失败!")); Sleep(1500); return false; } // FS配置 Config.m_EslAddr = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE name = 'FsEslAddr'")); Config.m_EslPort = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE name = 'FsEslPort'")); Config.m_EslPwd = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE name = 'FsEslPwd'")); Config.m_FsIvrPort = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE name = 'FsIvrPort'")); Config.m_FsTrunkCount = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE name = 'FsTrunkCount'")); Config.m_FsContextExt = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE name = 'FsExtContext'")); Config.m_FsContextMeeting = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE name = 'FsMeetingContext'")); Config.m_FsContextPCall = pOtl->GetSingleDataStr(_T("SELECT value FROM conf_dev WHERE name = 'FsPCallContext'")); Dlg.setProgressPos(6); #pragma endregion #pragma region 线路配置 if(!__loadExtenCfg()) { Dlg.setHint(_T("分机配置信息读取失败!")); Sleep(1500); return false; } if(!__loadSipAccountCfg()) { Dlg.setHint(_T("SIP账户配置信息读取失败!")); Sleep(1500); return false; } if(!__loadTrunkItemCfg()) { Dlg.setHint(_T("中继项配置信息读取失败!")); Sleep(1500); return false; } if(!__loadTrunkMatchCfg()) { Dlg.setHint(_T("中继匹配配置信息读取失败!")); Sleep(1500); return false; } Dlg.setProgressPos(7); #pragma endregion return true; } /***************************************************************** **【函数名称】 saveMidWareConfig **【函数功能】 保存中间件配置项 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::saveMidWareConfig( void ) { IOtlConnection* pOtl = IOtlConnection::getInstance(); CConfig& Config = CConfig::GetInstance(); CString strSQL = _T(""); if (!pOtl->ExecCommand(_T("TRUNCATE TABLE conf_system"))) return false; // CTI配置 strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('CtiAddr', '%s')", Config.m_CtiIp); if(!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('CtiPort', '%s')", Config.m_CtiPort); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('RecPath', '%s')", Config.m_RecPath); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('RecType', '%d')", Config.m_RecType); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('DevType', '%d')", Config.m_DevType); if (!pOtl->InsertConstant(strSQL)) return false; // ACD配置 strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('AcdPort', '%s')", Config.m_AcdPort); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('AgentLockedPeriod', '%s')", Config.m_AgentLockedPeriod); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('PPTime', '%s')", Config.m_PPTime); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('PPType', '%d')", Config.m_PPTriggeredType); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('QueueType', '%d')", Config.m_QueueType); if (!pOtl->InsertConstant(strSQL)) return false; // IVR配置 strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('LeaveWordPath', '%s')", Config.m_LeaveWordPath); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('IvrFlowCount', '%s')", Config.m_IvrFlowCount); if (!pOtl->InsertConstant(strSQL)) return false; if (!pOtl->ExecCommand(_T("TRUNCATE TABLE conf_ivr_flow"))) return false; POSITION pos = Config.m_FLowList.GetHeadPosition(); while(pos != NULL) { CString IvrFlowPath = Config.m_FLowList.GetNext(pos); strSQL.Format("INSERT INTO conf_ivr_flow (FilePath) VALUES ('%s')", IvrFlowPath); if (!pOtl->InsertConstant(strSQL)) return false; } // 其它配置 strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('LogPath', '%s')", Config.m_LogFilePath); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('CallConcurrency', '%s')", Config.m_MaxConcurrency); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('TtsBufferPath', '%s')", Config.m_TtsBufferPath); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_system (Name, Value) VALUES ('TtsType', '%d')", Config.m_TtsType); if (!pOtl->InsertConstant(strSQL)) return false; return true; } /***************************************************************** **【函数名称】 saveDevConfig **【函数功能】 保存设备配置项 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::saveDevConfig( void ) { IOtlConnection* pOtl = IOtlConnection::getInstance(); CConfig& Config = CConfig::GetInstance(); CString strSQL = _T(""); if (!pOtl->ExecCommand(_T("TRUNCATE TABLE conf_dev"))) return false; #pragma region 毅航配置 strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('ScAddr', '%s')", Config.m_ScAddr); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('ScPort', '%s')", Config.m_ScPort); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('McAddr', '%s')", Config.m_McAddr); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('McPort', '%s')", Config.m_McPort); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('DigTrunkCount', '%s')", Config.m_DigitalTrunkCount); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('VoipTrunkCount', '%s')", Config.m_VoipTrunkCount); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('VoipSignallingAddr', '%s')", Config.m_VoipSignallingAddr); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('VoipMediaAddr', '%s')", Config.m_VoipMediaAddr); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FaxServerAddr', '%s')", Config.m_FaxServerAddr); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FaxServerPort', '%s')", Config.m_FaxServerPort); if (!pOtl->InsertConstant(strSQL)) return false; #pragma endregion #pragma region IPO配置 strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('DevLinkIp', '%s')", Config.m_IpoAddr); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('DevLinkPwd', '%s')", Config.m_IpoPwd); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('IpoLinkPort', '%s')", Config.m_IpoLinkPort); if (!pOtl->InsertConstant(strSQL)) return false; if (!pOtl->ExecCommand(_T("TRUNCATE TABLE conf_vs"))) return false; // IPO线路 POSITION Pos = Config.m_IpoLineList.GetHeadPosition(); while(Pos != NULL) { IpoLine* pLine = Config.m_IpoLineList.GetNext(Pos); strSQL.Format(_T("INSERT INTO conf_vs (name, Value, value2) VALUES ('%s', '%s', '%s')"), pLine->LineType, pLine->LineNO, pLine->AssoVsLineNO); if (!pOtl->InsertConstant(strSQL)) return false; } #pragma endregion #pragma region FS配置 strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FsEslAddr', '%s')", Config.m_EslAddr); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FsEslPort', '%s')", Config.m_EslPort); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FsEslPwd', '%s')", Config.m_EslPwd); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FsIvrPort', '%s')", Config.m_FsIvrPort); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FsTrunkCount', '%s')", Config.m_FsTrunkCount); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FsExtContext', '%s')", Config.m_FsContextExt); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FsMeetingContext', '%s')", Config.m_FsContextMeeting); if (!pOtl->InsertConstant(strSQL)) return false; strSQL.Format("INSERT INTO conf_dev (Name, Value) VALUES ('FsPCallContext', '%s')", Config.m_FsContextPCall); if (!pOtl->InsertConstant(strSQL)) return false; #pragma endregion return true; } /***************************************************************** **【函数名称】 saveLineTrunkConfig **【函数功能】 保存线路中继配置项 **【参数】 **【返回值】 ****************************************************************/ bool CConfigLoader::saveLineTrunkConfig( void ) { IOtlConnection* pOtl = IOtlConnection::getInstance(); CConfig& Config = CConfig::GetInstance(); CString strSQL = _T(""); #pragma region 分机信息保存 if (!pOtl->ExecCommand(_T("TRUNCATE TABLE conf_line"))) return false; ExtenMap::CPair* pPair = Config.m_MapExten.PGetFirstAssoc(); while(pPair != NULL) { strSQL.Format(_T("INSERT INTO conf_line (id, type, Value) VALUES (%u, %d, '%s')"), pPair->key, LINE_EXTEN, pPair->value); if (!pOtl->InsertConstant(strSQL)) return false; pPair = Config.m_MapExten.PGetNextAssoc(pPair); } #pragma endregion #pragma region SIP账号信息保存 if (!pOtl->ExecCommand(_T("TRUNCATE TABLE conf_sip_account"))) return false; POSITION Pos = Config.m_SipAccount.GetHeadPosition(); while(Pos != NULL) { SIP_ACCOUNT* pAccount = Config.m_SipAccount.GetNext(Pos); strSQL.Format(_T("INSERT INTO conf_sip_account (id, account, auth_account, password, proxy_addr, proxy_port, reg, reg_interval, IsDynamicGw) VALUES (%d, '%s', '%s', '%s', '%s', %d, '%s', %d, '%s')"), pAccount->Id, pAccount->Account, pAccount->AuthAccount, pAccount->Password, pAccount->Proxy, pAccount->ProxyPort, pAccount->IsReg ? CONST_DEF_SIP_REG_TRUE : CONST_DEF_SIP_REG_FALSE, pAccount->RegInterval, pAccount->IsDynamicGw ? _T("true") : _T("false")); if (!pOtl->InsertConstant(strSQL)) return false; } #pragma endregion #pragma region 中继项信息保存 if (!pOtl->ExecCommand(_T("TRUNCATE TABLE conf_trunk_item"))) return false; Pos = Config.m_TrunkItem.GetHeadPosition(); while(Pos != NULL) { TRUNK_ITEM* pTrunk = Config.m_TrunkItem.GetNext(Pos); strSQL.Format(_T("INSERT INTO conf_trunk_item (id, node, board, span, sip_user) VALUES (%d, %d, %d, %d, %d)"), pTrunk->Id, pTrunk->Node, pTrunk->Board, pTrunk->Span, pTrunk->SipAccountId); if (!pOtl->InsertConstant(strSQL)) return false; } #pragma endregion #pragma region 中继匹配信息保存 if (!pOtl->ExecCommand(_T("TRUNCATE TABLE conf_trunk_match"))) return false; Pos = Config.m_TrunkMatch.GetHeadPosition(); while(Pos != NULL) { TRUNK_MATCH* pMatch = Config.m_TrunkMatch.GetNext(Pos); strSQL.Format(_T("INSERT INTO conf_trunk_match (prefix, caller, trunk_id, priority) VALUES ('%s', '%s', %d, %d)"), pMatch->Prefix, pMatch->Caller, pMatch->TrunkItemId, pMatch->Priority); if (!pOtl->InsertConstant(strSQL)) return false; } #pragma endregion return true; } /***************************************************************** **【函数名称】 getLastError **【函数功能】 返回数据存取最后错误内容 **【参数】 **【返回值】 ****************************************************************/ LPCTSTR CConfigLoader::getLastError( void ) { return IOtlConnection::getInstance()->GetLastError(); }