diff options
Diffstat (limited to 'pjsip-apps/src/pocketpj/SettingsDlg.cpp')
-rw-r--r-- | pjsip-apps/src/pocketpj/SettingsDlg.cpp | 376 |
1 files changed, 376 insertions, 0 deletions
diff --git a/pjsip-apps/src/pocketpj/SettingsDlg.cpp b/pjsip-apps/src/pocketpj/SettingsDlg.cpp new file mode 100644 index 0000000..1357044 --- /dev/null +++ b/pjsip-apps/src/pocketpj/SettingsDlg.cpp @@ -0,0 +1,376 @@ +// SettingsDlg.cpp : implementation file +// + +#include "stdafx.h" +#include "PocketPJ.h" +#include "SettingsDlg.h" +#include <pjsua-lib/pjsua.h> +#include <atlbase.h> + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +#define REG_PATH _T("pjsip.org\\PocketPC") +#define REG_DOMAIN _T("Domain") +#define REG_USER _T("User") +#define REG_PASSWD _T("Data") +#define REG_USE_STUN _T("UseSTUN") +#define REG_STUN_SRV _T("STUNSrv") +#define REG_DNS _T("DNS") +#define REG_USE_ICE _T("UseICE") +#define REG_USE_SRTP _T("UseSRTP") +#define REG_USE_PUBLISH _T("UsePUBLISH") +#define REG_BUDDY_CNT _T("BuddyCnt") +#define REG_BUDDY_X _T("Buddy%u") +#define REG_ENABLE_EC _T("EnableEC") +#define REG_EC_TAIL _T("ECTail") +#define REG_ENABLE_VAD _T("EnableVAD") +#define REG_ENABLE_TCP _T("EnableTCP") +#define REG_CODEC_CNT _T("CodecCnt") +#define REG_CODEC_X _T("Codec%u") +#define REG_AUTO_ANSWER _T("AutoAnswer") + + +///////////////////////////////////////////////////////////////////////////// +// Settings +CPocketPJSettings::CPocketPJSettings() +: m_UseStun(FALSE), m_UseIce(FALSE), m_UseSrtp(FALSE), m_UsePublish(FALSE), + m_EchoSuppress(TRUE), m_EcTail(200), m_TCP(FALSE), m_VAD(FALSE), + m_AutoAnswer(FALSE) +{ + /* Init codec list */ +#if defined(PJMEDIA_HAS_GSM_CODEC) && PJMEDIA_HAS_GSM_CODEC + m_Codecs.Add(_T("GSM")); +#endif +#if defined(PJMEDIA_HAS_G711_CODEC) && PJMEDIA_HAS_G711_CODEC + m_Codecs.Add(_T("PCMU")); + m_Codecs.Add(_T("PCMA")); +#endif +#if defined(PJMEDIA_HAS_SPEEX_CODEC) && PJMEDIA_HAS_SPEEX_CODEC + m_Codecs.Add(_T("Speex")); +#endif +} + +// Load from registry +void CPocketPJSettings::LoadRegistry() +{ + CRegKey key; + wchar_t textVal[256]; + DWORD dwordVal; + DWORD cbData; + + + if (key.Open(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS) + return; + + cbData = sizeof(textVal); + if (key.QueryValue(textVal, REG_DOMAIN, &cbData) == ERROR_SUCCESS) { + m_Domain = textVal; + } + + cbData = sizeof(textVal); + if (key.QueryValue(textVal, REG_USER, &cbData) == ERROR_SUCCESS) { + m_User = textVal; + } + + cbData = sizeof(textVal); + if (key.QueryValue(textVal, REG_PASSWD, &cbData) == ERROR_SUCCESS) { + m_Password = textVal; + } + + cbData = sizeof(textVal); + if (key.QueryValue(textVal, REG_STUN_SRV, &cbData) == ERROR_SUCCESS) { + m_StunSrv = textVal; + } + + cbData = sizeof(textVal); + if (key.QueryValue(textVal, REG_DNS, &cbData) == ERROR_SUCCESS) { + m_DNS = textVal; + } + + dwordVal = 0; + if (key.QueryValue(dwordVal, REG_USE_STUN) == ERROR_SUCCESS) { + m_UseStun = dwordVal != 0; + } + + if (key.QueryValue(dwordVal, REG_USE_ICE) == ERROR_SUCCESS) { + m_UseIce = dwordVal != 0; + } + + + if (key.QueryValue(dwordVal, REG_USE_SRTP) == ERROR_SUCCESS) { + m_UseSrtp = dwordVal != 0; + } + + + cbData = sizeof(dwordVal); + if (key.QueryValue(dwordVal, REG_USE_PUBLISH) == ERROR_SUCCESS) { + m_UsePublish = dwordVal != 0; + } + + cbData = sizeof(dwordVal); + if (key.QueryValue(dwordVal, REG_ENABLE_EC) == ERROR_SUCCESS) { + m_EchoSuppress = dwordVal != 0; + } + + cbData = sizeof(dwordVal); + if (key.QueryValue(dwordVal, REG_EC_TAIL) == ERROR_SUCCESS) { + m_EcTail = dwordVal; + } + + cbData = sizeof(dwordVal); + if (key.QueryValue(dwordVal, REG_ENABLE_TCP) == ERROR_SUCCESS) { + m_TCP = dwordVal != 0; + } + + cbData = sizeof(dwordVal); + if (key.QueryValue(dwordVal, REG_ENABLE_VAD) == ERROR_SUCCESS) { + m_VAD = dwordVal != 0; + } + + cbData = sizeof(dwordVal); + if (key.QueryValue(dwordVal, REG_AUTO_ANSWER) == ERROR_SUCCESS) { + m_AutoAnswer = dwordVal != 0; + } + + m_BuddyList.RemoveAll(); + + DWORD buddyCount = 0; + cbData = sizeof(dwordVal); + if (key.QueryValue(dwordVal, REG_BUDDY_CNT) == ERROR_SUCCESS) { + buddyCount = dwordVal; + } + + unsigned i; + for (i=0; i<buddyCount; ++i) { + CString entry; + entry.Format(REG_BUDDY_X, i); + + cbData = sizeof(textVal); + if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) { + m_BuddyList.Add(textVal); + } + } + + DWORD codecCount = 0; + cbData = sizeof(dwordVal); + if (key.QueryValue(codecCount, REG_CODEC_CNT) == ERROR_SUCCESS) { + + m_Codecs.RemoveAll(); + + for (i=0; i<codecCount; ++i) { + CString entry; + entry.Format(REG_CODEC_X, i); + + cbData = sizeof(textVal); + if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) { + m_Codecs.Add(textVal); + } + } + } + + key.Close(); +} + +// Save to registry +void CPocketPJSettings::SaveRegistry() +{ + CRegKey key; + + if (key.Create(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS) + return; + + key.SetValue(m_Domain, REG_DOMAIN); + key.SetValue(m_User, REG_USER); + key.SetValue(m_Password, REG_PASSWD); + key.SetValue(m_StunSrv, REG_STUN_SRV); + key.SetValue(m_DNS, REG_DNS); + + key.SetValue(m_UseStun, REG_USE_STUN); + key.SetValue(m_UseIce, REG_USE_ICE); + key.SetValue(m_UseSrtp, REG_USE_SRTP); + key.SetValue(m_UsePublish, REG_USE_PUBLISH); + + key.SetValue(m_EchoSuppress, REG_ENABLE_EC); + key.SetValue(m_EcTail, REG_EC_TAIL); + + key.SetValue(m_TCP, REG_ENABLE_TCP); + key.SetValue(m_VAD, REG_ENABLE_VAD); + key.SetValue(m_AutoAnswer, REG_AUTO_ANSWER); + + key.SetValue(m_BuddyList.GetSize(), REG_BUDDY_CNT); + + int i; + for (i=0; i<m_BuddyList.GetSize(); ++i) { + CString entry; + entry.Format(REG_BUDDY_X, i); + key.SetValue(m_BuddyList.GetAt(i), entry); + } + + DWORD N = m_Codecs.GetSize(); + key.SetValue(N, REG_CODEC_CNT); + for (i=0; i<m_Codecs.GetSize(); ++i) { + CString entry; + entry.Format(REG_CODEC_X, i); + key.SetValue(m_Codecs.GetAt(i), entry); + } + + key.Close(); +} + + +///////////////////////////////////////////////////////////////////////////// +// CSettingsDlg dialog + + +CSettingsDlg::CSettingsDlg(CPocketPJSettings &cfg, CWnd* pParent) + : CDialog(CSettingsDlg::IDD, pParent), m_Cfg(cfg) +{ + //{{AFX_DATA_INIT(CSettingsDlg) + m_Domain = _T(""); + m_ICE = FALSE; + m_Passwd = _T(""); + m_PUBLISH = FALSE; + m_SRTP = FALSE; + m_STUN = FALSE; + m_StunSrv = _T(""); + m_User = _T(""); + m_Dns = _T(""); + m_EchoSuppress = FALSE; + m_EcTail = _T(""); + m_TCP = FALSE; + m_VAD = FALSE; + m_AutoAnswer = FALSE; + //}}AFX_DATA_INIT + + m_Domain = m_Cfg.m_Domain; + m_ICE = m_Cfg.m_UseIce; + m_Passwd = m_Cfg.m_Password; + m_PUBLISH = m_Cfg.m_UsePublish; + m_SRTP = m_Cfg.m_UseSrtp; + m_STUN = m_Cfg.m_UseStun; + m_StunSrv = m_Cfg.m_StunSrv; + m_User = m_Cfg.m_User; + m_Dns = m_Cfg.m_DNS; + m_EchoSuppress = m_Cfg.m_EchoSuppress; + m_TCP = m_Cfg.m_TCP; + m_VAD = m_Cfg.m_VAD; + m_AutoAnswer= m_Cfg.m_AutoAnswer; + + CString s; + s.Format(_T("%d"), m_Cfg.m_EcTail); + m_EcTail = s; + +} + + +void CSettingsDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CSettingsDlg) + DDX_Control(pDX, IDC_CODECS, m_Codecs); + DDX_Text(pDX, IDC_DOMAIN, m_Domain); + DDX_Check(pDX, IDC_ICE, m_ICE); + DDX_Text(pDX, IDC_PASSWD, m_Passwd); + DDX_Check(pDX, IDC_PUBLISH, m_PUBLISH); + DDX_Check(pDX, IDC_SRTP, m_SRTP); + DDX_Check(pDX, IDC_STUN, m_STUN); + DDX_Text(pDX, IDC_STUN_SRV, m_StunSrv); + DDX_Text(pDX, IDC_USER, m_User); + DDX_Text(pDX, IDC_DNS, m_Dns); + DDX_Check(pDX, IDC_ECHO_SUPPRESS, m_EchoSuppress); + DDX_Text(pDX, IDC_EC_TAIL, m_EcTail); + DDX_Check(pDX, IDC_TCP, m_TCP); + DDX_Check(pDX, IDC_VAD, m_VAD); + DDX_Check(pDX, IDC_AA, m_AutoAnswer); + //}}AFX_DATA_MAP + + + if (m_Codecs.GetCount() == 0) { + int i; + for (i=0; i<m_Cfg.m_Codecs.GetSize(); ++i) { + m_Codecs.AddString(m_Cfg.m_Codecs.GetAt(i)); + } + m_Codecs.SetCurSel(0); + } +} + + +BEGIN_MESSAGE_MAP(CSettingsDlg, CDialog) + //{{AFX_MSG_MAP(CSettingsDlg) + ON_BN_CLICKED(IDC_STUN, OnStun) + ON_BN_CLICKED(IDC_ECHO_SUPPRESS, OnEchoSuppress) + ON_CBN_SELCHANGE(IDC_CODECS, OnSelchangeCodecs) + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CSettingsDlg message handlers + +int CSettingsDlg::DoModal() +{ + int rc = CDialog::DoModal(); + + return rc; +} + +void CSettingsDlg::OnStun() +{ +} + +void CSettingsDlg::OnEchoSuppress() +{ +} + +void CSettingsDlg::OnSelchangeCodecs() +{ + int cur = m_Codecs.GetCurSel(); + if (cur < 1) + return; + + CString codec; + DWORD N; + + m_Codecs.GetLBText(cur, codec); + N = m_Codecs.GetCount(); + m_Codecs.DeleteString(cur); + N = m_Codecs.GetCount(); + m_Codecs.InsertString(0, codec); + N = m_Codecs.GetCount(); + m_Codecs.SetCurSel(0); +} + + +void CSettingsDlg::OnOK() +{ + UpdateData(TRUE); + + m_Cfg.m_Domain = m_Domain; + m_Cfg.m_UseIce = m_ICE != 0; + m_Cfg.m_Password = m_Passwd; + m_Cfg.m_UsePublish = m_PUBLISH != 0; + m_Cfg.m_UseSrtp = m_SRTP != 0; + m_Cfg.m_UseStun = m_STUN != 0; + m_Cfg.m_StunSrv = m_StunSrv; + m_Cfg.m_User = m_User; + m_Cfg.m_DNS = m_Dns; + m_Cfg.m_EchoSuppress= m_EchoSuppress != 0; + m_Cfg.m_EcTail = _ttoi(m_EcTail); + m_Cfg.m_TCP = m_TCP != 0; + m_Cfg.m_VAD = m_VAD != 0; + m_Cfg.m_AutoAnswer = m_AutoAnswer != 0; + + unsigned i; + m_Cfg.m_Codecs.RemoveAll(); + DWORD N = m_Codecs.GetCount(); + for (i=0; i<N; ++i) { + CString codec; + m_Codecs.GetLBText(i, codec); + m_Cfg.m_Codecs.Add(codec); + } + + CDialog::OnOK(); +} |