1
// SettingsDlg.cpp : implementation file
6
#include "SettingsDlg.h"
7
#include <pjsua-lib/pjsua.h>
13
static char THIS_FILE[] = __FILE__;
16
#define REG_PATH _T("pjsip.org\\PocketPC")
17
#define REG_DOMAIN _T("Domain")
18
#define REG_USER _T("User")
19
#define REG_PASSWD _T("Data")
20
#define REG_USE_STUN _T("UseSTUN")
21
#define REG_STUN_SRV _T("STUNSrv")
22
#define REG_DNS _T("DNS")
23
#define REG_USE_ICE _T("UseICE")
24
#define REG_USE_SRTP _T("UseSRTP")
25
#define REG_USE_PUBLISH _T("UsePUBLISH")
26
#define REG_BUDDY_CNT _T("BuddyCnt")
27
#define REG_BUDDY_X _T("Buddy%u")
28
#define REG_ENABLE_EC _T("EnableEC")
29
#define REG_EC_TAIL _T("ECTail")
30
#define REG_ENABLE_VAD _T("EnableVAD")
31
#define REG_ENABLE_TCP _T("EnableTCP")
32
#define REG_CODEC_CNT _T("CodecCnt")
33
#define REG_CODEC_X _T("Codec%u")
34
#define REG_AUTO_ANSWER _T("AutoAnswer")
37
/////////////////////////////////////////////////////////////////////////////
39
CPocketPJSettings::CPocketPJSettings()
40
: m_UseStun(FALSE), m_UseIce(FALSE), m_UseSrtp(FALSE), m_UsePublish(FALSE),
41
m_EchoSuppress(TRUE), m_EcTail(200), m_TCP(FALSE), m_VAD(FALSE),
45
#if defined(PJMEDIA_HAS_GSM_CODEC) && PJMEDIA_HAS_GSM_CODEC
46
m_Codecs.Add(_T("GSM"));
48
#if defined(PJMEDIA_HAS_G711_CODEC) && PJMEDIA_HAS_G711_CODEC
49
m_Codecs.Add(_T("PCMU"));
50
m_Codecs.Add(_T("PCMA"));
52
#if defined(PJMEDIA_HAS_SPEEX_CODEC) && PJMEDIA_HAS_SPEEX_CODEC
53
m_Codecs.Add(_T("Speex"));
58
void CPocketPJSettings::LoadRegistry()
66
if (key.Open(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
69
cbData = sizeof(textVal);
70
if (key.QueryValue(textVal, REG_DOMAIN, &cbData) == ERROR_SUCCESS) {
74
cbData = sizeof(textVal);
75
if (key.QueryValue(textVal, REG_USER, &cbData) == ERROR_SUCCESS) {
79
cbData = sizeof(textVal);
80
if (key.QueryValue(textVal, REG_PASSWD, &cbData) == ERROR_SUCCESS) {
84
cbData = sizeof(textVal);
85
if (key.QueryValue(textVal, REG_STUN_SRV, &cbData) == ERROR_SUCCESS) {
89
cbData = sizeof(textVal);
90
if (key.QueryValue(textVal, REG_DNS, &cbData) == ERROR_SUCCESS) {
95
if (key.QueryValue(dwordVal, REG_USE_STUN) == ERROR_SUCCESS) {
96
m_UseStun = dwordVal != 0;
99
if (key.QueryValue(dwordVal, REG_USE_ICE) == ERROR_SUCCESS) {
100
m_UseIce = dwordVal != 0;
104
if (key.QueryValue(dwordVal, REG_USE_SRTP) == ERROR_SUCCESS) {
105
m_UseSrtp = dwordVal != 0;
109
cbData = sizeof(dwordVal);
110
if (key.QueryValue(dwordVal, REG_USE_PUBLISH) == ERROR_SUCCESS) {
111
m_UsePublish = dwordVal != 0;
114
cbData = sizeof(dwordVal);
115
if (key.QueryValue(dwordVal, REG_ENABLE_EC) == ERROR_SUCCESS) {
116
m_EchoSuppress = dwordVal != 0;
119
cbData = sizeof(dwordVal);
120
if (key.QueryValue(dwordVal, REG_EC_TAIL) == ERROR_SUCCESS) {
124
cbData = sizeof(dwordVal);
125
if (key.QueryValue(dwordVal, REG_ENABLE_TCP) == ERROR_SUCCESS) {
126
m_TCP = dwordVal != 0;
129
cbData = sizeof(dwordVal);
130
if (key.QueryValue(dwordVal, REG_ENABLE_VAD) == ERROR_SUCCESS) {
131
m_VAD = dwordVal != 0;
134
cbData = sizeof(dwordVal);
135
if (key.QueryValue(dwordVal, REG_AUTO_ANSWER) == ERROR_SUCCESS) {
136
m_AutoAnswer = dwordVal != 0;
139
m_BuddyList.RemoveAll();
141
DWORD buddyCount = 0;
142
cbData = sizeof(dwordVal);
143
if (key.QueryValue(dwordVal, REG_BUDDY_CNT) == ERROR_SUCCESS) {
144
buddyCount = dwordVal;
148
for (i=0; i<buddyCount; ++i) {
150
entry.Format(REG_BUDDY_X, i);
152
cbData = sizeof(textVal);
153
if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) {
154
m_BuddyList.Add(textVal);
158
DWORD codecCount = 0;
159
cbData = sizeof(dwordVal);
160
if (key.QueryValue(codecCount, REG_CODEC_CNT) == ERROR_SUCCESS) {
162
m_Codecs.RemoveAll();
164
for (i=0; i<codecCount; ++i) {
166
entry.Format(REG_CODEC_X, i);
168
cbData = sizeof(textVal);
169
if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) {
170
m_Codecs.Add(textVal);
179
void CPocketPJSettings::SaveRegistry()
183
if (key.Create(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
186
key.SetValue(m_Domain, REG_DOMAIN);
187
key.SetValue(m_User, REG_USER);
188
key.SetValue(m_Password, REG_PASSWD);
189
key.SetValue(m_StunSrv, REG_STUN_SRV);
190
key.SetValue(m_DNS, REG_DNS);
192
key.SetValue(m_UseStun, REG_USE_STUN);
193
key.SetValue(m_UseIce, REG_USE_ICE);
194
key.SetValue(m_UseSrtp, REG_USE_SRTP);
195
key.SetValue(m_UsePublish, REG_USE_PUBLISH);
197
key.SetValue(m_EchoSuppress, REG_ENABLE_EC);
198
key.SetValue(m_EcTail, REG_EC_TAIL);
200
key.SetValue(m_TCP, REG_ENABLE_TCP);
201
key.SetValue(m_VAD, REG_ENABLE_VAD);
202
key.SetValue(m_AutoAnswer, REG_AUTO_ANSWER);
204
key.SetValue(m_BuddyList.GetSize(), REG_BUDDY_CNT);
207
for (i=0; i<m_BuddyList.GetSize(); ++i) {
209
entry.Format(REG_BUDDY_X, i);
210
key.SetValue(m_BuddyList.GetAt(i), entry);
213
DWORD N = m_Codecs.GetSize();
214
key.SetValue(N, REG_CODEC_CNT);
215
for (i=0; i<m_Codecs.GetSize(); ++i) {
217
entry.Format(REG_CODEC_X, i);
218
key.SetValue(m_Codecs.GetAt(i), entry);
225
/////////////////////////////////////////////////////////////////////////////
226
// CSettingsDlg dialog
229
CSettingsDlg::CSettingsDlg(CPocketPJSettings &cfg, CWnd* pParent)
230
: CDialog(CSettingsDlg::IDD, pParent), m_Cfg(cfg)
232
//{{AFX_DATA_INIT(CSettingsDlg)
242
m_EchoSuppress = FALSE;
246
m_AutoAnswer = FALSE;
249
m_Domain = m_Cfg.m_Domain;
250
m_ICE = m_Cfg.m_UseIce;
251
m_Passwd = m_Cfg.m_Password;
252
m_PUBLISH = m_Cfg.m_UsePublish;
253
m_SRTP = m_Cfg.m_UseSrtp;
254
m_STUN = m_Cfg.m_UseStun;
255
m_StunSrv = m_Cfg.m_StunSrv;
256
m_User = m_Cfg.m_User;
258
m_EchoSuppress = m_Cfg.m_EchoSuppress;
261
m_AutoAnswer= m_Cfg.m_AutoAnswer;
264
s.Format(_T("%d"), m_Cfg.m_EcTail);
270
void CSettingsDlg::DoDataExchange(CDataExchange* pDX)
272
CDialog::DoDataExchange(pDX);
273
//{{AFX_DATA_MAP(CSettingsDlg)
274
DDX_Control(pDX, IDC_CODECS, m_Codecs);
275
DDX_Text(pDX, IDC_DOMAIN, m_Domain);
276
DDX_Check(pDX, IDC_ICE, m_ICE);
277
DDX_Text(pDX, IDC_PASSWD, m_Passwd);
278
DDX_Check(pDX, IDC_PUBLISH, m_PUBLISH);
279
DDX_Check(pDX, IDC_SRTP, m_SRTP);
280
DDX_Check(pDX, IDC_STUN, m_STUN);
281
DDX_Text(pDX, IDC_STUN_SRV, m_StunSrv);
282
DDX_Text(pDX, IDC_USER, m_User);
283
DDX_Text(pDX, IDC_DNS, m_Dns);
284
DDX_Check(pDX, IDC_ECHO_SUPPRESS, m_EchoSuppress);
285
DDX_Text(pDX, IDC_EC_TAIL, m_EcTail);
286
DDX_Check(pDX, IDC_TCP, m_TCP);
287
DDX_Check(pDX, IDC_VAD, m_VAD);
288
DDX_Check(pDX, IDC_AA, m_AutoAnswer);
292
if (m_Codecs.GetCount() == 0) {
294
for (i=0; i<m_Cfg.m_Codecs.GetSize(); ++i) {
295
m_Codecs.AddString(m_Cfg.m_Codecs.GetAt(i));
297
m_Codecs.SetCurSel(0);
302
BEGIN_MESSAGE_MAP(CSettingsDlg, CDialog)
303
//{{AFX_MSG_MAP(CSettingsDlg)
304
ON_BN_CLICKED(IDC_STUN, OnStun)
305
ON_BN_CLICKED(IDC_ECHO_SUPPRESS, OnEchoSuppress)
306
ON_CBN_SELCHANGE(IDC_CODECS, OnSelchangeCodecs)
310
/////////////////////////////////////////////////////////////////////////////
311
// CSettingsDlg message handlers
313
int CSettingsDlg::DoModal()
315
int rc = CDialog::DoModal();
320
void CSettingsDlg::OnStun()
324
void CSettingsDlg::OnEchoSuppress()
328
void CSettingsDlg::OnSelchangeCodecs()
330
int cur = m_Codecs.GetCurSel();
337
m_Codecs.GetLBText(cur, codec);
338
N = m_Codecs.GetCount();
339
m_Codecs.DeleteString(cur);
340
N = m_Codecs.GetCount();
341
m_Codecs.InsertString(0, codec);
342
N = m_Codecs.GetCount();
343
m_Codecs.SetCurSel(0);
347
void CSettingsDlg::OnOK()
351
m_Cfg.m_Domain = m_Domain;
352
m_Cfg.m_UseIce = m_ICE != 0;
353
m_Cfg.m_Password = m_Passwd;
354
m_Cfg.m_UsePublish = m_PUBLISH != 0;
355
m_Cfg.m_UseSrtp = m_SRTP != 0;
356
m_Cfg.m_UseStun = m_STUN != 0;
357
m_Cfg.m_StunSrv = m_StunSrv;
358
m_Cfg.m_User = m_User;
360
m_Cfg.m_EchoSuppress= m_EchoSuppress != 0;
361
m_Cfg.m_EcTail = _ttoi(m_EcTail);
362
m_Cfg.m_TCP = m_TCP != 0;
363
m_Cfg.m_VAD = m_VAD != 0;
364
m_Cfg.m_AutoAnswer = m_AutoAnswer != 0;
367
m_Cfg.m_Codecs.RemoveAll();
368
DWORD N = m_Codecs.GetCount();
369
for (i=0; i<N; ++i) {
371
m_Codecs.GetLBText(i, codec);
372
m_Cfg.m_Codecs.Add(codec);