// GridSipAccount.cpp : 实现文件 // #include "stdafx.h" #include "FirstStep.h" #include "GridSipAccount.h" #include "SipAccount.h" #include "Config.h" // CGridSipAccount IMPLEMENT_DYNAMIC(CGridSipAccount, CMFCPropertyGridCtrl) CGridSipAccount::CGridSipAccount() { } CGridSipAccount::~CGridSipAccount() { } /***************************************************************** **【函数名称】 __locate **【函数功能】 定位sip账户 **【参数】 **【返回值】 ****************************************************************/ CMFCPropertyGridProperty* CGridSipAccount::__locate( UINT SipAccountId ) { int Count = GetPropertyCount(); CMFCPropertyGridProperty* pSipAccount = NULL; for(int i = 0; i < Count; ++i) { pSipAccount = GetProperty(i); ASSERT(pSipAccount != NULL); if(pSipAccount->GetData() == SipAccountId) return pSipAccount; } return NULL; } /***************************************************************** **【函数名称】 __add **【函数功能】 添加指定sip账户 **【参数】 **【返回值】 ****************************************************************/ void CGridSipAccount::__add( SIP_ACCOUNT* pAccount ) { CString Data; Data.Format(_T("SIP账户%d"), pAccount->Id); CMFCPropertyGridProperty* pAccountUI = new CMFCPropertyGridProperty(Data, pAccount->Id); pAccountUI->AddSubItem(new CMFCPropertyGridProperty(_T("账户"), pAccount->Account, NULL, pAccount->Id)); pAccountUI->AddSubItem(new CMFCPropertyGridProperty(_T("鉴权账户"), pAccount->AuthAccount, NULL, pAccount->Id)); pAccountUI->AddSubItem(new CMFCPropertyGridProperty(_T("密码"), pAccount->Password, NULL, pAccount->Id)); pAccountUI->AddSubItem(new CMFCPropertyGridProperty(_T("注册地址"), pAccount->Proxy, NULL, pAccount->Id)); Data.Format(_T("%d"), pAccount->ProxyPort); pAccountUI->AddSubItem(new CMFCPropertyGridProperty(_T("注册端口"), Data, NULL, pAccount->Id)); if(pAccount->IsReg) Data.Format(CONST_DEF_SIP_REG_TRUE); else Data.Format(CONST_DEF_SIP_REG_FALSE); CMFCPropertyGridProperty* pIsReg = new CMFCPropertyGridProperty(_T("是否注册"), Data, NULL, pAccount->Id); pIsReg->AddOption(CONST_DEF_SIP_REG_TRUE); pIsReg->AddOption(CONST_DEF_SIP_REG_FALSE); pIsReg->AllowEdit(FALSE); pAccountUI->AddSubItem(pIsReg); Data.Format(_T("%d"), pAccount->RegInterval); pAccountUI->AddSubItem(new CMFCPropertyGridProperty(_T("注册间隔"), Data, NULL, pAccount->Id)); AddProperty(pAccountUI); } /***************************************************************** **【函数名称】 init **【函数功能】 初始化 **【参数】 **【返回值】 ****************************************************************/ void CGridSipAccount::init( void ) { EnableHeaderCtrl(FALSE); SetVSDotNetLook(); CRect rect; GetClientRect(rect); HDITEM item; item.cxy = rect.Width() / 4; item.mask = HDI_WIDTH; GetHeaderCtrl().SetItem(0, &item); CSipAccount& Account = CConfig::GetInstance().sipAccount(); POSITION Pos = Account.GetHeadPosition(); while(Pos != NULL) { SIP_ACCOUNT* pAccount = Account.GetNext(Pos); ASSERT(pAccount != NULL); __add(pAccount); } } /***************************************************************** **【函数名称】 addAccount **【函数功能】 添加sip账户 **【参数】 **【返回值】 ****************************************************************/ bool CGridSipAccount::addAccount( UINT SipAccountId ) { if(__locate(SipAccountId) != NULL) return false; SIP_ACCOUNT Account = { 0 }; Account.Id = SipAccountId; Account.IsReg = true; Account.ProxyPort = 5060; Account.RegInterval = 1800; CString Name; __add(&Account); return true; } /***************************************************************** **【函数名称】 delAccount **【函数功能】 删除sip账户 **【参数】 **【返回值】 ****************************************************************/ void CGridSipAccount::delAccount( UINT SipAccountId ) { CMFCPropertyGridProperty* pAccount = __locate(SipAccountId); if(pAccount != NULL) DeleteProperty(pAccount); } /***************************************************************** **【函数名称】 upload **【函数功能】 上传账户信息 **【参数】 **【返回值】 ****************************************************************/ void CGridSipAccount::upload(bool bDynamicGw) { CSipAccount& AccountCfg = CConfig::GetInstance().sipAccount(); AccountCfg.Free(); SIP_ACCOUNT* pAccount = NULL; CString Value; CMFCPropertyGridProperty* pAccountOnUI = NULL; for (int i = 0; i < GetPropertyCount(); ++i) { pAccountOnUI = GetProperty(i); ASSERT(pAccountOnUI != NULL); pAccount = new SIP_ACCOUNT; ZeroMemory(pAccount, sizeof(SIP_ACCOUNT)); pAccount->Id = pAccountOnUI->GetData(); Value = pAccountOnUI->GetSubItem(ACCOUNT_SUBITEM_ACCOUNT)->GetValue(); lstrcpy(pAccount->Account, Value); Value = pAccountOnUI->GetSubItem(ACCOUNT_SUBITEM_AUTH_ACCOUNT)->GetValue(); lstrcpy(pAccount->AuthAccount, Value); Value = pAccountOnUI->GetSubItem(ACCOUNT_SUBITEM_PASSWORD)->GetValue(); lstrcpy(pAccount->Password, Value); Value = pAccountOnUI->GetSubItem(ACCOUNT_SUBITEM_PROXY_ADDR)->GetValue(); lstrcpy(pAccount->Proxy, Value); Value = pAccountOnUI->GetSubItem(ACCOUNT_SUBITEM_PROXY_PORT)->GetValue(); sscanf_s(Value, "%d", &pAccount->ProxyPort); Value = pAccountOnUI->GetSubItem(ACCOUNT_SUBITEM_IS_REG)->GetValue(); if(Value == CONST_DEF_SIP_REG_TRUE) pAccount->IsReg = true; else pAccount->IsReg = false; Value = pAccountOnUI->GetSubItem(ACCOUNT_SUBITEM_REG_INTERVAL)->GetValue(); sscanf_s(Value, "%d", &pAccount->RegInterval); pAccount->IsDynamicGw = bDynamicGw; // ych AccountCfg.AddTail(pAccount); } } BEGIN_MESSAGE_MAP(CGridSipAccount, CMFCPropertyGridCtrl) END_MESSAGE_MAP() // CGridSipAccount 消息处理程序