blob: 1357044ae2c4675b973a6de003ba6a4a8476b784 [file] [log] [blame]
Benny Prijono5d9c16f2008-02-22 23:38:47 +00001// SettingsDlg.cpp : implementation file
2//
3
4#include "stdafx.h"
5#include "PocketPJ.h"
6#include "SettingsDlg.h"
Benny Prijono36e76ef2008-08-13 13:56:24 +00007#include <pjsua-lib/pjsua.h>
Benny Prijono5d9c16f2008-02-22 23:38:47 +00008#include <atlbase.h>
9
10#ifdef _DEBUG
11#define new DEBUG_NEW
12#undef THIS_FILE
13static char THIS_FILE[] = __FILE__;
14#endif
15
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")
Benny Prijono4d3eed12008-03-11 13:18:48 +000028#define REG_ENABLE_EC _T("EnableEC")
29#define REG_EC_TAIL _T("ECTail")
Benny Prijono36e76ef2008-08-13 13:56:24 +000030#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")
Benny Prijono5d9c16f2008-02-22 23:38:47 +000035
36
37/////////////////////////////////////////////////////////////////////////////
38// Settings
Benny Prijono4e57a542008-08-10 22:10:41 +000039CPocketPJSettings::CPocketPJSettings()
40: m_UseStun(FALSE), m_UseIce(FALSE), m_UseSrtp(FALSE), m_UsePublish(FALSE),
Benny Prijono36e76ef2008-08-13 13:56:24 +000041 m_EchoSuppress(TRUE), m_EcTail(200), m_TCP(FALSE), m_VAD(FALSE),
42 m_AutoAnswer(FALSE)
Benny Prijono4e57a542008-08-10 22:10:41 +000043{
Benny Prijono36e76ef2008-08-13 13:56:24 +000044 /* Init codec list */
45#if defined(PJMEDIA_HAS_GSM_CODEC) && PJMEDIA_HAS_GSM_CODEC
46 m_Codecs.Add(_T("GSM"));
47#endif
48#if defined(PJMEDIA_HAS_G711_CODEC) && PJMEDIA_HAS_G711_CODEC
49 m_Codecs.Add(_T("PCMU"));
50 m_Codecs.Add(_T("PCMA"));
51#endif
52#if defined(PJMEDIA_HAS_SPEEX_CODEC) && PJMEDIA_HAS_SPEEX_CODEC
53 m_Codecs.Add(_T("Speex"));
54#endif
Benny Prijono4e57a542008-08-10 22:10:41 +000055}
Benny Prijono5d9c16f2008-02-22 23:38:47 +000056
57// Load from registry
58void CPocketPJSettings::LoadRegistry()
59{
60 CRegKey key;
61 wchar_t textVal[256];
62 DWORD dwordVal;
63 DWORD cbData;
64
65
66 if (key.Open(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
67 return;
68
69 cbData = sizeof(textVal);
70 if (key.QueryValue(textVal, REG_DOMAIN, &cbData) == ERROR_SUCCESS) {
71 m_Domain = textVal;
72 }
73
74 cbData = sizeof(textVal);
75 if (key.QueryValue(textVal, REG_USER, &cbData) == ERROR_SUCCESS) {
76 m_User = textVal;
77 }
78
79 cbData = sizeof(textVal);
80 if (key.QueryValue(textVal, REG_PASSWD, &cbData) == ERROR_SUCCESS) {
81 m_Password = textVal;
82 }
83
84 cbData = sizeof(textVal);
85 if (key.QueryValue(textVal, REG_STUN_SRV, &cbData) == ERROR_SUCCESS) {
86 m_StunSrv = textVal;
87 }
88
89 cbData = sizeof(textVal);
90 if (key.QueryValue(textVal, REG_DNS, &cbData) == ERROR_SUCCESS) {
91 m_DNS = textVal;
92 }
93
94 dwordVal = 0;
95 if (key.QueryValue(dwordVal, REG_USE_STUN) == ERROR_SUCCESS) {
96 m_UseStun = dwordVal != 0;
97 }
98
99 if (key.QueryValue(dwordVal, REG_USE_ICE) == ERROR_SUCCESS) {
100 m_UseIce = dwordVal != 0;
101 }
102
103
104 if (key.QueryValue(dwordVal, REG_USE_SRTP) == ERROR_SUCCESS) {
105 m_UseSrtp = dwordVal != 0;
106 }
107
108
109 cbData = sizeof(dwordVal);
110 if (key.QueryValue(dwordVal, REG_USE_PUBLISH) == ERROR_SUCCESS) {
111 m_UsePublish = dwordVal != 0;
112 }
113
Benny Prijono4d3eed12008-03-11 13:18:48 +0000114 cbData = sizeof(dwordVal);
115 if (key.QueryValue(dwordVal, REG_ENABLE_EC) == ERROR_SUCCESS) {
116 m_EchoSuppress = dwordVal != 0;
Benny Prijono4d3eed12008-03-11 13:18:48 +0000117 }
118
119 cbData = sizeof(dwordVal);
120 if (key.QueryValue(dwordVal, REG_EC_TAIL) == ERROR_SUCCESS) {
121 m_EcTail = dwordVal;
Benny Prijono36e76ef2008-08-13 13:56:24 +0000122 }
123
124 cbData = sizeof(dwordVal);
125 if (key.QueryValue(dwordVal, REG_ENABLE_TCP) == ERROR_SUCCESS) {
126 m_TCP = dwordVal != 0;
127 }
128
129 cbData = sizeof(dwordVal);
130 if (key.QueryValue(dwordVal, REG_ENABLE_VAD) == ERROR_SUCCESS) {
131 m_VAD = dwordVal != 0;
132 }
133
134 cbData = sizeof(dwordVal);
135 if (key.QueryValue(dwordVal, REG_AUTO_ANSWER) == ERROR_SUCCESS) {
136 m_AutoAnswer = dwordVal != 0;
Benny Prijono4d3eed12008-03-11 13:18:48 +0000137 }
138
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000139 m_BuddyList.RemoveAll();
140
141 DWORD buddyCount = 0;
142 cbData = sizeof(dwordVal);
143 if (key.QueryValue(dwordVal, REG_BUDDY_CNT) == ERROR_SUCCESS) {
144 buddyCount = dwordVal;
145 }
146
147 unsigned i;
148 for (i=0; i<buddyCount; ++i) {
149 CString entry;
150 entry.Format(REG_BUDDY_X, i);
151
152 cbData = sizeof(textVal);
153 if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) {
154 m_BuddyList.Add(textVal);
155 }
156 }
157
Benny Prijono36e76ef2008-08-13 13:56:24 +0000158 DWORD codecCount = 0;
159 cbData = sizeof(dwordVal);
160 if (key.QueryValue(codecCount, REG_CODEC_CNT) == ERROR_SUCCESS) {
161
162 m_Codecs.RemoveAll();
163
164 for (i=0; i<codecCount; ++i) {
165 CString entry;
166 entry.Format(REG_CODEC_X, i);
167
168 cbData = sizeof(textVal);
169 if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) {
170 m_Codecs.Add(textVal);
171 }
172 }
173 }
174
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000175 key.Close();
176}
177
178// Save to registry
179void CPocketPJSettings::SaveRegistry()
180{
181 CRegKey key;
182
183 if (key.Create(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
184 return;
185
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);
191
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);
196
Benny Prijono4d3eed12008-03-11 13:18:48 +0000197 key.SetValue(m_EchoSuppress, REG_ENABLE_EC);
198 key.SetValue(m_EcTail, REG_EC_TAIL);
199
Benny Prijono36e76ef2008-08-13 13:56:24 +0000200 key.SetValue(m_TCP, REG_ENABLE_TCP);
201 key.SetValue(m_VAD, REG_ENABLE_VAD);
202 key.SetValue(m_AutoAnswer, REG_AUTO_ANSWER);
203
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000204 key.SetValue(m_BuddyList.GetSize(), REG_BUDDY_CNT);
205
Benny Prijono4d3eed12008-03-11 13:18:48 +0000206 int i;
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000207 for (i=0; i<m_BuddyList.GetSize(); ++i) {
208 CString entry;
209 entry.Format(REG_BUDDY_X, i);
210 key.SetValue(m_BuddyList.GetAt(i), entry);
211 }
212
Benny Prijono36e76ef2008-08-13 13:56:24 +0000213 DWORD N = m_Codecs.GetSize();
214 key.SetValue(N, REG_CODEC_CNT);
215 for (i=0; i<m_Codecs.GetSize(); ++i) {
216 CString entry;
217 entry.Format(REG_CODEC_X, i);
218 key.SetValue(m_Codecs.GetAt(i), entry);
219 }
220
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000221 key.Close();
222}
223
224
225/////////////////////////////////////////////////////////////////////////////
226// CSettingsDlg dialog
227
228
229CSettingsDlg::CSettingsDlg(CPocketPJSettings &cfg, CWnd* pParent)
230 : CDialog(CSettingsDlg::IDD, pParent), m_Cfg(cfg)
231{
232 //{{AFX_DATA_INIT(CSettingsDlg)
233 m_Domain = _T("");
234 m_ICE = FALSE;
235 m_Passwd = _T("");
236 m_PUBLISH = FALSE;
237 m_SRTP = FALSE;
238 m_STUN = FALSE;
239 m_StunSrv = _T("");
240 m_User = _T("");
241 m_Dns = _T("");
Benny Prijono4d3eed12008-03-11 13:18:48 +0000242 m_EchoSuppress = FALSE;
243 m_EcTail = _T("");
Benny Prijono36e76ef2008-08-13 13:56:24 +0000244 m_TCP = FALSE;
245 m_VAD = FALSE;
246 m_AutoAnswer = FALSE;
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000247 //}}AFX_DATA_INIT
248
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;
257 m_Dns = m_Cfg.m_DNS;
Benny Prijono4d3eed12008-03-11 13:18:48 +0000258 m_EchoSuppress = m_Cfg.m_EchoSuppress;
Benny Prijono36e76ef2008-08-13 13:56:24 +0000259 m_TCP = m_Cfg.m_TCP;
260 m_VAD = m_Cfg.m_VAD;
261 m_AutoAnswer= m_Cfg.m_AutoAnswer;
Benny Prijono4d3eed12008-03-11 13:18:48 +0000262
263 CString s;
264 s.Format(_T("%d"), m_Cfg.m_EcTail);
265 m_EcTail = s;
Benny Prijono36e76ef2008-08-13 13:56:24 +0000266
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000267}
268
269
270void CSettingsDlg::DoDataExchange(CDataExchange* pDX)
271{
272 CDialog::DoDataExchange(pDX);
273 //{{AFX_DATA_MAP(CSettingsDlg)
Benny Prijono36e76ef2008-08-13 13:56:24 +0000274 DDX_Control(pDX, IDC_CODECS, m_Codecs);
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000275 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);
Benny Prijono4d3eed12008-03-11 13:18:48 +0000284 DDX_Check(pDX, IDC_ECHO_SUPPRESS, m_EchoSuppress);
285 DDX_Text(pDX, IDC_EC_TAIL, m_EcTail);
Benny Prijono36e76ef2008-08-13 13:56:24 +0000286 DDX_Check(pDX, IDC_TCP, m_TCP);
287 DDX_Check(pDX, IDC_VAD, m_VAD);
288 DDX_Check(pDX, IDC_AA, m_AutoAnswer);
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000289 //}}AFX_DATA_MAP
Benny Prijono36e76ef2008-08-13 13:56:24 +0000290
291
292 if (m_Codecs.GetCount() == 0) {
293 int i;
294 for (i=0; i<m_Cfg.m_Codecs.GetSize(); ++i) {
295 m_Codecs.AddString(m_Cfg.m_Codecs.GetAt(i));
296 }
297 m_Codecs.SetCurSel(0);
298 }
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000299}
300
301
302BEGIN_MESSAGE_MAP(CSettingsDlg, CDialog)
303 //{{AFX_MSG_MAP(CSettingsDlg)
Benny Prijono4d3eed12008-03-11 13:18:48 +0000304 ON_BN_CLICKED(IDC_STUN, OnStun)
305 ON_BN_CLICKED(IDC_ECHO_SUPPRESS, OnEchoSuppress)
Benny Prijono36e76ef2008-08-13 13:56:24 +0000306 ON_CBN_SELCHANGE(IDC_CODECS, OnSelchangeCodecs)
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000307 //}}AFX_MSG_MAP
308END_MESSAGE_MAP()
309
310/////////////////////////////////////////////////////////////////////////////
311// CSettingsDlg message handlers
312
313int CSettingsDlg::DoModal()
314{
315 int rc = CDialog::DoModal();
316
Benny Prijono5d9c16f2008-02-22 23:38:47 +0000317 return rc;
318}
Benny Prijono4d3eed12008-03-11 13:18:48 +0000319
320void CSettingsDlg::OnStun()
321{
322}
323
324void CSettingsDlg::OnEchoSuppress()
325{
326}
Benny Prijono36e76ef2008-08-13 13:56:24 +0000327
328void CSettingsDlg::OnSelchangeCodecs()
329{
330 int cur = m_Codecs.GetCurSel();
331 if (cur < 1)
332 return;
333
334 CString codec;
335 DWORD N;
336
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);
344}
345
346
347void CSettingsDlg::OnOK()
348{
349 UpdateData(TRUE);
350
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;
359 m_Cfg.m_DNS = m_Dns;
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;
365
366 unsigned i;
367 m_Cfg.m_Codecs.RemoveAll();
368 DWORD N = m_Codecs.GetCount();
369 for (i=0; i<N; ++i) {
370 CString codec;
371 m_Codecs.GetLBText(i, codec);
372 m_Cfg.m_Codecs.Add(codec);
373 }
374
375 CDialog::OnOK();
376}