1*48a54d36SAndroid Build Coastguard Worker /* -*- Mode: C; tab-width: 4 -*-
2*48a54d36SAndroid Build Coastguard Worker *
3*48a54d36SAndroid Build Coastguard Worker * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
4*48a54d36SAndroid Build Coastguard Worker *
5*48a54d36SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*48a54d36SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*48a54d36SAndroid Build Coastguard Worker * You may obtain a copy of the License at
8*48a54d36SAndroid Build Coastguard Worker *
9*48a54d36SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*48a54d36SAndroid Build Coastguard Worker *
11*48a54d36SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*48a54d36SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*48a54d36SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*48a54d36SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*48a54d36SAndroid Build Coastguard Worker * limitations under the License.
16*48a54d36SAndroid Build Coastguard Worker */
17*48a54d36SAndroid Build Coastguard Worker
18*48a54d36SAndroid Build Coastguard Worker #include "SecondPage.h"
19*48a54d36SAndroid Build Coastguard Worker #include "resource.h"
20*48a54d36SAndroid Build Coastguard Worker
21*48a54d36SAndroid Build Coastguard Worker #include "ConfigPropertySheet.h"
22*48a54d36SAndroid Build Coastguard Worker #include "SharedSecret.h"
23*48a54d36SAndroid Build Coastguard Worker
24*48a54d36SAndroid Build Coastguard Worker #include <WinServices.h>
25*48a54d36SAndroid Build Coastguard Worker
26*48a54d36SAndroid Build Coastguard Worker #define MAX_KEY_LENGTH 255
27*48a54d36SAndroid Build Coastguard Worker
IMPLEMENT_DYNCREATE(CSecondPage,CPropertyPage)28*48a54d36SAndroid Build Coastguard Worker IMPLEMENT_DYNCREATE(CSecondPage, CPropertyPage)
29*48a54d36SAndroid Build Coastguard Worker
30*48a54d36SAndroid Build Coastguard Worker
31*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
32*48a54d36SAndroid Build Coastguard Worker // CSecondPage::CSecondPage
33*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
34*48a54d36SAndroid Build Coastguard Worker
35*48a54d36SAndroid Build Coastguard Worker CSecondPage::CSecondPage()
36*48a54d36SAndroid Build Coastguard Worker :
37*48a54d36SAndroid Build Coastguard Worker CPropertyPage(CSecondPage::IDD),
38*48a54d36SAndroid Build Coastguard Worker m_setupKey( NULL )
39*48a54d36SAndroid Build Coastguard Worker {
40*48a54d36SAndroid Build Coastguard Worker //{{AFX_DATA_INIT(CSecondPage)
41*48a54d36SAndroid Build Coastguard Worker //}}AFX_DATA_INIT
42*48a54d36SAndroid Build Coastguard Worker
43*48a54d36SAndroid Build Coastguard Worker OSStatus err;
44*48a54d36SAndroid Build Coastguard Worker
45*48a54d36SAndroid Build Coastguard Worker err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, kServiceParametersNode L"\\DynDNS\\Setup\\" kServiceDynDNSRegistrationDomains, 0,
46*48a54d36SAndroid Build Coastguard Worker NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &m_setupKey, NULL );
47*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
48*48a54d36SAndroid Build Coastguard Worker }
49*48a54d36SAndroid Build Coastguard Worker
50*48a54d36SAndroid Build Coastguard Worker
51*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
52*48a54d36SAndroid Build Coastguard Worker // CSecondPage::~CSecondPage
53*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
54*48a54d36SAndroid Build Coastguard Worker
~CSecondPage()55*48a54d36SAndroid Build Coastguard Worker CSecondPage::~CSecondPage()
56*48a54d36SAndroid Build Coastguard Worker {
57*48a54d36SAndroid Build Coastguard Worker if ( m_setupKey )
58*48a54d36SAndroid Build Coastguard Worker {
59*48a54d36SAndroid Build Coastguard Worker RegCloseKey( m_setupKey );
60*48a54d36SAndroid Build Coastguard Worker m_setupKey = NULL;
61*48a54d36SAndroid Build Coastguard Worker }
62*48a54d36SAndroid Build Coastguard Worker }
63*48a54d36SAndroid Build Coastguard Worker
64*48a54d36SAndroid Build Coastguard Worker
65*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
66*48a54d36SAndroid Build Coastguard Worker // CSecondPage::DoDataExchange
67*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
68*48a54d36SAndroid Build Coastguard Worker
DoDataExchange(CDataExchange * pDX)69*48a54d36SAndroid Build Coastguard Worker void CSecondPage::DoDataExchange(CDataExchange* pDX)
70*48a54d36SAndroid Build Coastguard Worker {
71*48a54d36SAndroid Build Coastguard Worker CPropertyPage::DoDataExchange(pDX);
72*48a54d36SAndroid Build Coastguard Worker //{{AFX_DATA_MAP(CSecondPage)
73*48a54d36SAndroid Build Coastguard Worker //}}AFX_DATA_MAP
74*48a54d36SAndroid Build Coastguard Worker DDX_Control(pDX, IDC_CHECK1, m_advertiseServicesButton);
75*48a54d36SAndroid Build Coastguard Worker DDX_Control(pDX, IDC_BUTTON1, m_sharedSecretButton);
76*48a54d36SAndroid Build Coastguard Worker DDX_Control(pDX, IDC_COMBO2, m_regDomainsBox);
77*48a54d36SAndroid Build Coastguard Worker }
78*48a54d36SAndroid Build Coastguard Worker
BEGIN_MESSAGE_MAP(CSecondPage,CPropertyPage)79*48a54d36SAndroid Build Coastguard Worker BEGIN_MESSAGE_MAP(CSecondPage, CPropertyPage)
80*48a54d36SAndroid Build Coastguard Worker //{{AFX_MSG_MAP(CSecondPage)
81*48a54d36SAndroid Build Coastguard Worker //}}AFX_MSG_MAP
82*48a54d36SAndroid Build Coastguard Worker ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedSharedSecret)
83*48a54d36SAndroid Build Coastguard Worker ON_BN_CLICKED(IDC_CHECK1, OnBnClickedAdvertise)
84*48a54d36SAndroid Build Coastguard Worker ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelChange)
85*48a54d36SAndroid Build Coastguard Worker ON_CBN_EDITCHANGE(IDC_COMBO1, OnCbnEditChange)
86*48a54d36SAndroid Build Coastguard Worker ON_CBN_EDITCHANGE(IDC_COMBO2, OnCbnEditChange)
87*48a54d36SAndroid Build Coastguard Worker ON_CBN_SELCHANGE(IDC_COMBO2, OnCbnSelChange)
88*48a54d36SAndroid Build Coastguard Worker
89*48a54d36SAndroid Build Coastguard Worker END_MESSAGE_MAP()
90*48a54d36SAndroid Build Coastguard Worker
91*48a54d36SAndroid Build Coastguard Worker
92*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
93*48a54d36SAndroid Build Coastguard Worker // CSecondPage::SetModified
94*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
95*48a54d36SAndroid Build Coastguard Worker
96*48a54d36SAndroid Build Coastguard Worker void CSecondPage::SetModified( BOOL bChanged )
97*48a54d36SAndroid Build Coastguard Worker {
98*48a54d36SAndroid Build Coastguard Worker m_modified = bChanged;
99*48a54d36SAndroid Build Coastguard Worker
100*48a54d36SAndroid Build Coastguard Worker CPropertyPage::SetModified( bChanged );
101*48a54d36SAndroid Build Coastguard Worker }
102*48a54d36SAndroid Build Coastguard Worker
103*48a54d36SAndroid Build Coastguard Worker
104*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
105*48a54d36SAndroid Build Coastguard Worker // CSecondPage::OnSetActive
106*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
107*48a54d36SAndroid Build Coastguard Worker
108*48a54d36SAndroid Build Coastguard Worker BOOL
OnSetActive()109*48a54d36SAndroid Build Coastguard Worker CSecondPage::OnSetActive()
110*48a54d36SAndroid Build Coastguard Worker {
111*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet * psheet;
112*48a54d36SAndroid Build Coastguard Worker DWORD err;
113*48a54d36SAndroid Build Coastguard Worker BOOL b = CPropertyPage::OnSetActive();
114*48a54d36SAndroid Build Coastguard Worker
115*48a54d36SAndroid Build Coastguard Worker psheet = reinterpret_cast<CConfigPropertySheet*>(GetParent());
116*48a54d36SAndroid Build Coastguard Worker require_quiet( psheet, exit );
117*48a54d36SAndroid Build Coastguard Worker
118*48a54d36SAndroid Build Coastguard Worker m_modified = FALSE;
119*48a54d36SAndroid Build Coastguard Worker
120*48a54d36SAndroid Build Coastguard Worker // Clear out what's there
121*48a54d36SAndroid Build Coastguard Worker
122*48a54d36SAndroid Build Coastguard Worker EmptyComboBox( m_regDomainsBox );
123*48a54d36SAndroid Build Coastguard Worker
124*48a54d36SAndroid Build Coastguard Worker // Now populate the registration domain box
125*48a54d36SAndroid Build Coastguard Worker
126*48a54d36SAndroid Build Coastguard Worker err = Populate( m_regDomainsBox, m_setupKey, psheet->m_regDomains );
127*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
128*48a54d36SAndroid Build Coastguard Worker
129*48a54d36SAndroid Build Coastguard Worker exit:
130*48a54d36SAndroid Build Coastguard Worker
131*48a54d36SAndroid Build Coastguard Worker return b;
132*48a54d36SAndroid Build Coastguard Worker }
133*48a54d36SAndroid Build Coastguard Worker
134*48a54d36SAndroid Build Coastguard Worker
135*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
136*48a54d36SAndroid Build Coastguard Worker // CSecondPage::OnOK
137*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
138*48a54d36SAndroid Build Coastguard Worker
139*48a54d36SAndroid Build Coastguard Worker void
OnOK()140*48a54d36SAndroid Build Coastguard Worker CSecondPage::OnOK()
141*48a54d36SAndroid Build Coastguard Worker {
142*48a54d36SAndroid Build Coastguard Worker if ( m_modified )
143*48a54d36SAndroid Build Coastguard Worker {
144*48a54d36SAndroid Build Coastguard Worker Commit();
145*48a54d36SAndroid Build Coastguard Worker }
146*48a54d36SAndroid Build Coastguard Worker }
147*48a54d36SAndroid Build Coastguard Worker
148*48a54d36SAndroid Build Coastguard Worker
149*48a54d36SAndroid Build Coastguard Worker
150*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
151*48a54d36SAndroid Build Coastguard Worker // CSecondPage::Commit
152*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
153*48a54d36SAndroid Build Coastguard Worker
154*48a54d36SAndroid Build Coastguard Worker void
Commit()155*48a54d36SAndroid Build Coastguard Worker CSecondPage::Commit()
156*48a54d36SAndroid Build Coastguard Worker {
157*48a54d36SAndroid Build Coastguard Worker DWORD err;
158*48a54d36SAndroid Build Coastguard Worker
159*48a54d36SAndroid Build Coastguard Worker if ( m_setupKey != NULL )
160*48a54d36SAndroid Build Coastguard Worker {
161*48a54d36SAndroid Build Coastguard Worker err = Commit( m_regDomainsBox, m_setupKey, m_advertiseServicesButton.GetCheck() == BST_CHECKED );
162*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
163*48a54d36SAndroid Build Coastguard Worker }
164*48a54d36SAndroid Build Coastguard Worker }
165*48a54d36SAndroid Build Coastguard Worker
166*48a54d36SAndroid Build Coastguard Worker
167*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
168*48a54d36SAndroid Build Coastguard Worker // CSecondPage::Commit
169*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
170*48a54d36SAndroid Build Coastguard Worker
171*48a54d36SAndroid Build Coastguard Worker OSStatus
Commit(CComboBox & box,HKEY key,DWORD enabled)172*48a54d36SAndroid Build Coastguard Worker CSecondPage::Commit( CComboBox & box, HKEY key, DWORD enabled )
173*48a54d36SAndroid Build Coastguard Worker {
174*48a54d36SAndroid Build Coastguard Worker CString selected;
175*48a54d36SAndroid Build Coastguard Worker HKEY subKey = NULL;
176*48a54d36SAndroid Build Coastguard Worker TCHAR subKeyName[MAX_KEY_LENGTH];
177*48a54d36SAndroid Build Coastguard Worker DWORD cSubKeys = 0;
178*48a54d36SAndroid Build Coastguard Worker DWORD cbMaxSubKey;
179*48a54d36SAndroid Build Coastguard Worker DWORD cchMaxClass;
180*48a54d36SAndroid Build Coastguard Worker DWORD dwSize;
181*48a54d36SAndroid Build Coastguard Worker int i;
182*48a54d36SAndroid Build Coastguard Worker OSStatus err = kNoErr;
183*48a54d36SAndroid Build Coastguard Worker
184*48a54d36SAndroid Build Coastguard Worker // First, remove all the entries that are there
185*48a54d36SAndroid Build Coastguard Worker
186*48a54d36SAndroid Build Coastguard Worker err = RegQueryInfoKey( key, NULL, NULL, NULL, &cSubKeys, &cbMaxSubKey, &cchMaxClass, NULL, NULL, NULL, NULL, NULL );
187*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
188*48a54d36SAndroid Build Coastguard Worker
189*48a54d36SAndroid Build Coastguard Worker for ( i = 0; i < (int) cSubKeys; i++ )
190*48a54d36SAndroid Build Coastguard Worker {
191*48a54d36SAndroid Build Coastguard Worker dwSize = MAX_KEY_LENGTH;
192*48a54d36SAndroid Build Coastguard Worker
193*48a54d36SAndroid Build Coastguard Worker err = RegEnumKeyEx( key, 0, subKeyName, &dwSize, NULL, NULL, NULL, NULL );
194*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
195*48a54d36SAndroid Build Coastguard Worker
196*48a54d36SAndroid Build Coastguard Worker err = RegDeleteKey( key, subKeyName );
197*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
198*48a54d36SAndroid Build Coastguard Worker }
199*48a54d36SAndroid Build Coastguard Worker
200*48a54d36SAndroid Build Coastguard Worker // Get selected text
201*48a54d36SAndroid Build Coastguard Worker
202*48a54d36SAndroid Build Coastguard Worker box.GetWindowText( selected );
203*48a54d36SAndroid Build Coastguard Worker
204*48a54d36SAndroid Build Coastguard Worker // If we haven't seen this string before, add the string to the box and
205*48a54d36SAndroid Build Coastguard Worker // the registry
206*48a54d36SAndroid Build Coastguard Worker
207*48a54d36SAndroid Build Coastguard Worker if ( ( selected.GetLength() > 0 ) && ( box.FindStringExact( -1, selected ) == CB_ERR ) )
208*48a54d36SAndroid Build Coastguard Worker {
209*48a54d36SAndroid Build Coastguard Worker CString string;
210*48a54d36SAndroid Build Coastguard Worker
211*48a54d36SAndroid Build Coastguard Worker box.AddString( selected );
212*48a54d36SAndroid Build Coastguard Worker
213*48a54d36SAndroid Build Coastguard Worker err = RegQueryString( key, L"UserDefined", string );
214*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
215*48a54d36SAndroid Build Coastguard Worker
216*48a54d36SAndroid Build Coastguard Worker if ( string.GetLength() )
217*48a54d36SAndroid Build Coastguard Worker {
218*48a54d36SAndroid Build Coastguard Worker string += L"," + selected;
219*48a54d36SAndroid Build Coastguard Worker }
220*48a54d36SAndroid Build Coastguard Worker else
221*48a54d36SAndroid Build Coastguard Worker {
222*48a54d36SAndroid Build Coastguard Worker string = selected;
223*48a54d36SAndroid Build Coastguard Worker }
224*48a54d36SAndroid Build Coastguard Worker
225*48a54d36SAndroid Build Coastguard Worker err = RegSetValueEx( key, L"UserDefined", 0, REG_SZ, (LPBYTE) (LPCTSTR) string, ( string.GetLength() + 1) * sizeof( TCHAR ) );
226*48a54d36SAndroid Build Coastguard Worker check_noerr ( err );
227*48a54d36SAndroid Build Coastguard Worker }
228*48a54d36SAndroid Build Coastguard Worker
229*48a54d36SAndroid Build Coastguard Worker // Save selected text in registry. This will trigger mDNSResponder to setup
230*48a54d36SAndroid Build Coastguard Worker // DynDNS config again
231*48a54d36SAndroid Build Coastguard Worker
232*48a54d36SAndroid Build Coastguard Worker err = RegCreateKeyEx( key, selected, 0,
233*48a54d36SAndroid Build Coastguard Worker NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &subKey, NULL );
234*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
235*48a54d36SAndroid Build Coastguard Worker
236*48a54d36SAndroid Build Coastguard Worker err = RegSetValueEx( subKey, L"Enabled", 0, REG_DWORD, (LPBYTE) &enabled, sizeof( DWORD ) );
237*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
238*48a54d36SAndroid Build Coastguard Worker
239*48a54d36SAndroid Build Coastguard Worker exit:
240*48a54d36SAndroid Build Coastguard Worker
241*48a54d36SAndroid Build Coastguard Worker if ( subKey )
242*48a54d36SAndroid Build Coastguard Worker {
243*48a54d36SAndroid Build Coastguard Worker RegCloseKey( subKey );
244*48a54d36SAndroid Build Coastguard Worker subKey = NULL;
245*48a54d36SAndroid Build Coastguard Worker }
246*48a54d36SAndroid Build Coastguard Worker
247*48a54d36SAndroid Build Coastguard Worker return err;
248*48a54d36SAndroid Build Coastguard Worker }
249*48a54d36SAndroid Build Coastguard Worker
250*48a54d36SAndroid Build Coastguard Worker
251*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
252*48a54d36SAndroid Build Coastguard Worker // CSecondPage::OnBnClickedSharedSecret
253*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
254*48a54d36SAndroid Build Coastguard Worker
OnBnClickedSharedSecret()255*48a54d36SAndroid Build Coastguard Worker void CSecondPage::OnBnClickedSharedSecret()
256*48a54d36SAndroid Build Coastguard Worker {
257*48a54d36SAndroid Build Coastguard Worker CString name;
258*48a54d36SAndroid Build Coastguard Worker
259*48a54d36SAndroid Build Coastguard Worker m_regDomainsBox.GetWindowText( name );
260*48a54d36SAndroid Build Coastguard Worker
261*48a54d36SAndroid Build Coastguard Worker CSharedSecret dlg;
262*48a54d36SAndroid Build Coastguard Worker
263*48a54d36SAndroid Build Coastguard Worker dlg.Load( name );
264*48a54d36SAndroid Build Coastguard Worker
265*48a54d36SAndroid Build Coastguard Worker if ( dlg.DoModal() == IDOK )
266*48a54d36SAndroid Build Coastguard Worker {
267*48a54d36SAndroid Build Coastguard Worker DWORD wakeup = 0;
268*48a54d36SAndroid Build Coastguard Worker DWORD dwSize = sizeof( DWORD );
269*48a54d36SAndroid Build Coastguard Worker OSStatus err;
270*48a54d36SAndroid Build Coastguard Worker
271*48a54d36SAndroid Build Coastguard Worker dlg.Commit( name );
272*48a54d36SAndroid Build Coastguard Worker
273*48a54d36SAndroid Build Coastguard Worker // We have now updated the secret, however the system service
274*48a54d36SAndroid Build Coastguard Worker // doesn't know about it yet. So we're going to update the
275*48a54d36SAndroid Build Coastguard Worker // registry with a dummy value which will cause the system
276*48a54d36SAndroid Build Coastguard Worker // service to re-initialize it's DynDNS setup
277*48a54d36SAndroid Build Coastguard Worker //
278*48a54d36SAndroid Build Coastguard Worker
279*48a54d36SAndroid Build Coastguard Worker RegQueryValueEx( m_setupKey, L"Wakeup", NULL, NULL, (LPBYTE) &wakeup, &dwSize );
280*48a54d36SAndroid Build Coastguard Worker
281*48a54d36SAndroid Build Coastguard Worker wakeup++;
282*48a54d36SAndroid Build Coastguard Worker
283*48a54d36SAndroid Build Coastguard Worker err = RegSetValueEx( m_setupKey, L"Wakeup", 0, REG_DWORD, (LPBYTE) &wakeup, sizeof( DWORD ) );
284*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
285*48a54d36SAndroid Build Coastguard Worker }
286*48a54d36SAndroid Build Coastguard Worker
287*48a54d36SAndroid Build Coastguard Worker exit:
288*48a54d36SAndroid Build Coastguard Worker
289*48a54d36SAndroid Build Coastguard Worker return;
290*48a54d36SAndroid Build Coastguard Worker }
291*48a54d36SAndroid Build Coastguard Worker
292*48a54d36SAndroid Build Coastguard Worker
293*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
294*48a54d36SAndroid Build Coastguard Worker // CSecondPage::OnBnClickedAdvertise
295*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
296*48a54d36SAndroid Build Coastguard Worker
OnBnClickedAdvertise()297*48a54d36SAndroid Build Coastguard Worker void CSecondPage::OnBnClickedAdvertise()
298*48a54d36SAndroid Build Coastguard Worker {
299*48a54d36SAndroid Build Coastguard Worker int state;
300*48a54d36SAndroid Build Coastguard Worker
301*48a54d36SAndroid Build Coastguard Worker state = m_advertiseServicesButton.GetCheck();
302*48a54d36SAndroid Build Coastguard Worker
303*48a54d36SAndroid Build Coastguard Worker m_regDomainsBox.EnableWindow( state );
304*48a54d36SAndroid Build Coastguard Worker m_sharedSecretButton.EnableWindow( state );
305*48a54d36SAndroid Build Coastguard Worker
306*48a54d36SAndroid Build Coastguard Worker SetModified( TRUE );
307*48a54d36SAndroid Build Coastguard Worker }
308*48a54d36SAndroid Build Coastguard Worker
309*48a54d36SAndroid Build Coastguard Worker
310*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
311*48a54d36SAndroid Build Coastguard Worker // CSecondPage::OnCbnSelChange
312*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
313*48a54d36SAndroid Build Coastguard Worker
OnCbnSelChange()314*48a54d36SAndroid Build Coastguard Worker void CSecondPage::OnCbnSelChange()
315*48a54d36SAndroid Build Coastguard Worker {
316*48a54d36SAndroid Build Coastguard Worker SetModified( TRUE );
317*48a54d36SAndroid Build Coastguard Worker }
318*48a54d36SAndroid Build Coastguard Worker
319*48a54d36SAndroid Build Coastguard Worker
320*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
321*48a54d36SAndroid Build Coastguard Worker // CSecondPage::OnCbnEditChange
322*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
323*48a54d36SAndroid Build Coastguard Worker
OnCbnEditChange()324*48a54d36SAndroid Build Coastguard Worker void CSecondPage::OnCbnEditChange()
325*48a54d36SAndroid Build Coastguard Worker {
326*48a54d36SAndroid Build Coastguard Worker SetModified( TRUE );
327*48a54d36SAndroid Build Coastguard Worker }
328*48a54d36SAndroid Build Coastguard Worker
329*48a54d36SAndroid Build Coastguard Worker
330*48a54d36SAndroid Build Coastguard Worker
331*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
332*48a54d36SAndroid Build Coastguard Worker // CSecondPage::OnAddRegistrationDomain
333*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
334*48a54d36SAndroid Build Coastguard Worker
335*48a54d36SAndroid Build Coastguard Worker void
OnAddRegistrationDomain(CString & domain)336*48a54d36SAndroid Build Coastguard Worker CSecondPage::OnAddRegistrationDomain( CString & domain )
337*48a54d36SAndroid Build Coastguard Worker {
338*48a54d36SAndroid Build Coastguard Worker int index = m_regDomainsBox.FindStringExact( -1, domain );
339*48a54d36SAndroid Build Coastguard Worker
340*48a54d36SAndroid Build Coastguard Worker if ( index == CB_ERR )
341*48a54d36SAndroid Build Coastguard Worker {
342*48a54d36SAndroid Build Coastguard Worker m_regDomainsBox.AddString( domain );
343*48a54d36SAndroid Build Coastguard Worker }
344*48a54d36SAndroid Build Coastguard Worker }
345*48a54d36SAndroid Build Coastguard Worker
346*48a54d36SAndroid Build Coastguard Worker
347*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
348*48a54d36SAndroid Build Coastguard Worker // CSecondPage::OnRemoveRegistrationDomain
349*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
350*48a54d36SAndroid Build Coastguard Worker
351*48a54d36SAndroid Build Coastguard Worker void
OnRemoveRegistrationDomain(CString & domain)352*48a54d36SAndroid Build Coastguard Worker CSecondPage::OnRemoveRegistrationDomain( CString & domain )
353*48a54d36SAndroid Build Coastguard Worker {
354*48a54d36SAndroid Build Coastguard Worker int index = m_regDomainsBox.FindStringExact( -1, domain );
355*48a54d36SAndroid Build Coastguard Worker
356*48a54d36SAndroid Build Coastguard Worker if ( index != CB_ERR )
357*48a54d36SAndroid Build Coastguard Worker {
358*48a54d36SAndroid Build Coastguard Worker m_regDomainsBox.DeleteString( index );
359*48a54d36SAndroid Build Coastguard Worker }
360*48a54d36SAndroid Build Coastguard Worker }
361*48a54d36SAndroid Build Coastguard Worker
362*48a54d36SAndroid Build Coastguard Worker
363*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
364*48a54d36SAndroid Build Coastguard Worker // CSecondPage::EmptyComboBox
365*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
366*48a54d36SAndroid Build Coastguard Worker
367*48a54d36SAndroid Build Coastguard Worker void
EmptyComboBox(CComboBox & box)368*48a54d36SAndroid Build Coastguard Worker CSecondPage::EmptyComboBox( CComboBox & box )
369*48a54d36SAndroid Build Coastguard Worker {
370*48a54d36SAndroid Build Coastguard Worker while ( box.GetCount() > 0 )
371*48a54d36SAndroid Build Coastguard Worker {
372*48a54d36SAndroid Build Coastguard Worker box.DeleteString( 0 );
373*48a54d36SAndroid Build Coastguard Worker }
374*48a54d36SAndroid Build Coastguard Worker }
375*48a54d36SAndroid Build Coastguard Worker
376*48a54d36SAndroid Build Coastguard Worker
377*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
378*48a54d36SAndroid Build Coastguard Worker // CSecondPage::Populate
379*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
380*48a54d36SAndroid Build Coastguard Worker
381*48a54d36SAndroid Build Coastguard Worker OSStatus
Populate(CComboBox & box,HKEY key,StringList & l)382*48a54d36SAndroid Build Coastguard Worker CSecondPage::Populate( CComboBox & box, HKEY key, StringList & l )
383*48a54d36SAndroid Build Coastguard Worker {
384*48a54d36SAndroid Build Coastguard Worker CString string;
385*48a54d36SAndroid Build Coastguard Worker HKEY subKey = NULL;
386*48a54d36SAndroid Build Coastguard Worker DWORD dwSize;
387*48a54d36SAndroid Build Coastguard Worker DWORD enabled = 0;
388*48a54d36SAndroid Build Coastguard Worker TCHAR subKeyName[MAX_KEY_LENGTH];
389*48a54d36SAndroid Build Coastguard Worker DWORD cSubKeys = 0;
390*48a54d36SAndroid Build Coastguard Worker DWORD cbMaxSubKey;
391*48a54d36SAndroid Build Coastguard Worker DWORD cchMaxClass;
392*48a54d36SAndroid Build Coastguard Worker OSStatus err;
393*48a54d36SAndroid Build Coastguard Worker
394*48a54d36SAndroid Build Coastguard Worker err = RegQueryString( key, L"UserDefined", string );
395*48a54d36SAndroid Build Coastguard Worker
396*48a54d36SAndroid Build Coastguard Worker if ( !err && string.GetLength() )
397*48a54d36SAndroid Build Coastguard Worker {
398*48a54d36SAndroid Build Coastguard Worker bool done = false;
399*48a54d36SAndroid Build Coastguard Worker
400*48a54d36SAndroid Build Coastguard Worker while ( !done )
401*48a54d36SAndroid Build Coastguard Worker {
402*48a54d36SAndroid Build Coastguard Worker CString tok;
403*48a54d36SAndroid Build Coastguard Worker
404*48a54d36SAndroid Build Coastguard Worker tok = string.SpanExcluding( L"," );
405*48a54d36SAndroid Build Coastguard Worker
406*48a54d36SAndroid Build Coastguard Worker box.AddString( tok );
407*48a54d36SAndroid Build Coastguard Worker
408*48a54d36SAndroid Build Coastguard Worker if ( tok != string )
409*48a54d36SAndroid Build Coastguard Worker {
410*48a54d36SAndroid Build Coastguard Worker // Get rid of that string and comma
411*48a54d36SAndroid Build Coastguard Worker
412*48a54d36SAndroid Build Coastguard Worker string = string.Right( string.GetLength() - tok.GetLength() - 1 );
413*48a54d36SAndroid Build Coastguard Worker }
414*48a54d36SAndroid Build Coastguard Worker else
415*48a54d36SAndroid Build Coastguard Worker {
416*48a54d36SAndroid Build Coastguard Worker done = true;
417*48a54d36SAndroid Build Coastguard Worker }
418*48a54d36SAndroid Build Coastguard Worker }
419*48a54d36SAndroid Build Coastguard Worker }
420*48a54d36SAndroid Build Coastguard Worker
421*48a54d36SAndroid Build Coastguard Worker StringList::iterator it;
422*48a54d36SAndroid Build Coastguard Worker
423*48a54d36SAndroid Build Coastguard Worker for ( it = l.begin(); it != l.end(); it++ )
424*48a54d36SAndroid Build Coastguard Worker {
425*48a54d36SAndroid Build Coastguard Worker if ( box.FindStringExact( -1, *it ) == CB_ERR )
426*48a54d36SAndroid Build Coastguard Worker {
427*48a54d36SAndroid Build Coastguard Worker box.AddString( *it );
428*48a54d36SAndroid Build Coastguard Worker }
429*48a54d36SAndroid Build Coastguard Worker }
430*48a54d36SAndroid Build Coastguard Worker
431*48a54d36SAndroid Build Coastguard Worker err = RegQueryInfoKey( key, NULL, NULL, NULL, &cSubKeys, &cbMaxSubKey, &cchMaxClass, NULL, NULL, NULL, NULL, NULL );
432*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
433*48a54d36SAndroid Build Coastguard Worker
434*48a54d36SAndroid Build Coastguard Worker if ( cSubKeys > 0 )
435*48a54d36SAndroid Build Coastguard Worker {
436*48a54d36SAndroid Build Coastguard Worker dwSize = MAX_KEY_LENGTH;
437*48a54d36SAndroid Build Coastguard Worker
438*48a54d36SAndroid Build Coastguard Worker err = RegEnumKeyEx( key, 0, subKeyName, &dwSize, NULL, NULL, NULL, NULL );
439*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
440*48a54d36SAndroid Build Coastguard Worker
441*48a54d36SAndroid Build Coastguard Worker err = RegOpenKey( key, subKeyName, &subKey );
442*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
443*48a54d36SAndroid Build Coastguard Worker
444*48a54d36SAndroid Build Coastguard Worker dwSize = sizeof( DWORD );
445*48a54d36SAndroid Build Coastguard Worker err = RegQueryValueEx( subKey, L"Enabled", NULL, NULL, (LPBYTE) &enabled, &dwSize );
446*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
447*48a54d36SAndroid Build Coastguard Worker
448*48a54d36SAndroid Build Coastguard Worker // See if it's there
449*48a54d36SAndroid Build Coastguard Worker
450*48a54d36SAndroid Build Coastguard Worker if ( box.SelectString( -1, subKeyName ) == CB_ERR )
451*48a54d36SAndroid Build Coastguard Worker {
452*48a54d36SAndroid Build Coastguard Worker // If not, add it
453*48a54d36SAndroid Build Coastguard Worker
454*48a54d36SAndroid Build Coastguard Worker box.AddString( subKeyName );
455*48a54d36SAndroid Build Coastguard Worker }
456*48a54d36SAndroid Build Coastguard Worker
457*48a54d36SAndroid Build Coastguard Worker box.SelectString( -1, subKeyName );
458*48a54d36SAndroid Build Coastguard Worker
459*48a54d36SAndroid Build Coastguard Worker RegCloseKey( subKey );
460*48a54d36SAndroid Build Coastguard Worker subKey = NULL;
461*48a54d36SAndroid Build Coastguard Worker }
462*48a54d36SAndroid Build Coastguard Worker
463*48a54d36SAndroid Build Coastguard Worker exit:
464*48a54d36SAndroid Build Coastguard Worker
465*48a54d36SAndroid Build Coastguard Worker m_advertiseServicesButton.SetCheck( ( !err && enabled ) ? BST_CHECKED : BST_UNCHECKED );
466*48a54d36SAndroid Build Coastguard Worker m_regDomainsBox.EnableWindow( ( !err && enabled ) );
467*48a54d36SAndroid Build Coastguard Worker m_sharedSecretButton.EnableWindow( (!err && enabled ) );
468*48a54d36SAndroid Build Coastguard Worker
469*48a54d36SAndroid Build Coastguard Worker return err;
470*48a54d36SAndroid Build Coastguard Worker }
471*48a54d36SAndroid Build Coastguard Worker
472*48a54d36SAndroid Build Coastguard Worker
473*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
474*48a54d36SAndroid Build Coastguard Worker // CSecondPage::CreateKey
475*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
476*48a54d36SAndroid Build Coastguard Worker
477*48a54d36SAndroid Build Coastguard Worker OSStatus
CreateKey(CString & name,DWORD enabled)478*48a54d36SAndroid Build Coastguard Worker CSecondPage::CreateKey( CString & name, DWORD enabled )
479*48a54d36SAndroid Build Coastguard Worker {
480*48a54d36SAndroid Build Coastguard Worker HKEY key = NULL;
481*48a54d36SAndroid Build Coastguard Worker OSStatus err;
482*48a54d36SAndroid Build Coastguard Worker
483*48a54d36SAndroid Build Coastguard Worker err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, (LPCTSTR) name, 0,
484*48a54d36SAndroid Build Coastguard Worker NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE|KEY_WOW64_32KEY, NULL, &key, NULL );
485*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
486*48a54d36SAndroid Build Coastguard Worker
487*48a54d36SAndroid Build Coastguard Worker err = RegSetValueEx( key, L"Enabled", 0, REG_DWORD, (LPBYTE) &enabled, sizeof( DWORD ) );
488*48a54d36SAndroid Build Coastguard Worker check_noerr( err );
489*48a54d36SAndroid Build Coastguard Worker
490*48a54d36SAndroid Build Coastguard Worker exit:
491*48a54d36SAndroid Build Coastguard Worker
492*48a54d36SAndroid Build Coastguard Worker if ( key )
493*48a54d36SAndroid Build Coastguard Worker {
494*48a54d36SAndroid Build Coastguard Worker RegCloseKey( key );
495*48a54d36SAndroid Build Coastguard Worker }
496*48a54d36SAndroid Build Coastguard Worker
497*48a54d36SAndroid Build Coastguard Worker return err;
498*48a54d36SAndroid Build Coastguard Worker }
499*48a54d36SAndroid Build Coastguard Worker
500*48a54d36SAndroid Build Coastguard Worker
501*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
502*48a54d36SAndroid Build Coastguard Worker // CSecondPage::RegQueryString
503*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
504*48a54d36SAndroid Build Coastguard Worker
505*48a54d36SAndroid Build Coastguard Worker OSStatus
RegQueryString(HKEY key,CString valueName,CString & value)506*48a54d36SAndroid Build Coastguard Worker CSecondPage::RegQueryString( HKEY key, CString valueName, CString & value )
507*48a54d36SAndroid Build Coastguard Worker {
508*48a54d36SAndroid Build Coastguard Worker TCHAR * string;
509*48a54d36SAndroid Build Coastguard Worker DWORD stringLen;
510*48a54d36SAndroid Build Coastguard Worker int i;
511*48a54d36SAndroid Build Coastguard Worker OSStatus err;
512*48a54d36SAndroid Build Coastguard Worker
513*48a54d36SAndroid Build Coastguard Worker stringLen = 1024;
514*48a54d36SAndroid Build Coastguard Worker string = NULL;
515*48a54d36SAndroid Build Coastguard Worker i = 0;
516*48a54d36SAndroid Build Coastguard Worker
517*48a54d36SAndroid Build Coastguard Worker do
518*48a54d36SAndroid Build Coastguard Worker {
519*48a54d36SAndroid Build Coastguard Worker if ( string )
520*48a54d36SAndroid Build Coastguard Worker {
521*48a54d36SAndroid Build Coastguard Worker free( string );
522*48a54d36SAndroid Build Coastguard Worker }
523*48a54d36SAndroid Build Coastguard Worker
524*48a54d36SAndroid Build Coastguard Worker string = (TCHAR*) malloc( stringLen );
525*48a54d36SAndroid Build Coastguard Worker require_action( string, exit, err = kUnknownErr );
526*48a54d36SAndroid Build Coastguard Worker *string = '\0';
527*48a54d36SAndroid Build Coastguard Worker
528*48a54d36SAndroid Build Coastguard Worker err = RegQueryValueEx( key, valueName, 0, NULL, (LPBYTE) string, &stringLen );
529*48a54d36SAndroid Build Coastguard Worker
530*48a54d36SAndroid Build Coastguard Worker i++;
531*48a54d36SAndroid Build Coastguard Worker }
532*48a54d36SAndroid Build Coastguard Worker while ( ( err == ERROR_MORE_DATA ) && ( i < 100 ) );
533*48a54d36SAndroid Build Coastguard Worker
534*48a54d36SAndroid Build Coastguard Worker value = string;
535*48a54d36SAndroid Build Coastguard Worker
536*48a54d36SAndroid Build Coastguard Worker exit:
537*48a54d36SAndroid Build Coastguard Worker
538*48a54d36SAndroid Build Coastguard Worker if ( string )
539*48a54d36SAndroid Build Coastguard Worker {
540*48a54d36SAndroid Build Coastguard Worker free( string );
541*48a54d36SAndroid Build Coastguard Worker }
542*48a54d36SAndroid Build Coastguard Worker
543*48a54d36SAndroid Build Coastguard Worker return err;
544*48a54d36SAndroid Build Coastguard Worker }
545