xref: /aosp_15_r20/external/mdnsresponder/mDNSWindows/ControlPanel/ConfigPropertySheet.cpp (revision 48a54d368dc4fa860885eef7b70b6c53499e7c25)
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 "ConfigPropertySheet.h"
19*48a54d36SAndroid Build Coastguard Worker #include <WinServices.h>
20*48a54d36SAndroid Build Coastguard Worker extern "C"
21*48a54d36SAndroid Build Coastguard Worker {
22*48a54d36SAndroid Build Coastguard Worker #include <ClientCommon.h>
23*48a54d36SAndroid Build Coastguard Worker }
24*48a54d36SAndroid Build Coastguard Worker #include <process.h>
25*48a54d36SAndroid Build Coastguard Worker 
26*48a54d36SAndroid Build Coastguard Worker // Custom events
27*48a54d36SAndroid Build Coastguard Worker 
28*48a54d36SAndroid Build Coastguard Worker #define WM_DATAREADY		( WM_USER + 0x100 )
29*48a54d36SAndroid Build Coastguard Worker 
30*48a54d36SAndroid Build Coastguard Worker 
IMPLEMENT_DYNCREATE(CConfigPropertySheet,CPropertySheet)31*48a54d36SAndroid Build Coastguard Worker IMPLEMENT_DYNCREATE(CConfigPropertySheet, CPropertySheet)
32*48a54d36SAndroid Build Coastguard Worker 
33*48a54d36SAndroid Build Coastguard Worker 
34*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
35*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::CConfigPropertySheet
36*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
37*48a54d36SAndroid Build Coastguard Worker 
38*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::CConfigPropertySheet()
39*48a54d36SAndroid Build Coastguard Worker :
40*48a54d36SAndroid Build Coastguard Worker 	CPropertySheet(),
41*48a54d36SAndroid Build Coastguard Worker 	m_browseDomainsRef( NULL ),
42*48a54d36SAndroid Build Coastguard Worker 	m_thread( NULL ),
43*48a54d36SAndroid Build Coastguard Worker 	m_threadExited( NULL )
44*48a54d36SAndroid Build Coastguard Worker {
45*48a54d36SAndroid Build Coastguard Worker 	AddPage(&m_firstPage );
46*48a54d36SAndroid Build Coastguard Worker 	AddPage(&m_secondPage);
47*48a54d36SAndroid Build Coastguard Worker 	AddPage(&m_thirdPage);
48*48a54d36SAndroid Build Coastguard Worker 
49*48a54d36SAndroid Build Coastguard Worker 	InitializeCriticalSection( &m_lock );
50*48a54d36SAndroid Build Coastguard Worker }
51*48a54d36SAndroid Build Coastguard Worker 
52*48a54d36SAndroid Build Coastguard Worker 
53*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
54*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::~CConfigPropertySheet
55*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
56*48a54d36SAndroid Build Coastguard Worker 
~CConfigPropertySheet()57*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::~CConfigPropertySheet()
58*48a54d36SAndroid Build Coastguard Worker {
59*48a54d36SAndroid Build Coastguard Worker 	DeleteCriticalSection( &m_lock );
60*48a54d36SAndroid Build Coastguard Worker }
61*48a54d36SAndroid Build Coastguard Worker 
62*48a54d36SAndroid Build Coastguard Worker 
BEGIN_MESSAGE_MAP(CConfigPropertySheet,CPropertySheet)63*48a54d36SAndroid Build Coastguard Worker BEGIN_MESSAGE_MAP(CConfigPropertySheet, CPropertySheet)
64*48a54d36SAndroid Build Coastguard Worker 	//{{AFX_MSG_MAP(CConfigPropertySheet)
65*48a54d36SAndroid Build Coastguard Worker 	//}}AFX_MSG_MAP
66*48a54d36SAndroid Build Coastguard Worker 	ON_MESSAGE( WM_DATAREADY, OnDataReady )
67*48a54d36SAndroid Build Coastguard Worker END_MESSAGE_MAP()
68*48a54d36SAndroid Build Coastguard Worker 
69*48a54d36SAndroid Build Coastguard Worker 
70*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
71*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::OnInitDialog
72*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
73*48a54d36SAndroid Build Coastguard Worker 
74*48a54d36SAndroid Build Coastguard Worker BOOL
75*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::OnInitDialog()
76*48a54d36SAndroid Build Coastguard Worker {
77*48a54d36SAndroid Build Coastguard Worker 	OSStatus err;
78*48a54d36SAndroid Build Coastguard Worker 
79*48a54d36SAndroid Build Coastguard Worker 	BOOL b = CPropertySheet::OnInitDialog();
80*48a54d36SAndroid Build Coastguard Worker 
81*48a54d36SAndroid Build Coastguard Worker 	err = SetupBrowsing();
82*48a54d36SAndroid Build Coastguard Worker 	require_noerr( err, exit );
83*48a54d36SAndroid Build Coastguard Worker 
84*48a54d36SAndroid Build Coastguard Worker exit:
85*48a54d36SAndroid Build Coastguard Worker 
86*48a54d36SAndroid Build Coastguard Worker 	return b;
87*48a54d36SAndroid Build Coastguard Worker }
88*48a54d36SAndroid Build Coastguard Worker 
89*48a54d36SAndroid Build Coastguard Worker 
90*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
91*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::OnCommand
92*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
93*48a54d36SAndroid Build Coastguard Worker 
94*48a54d36SAndroid Build Coastguard Worker BOOL
OnCommand(WPARAM wParam,LPARAM lParam)95*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::OnCommand(WPARAM wParam, LPARAM lParam)
96*48a54d36SAndroid Build Coastguard Worker {
97*48a54d36SAndroid Build Coastguard Worker    // Check if OK or Cancel was hit
98*48a54d36SAndroid Build Coastguard Worker 
99*48a54d36SAndroid Build Coastguard Worker    if ( ( wParam == ID_WIZFINISH ) || ( wParam == IDOK ) || ( wParam == IDCANCEL ) )
100*48a54d36SAndroid Build Coastguard Worker    {
101*48a54d36SAndroid Build Coastguard Worker       OnEndDialog();
102*48a54d36SAndroid Build Coastguard Worker    }
103*48a54d36SAndroid Build Coastguard Worker 
104*48a54d36SAndroid Build Coastguard Worker    return CPropertySheet::OnCommand(wParam, lParam);
105*48a54d36SAndroid Build Coastguard Worker }
106*48a54d36SAndroid Build Coastguard Worker 
107*48a54d36SAndroid Build Coastguard Worker 
108*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
109*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::OnDataReady
110*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
111*48a54d36SAndroid Build Coastguard Worker 
112*48a54d36SAndroid Build Coastguard Worker LRESULT
OnDataReady(WPARAM inWParam,LPARAM inLParam)113*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::OnDataReady(WPARAM inWParam, LPARAM inLParam)
114*48a54d36SAndroid Build Coastguard Worker {
115*48a54d36SAndroid Build Coastguard Worker 	if (WSAGETSELECTERROR(inLParam) && !(HIWORD(inLParam)))
116*48a54d36SAndroid Build Coastguard Worker 	{
117*48a54d36SAndroid Build Coastguard Worker 		dlog( kDebugLevelError, "OnSocket: window error\n" );
118*48a54d36SAndroid Build Coastguard Worker 	}
119*48a54d36SAndroid Build Coastguard Worker 	else
120*48a54d36SAndroid Build Coastguard Worker 	{
121*48a54d36SAndroid Build Coastguard Worker 		SOCKET sock = (SOCKET) inWParam;
122*48a54d36SAndroid Build Coastguard Worker 
123*48a54d36SAndroid Build Coastguard Worker 		if ( m_browseDomainsRef && DNSServiceRefSockFD( m_browseDomainsRef ) == (int) sock )
124*48a54d36SAndroid Build Coastguard Worker 		{
125*48a54d36SAndroid Build Coastguard Worker 			DNSServiceProcessResult( m_browseDomainsRef );
126*48a54d36SAndroid Build Coastguard Worker 		}
127*48a54d36SAndroid Build Coastguard Worker 	}
128*48a54d36SAndroid Build Coastguard Worker 
129*48a54d36SAndroid Build Coastguard Worker 	return 0;
130*48a54d36SAndroid Build Coastguard Worker }
131*48a54d36SAndroid Build Coastguard Worker 
132*48a54d36SAndroid Build Coastguard Worker 
133*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
134*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::OnEndDialog
135*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
136*48a54d36SAndroid Build Coastguard Worker 
137*48a54d36SAndroid Build Coastguard Worker void
OnEndDialog()138*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::OnEndDialog()
139*48a54d36SAndroid Build Coastguard Worker {
140*48a54d36SAndroid Build Coastguard Worker 	OSStatus err;
141*48a54d36SAndroid Build Coastguard Worker 
142*48a54d36SAndroid Build Coastguard Worker 	err = TearDownBrowsing();
143*48a54d36SAndroid Build Coastguard Worker 	check_noerr( err );
144*48a54d36SAndroid Build Coastguard Worker }
145*48a54d36SAndroid Build Coastguard Worker 
146*48a54d36SAndroid Build Coastguard Worker 
147*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
148*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::SetupBrowsing
149*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
150*48a54d36SAndroid Build Coastguard Worker 
151*48a54d36SAndroid Build Coastguard Worker OSStatus
SetupBrowsing()152*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::SetupBrowsing()
153*48a54d36SAndroid Build Coastguard Worker {
154*48a54d36SAndroid Build Coastguard Worker 	OSStatus err;
155*48a54d36SAndroid Build Coastguard Worker 
156*48a54d36SAndroid Build Coastguard Worker 	// Start browsing for browse domains
157*48a54d36SAndroid Build Coastguard Worker 
158*48a54d36SAndroid Build Coastguard Worker 	err = DNSServiceEnumerateDomains( &m_browseDomainsRef, kDNSServiceFlagsBrowseDomains, 0, BrowseDomainsReply, this );
159*48a54d36SAndroid Build Coastguard Worker 	require_noerr( err, exit );
160*48a54d36SAndroid Build Coastguard Worker 
161*48a54d36SAndroid Build Coastguard Worker 	err = WSAAsyncSelect( DNSServiceRefSockFD( m_browseDomainsRef ), m_hWnd, WM_DATAREADY, FD_READ|FD_CLOSE );
162*48a54d36SAndroid Build Coastguard Worker 	require_noerr( err, exit );
163*48a54d36SAndroid Build Coastguard Worker 
164*48a54d36SAndroid Build Coastguard Worker exit:
165*48a54d36SAndroid Build Coastguard Worker 
166*48a54d36SAndroid Build Coastguard Worker 	if ( err )
167*48a54d36SAndroid Build Coastguard Worker 	{
168*48a54d36SAndroid Build Coastguard Worker 		TearDownBrowsing();
169*48a54d36SAndroid Build Coastguard Worker 	}
170*48a54d36SAndroid Build Coastguard Worker 
171*48a54d36SAndroid Build Coastguard Worker 	return err;
172*48a54d36SAndroid Build Coastguard Worker }
173*48a54d36SAndroid Build Coastguard Worker 
174*48a54d36SAndroid Build Coastguard Worker 
175*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
176*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::TearDownBrowsing
177*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
178*48a54d36SAndroid Build Coastguard Worker 
179*48a54d36SAndroid Build Coastguard Worker OSStatus
TearDownBrowsing()180*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::TearDownBrowsing()
181*48a54d36SAndroid Build Coastguard Worker {
182*48a54d36SAndroid Build Coastguard Worker 	OSStatus err = kNoErr;
183*48a54d36SAndroid Build Coastguard Worker 
184*48a54d36SAndroid Build Coastguard Worker 	if ( m_browseDomainsRef )
185*48a54d36SAndroid Build Coastguard Worker 	{
186*48a54d36SAndroid Build Coastguard Worker 		err = WSAAsyncSelect( DNSServiceRefSockFD( m_browseDomainsRef ), m_hWnd, 0, 0 );
187*48a54d36SAndroid Build Coastguard Worker 		check_noerr( err );
188*48a54d36SAndroid Build Coastguard Worker 
189*48a54d36SAndroid Build Coastguard Worker 		DNSServiceRefDeallocate( m_browseDomainsRef );
190*48a54d36SAndroid Build Coastguard Worker 
191*48a54d36SAndroid Build Coastguard Worker 		m_browseDomainsRef = NULL;
192*48a54d36SAndroid Build Coastguard Worker 	}
193*48a54d36SAndroid Build Coastguard Worker 
194*48a54d36SAndroid Build Coastguard Worker 	return err;
195*48a54d36SAndroid Build Coastguard Worker }
196*48a54d36SAndroid Build Coastguard Worker 
197*48a54d36SAndroid Build Coastguard Worker 
198*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
199*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::DecodeDomainName
200*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
201*48a54d36SAndroid Build Coastguard Worker 
202*48a54d36SAndroid Build Coastguard Worker OSStatus
DecodeDomainName(const char * raw,CString & decoded)203*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::DecodeDomainName( const char * raw, CString & decoded )
204*48a54d36SAndroid Build Coastguard Worker {
205*48a54d36SAndroid Build Coastguard Worker 	char nextLabel[128] = "\0";
206*48a54d36SAndroid Build Coastguard Worker 	char decodedDomainString[kDNSServiceMaxDomainName];
207*48a54d36SAndroid Build Coastguard Worker     char * buffer = (char *) raw;
208*48a54d36SAndroid Build Coastguard Worker     int labels = 0, i;
209*48a54d36SAndroid Build Coastguard Worker     char text[64];
210*48a54d36SAndroid Build Coastguard Worker 	const char *label[128];
211*48a54d36SAndroid Build Coastguard Worker 	OSStatus	err;
212*48a54d36SAndroid Build Coastguard Worker 
213*48a54d36SAndroid Build Coastguard Worker 	// Initialize
214*48a54d36SAndroid Build Coastguard Worker 
215*48a54d36SAndroid Build Coastguard Worker 	decodedDomainString[0] = '\0';
216*48a54d36SAndroid Build Coastguard Worker 
217*48a54d36SAndroid Build Coastguard Worker     // Count the labels
218*48a54d36SAndroid Build Coastguard Worker 
219*48a54d36SAndroid Build Coastguard Worker 	while ( *buffer )
220*48a54d36SAndroid Build Coastguard Worker 	{
221*48a54d36SAndroid Build Coastguard Worker 		label[labels++] = buffer;
222*48a54d36SAndroid Build Coastguard Worker 		buffer = (char *) GetNextLabel(buffer, text);
223*48a54d36SAndroid Build Coastguard Worker     }
224*48a54d36SAndroid Build Coastguard Worker 
225*48a54d36SAndroid Build Coastguard Worker     buffer = (char*) raw;
226*48a54d36SAndroid Build Coastguard Worker 
227*48a54d36SAndroid Build Coastguard Worker     for (i = 0; i < labels; i++)
228*48a54d36SAndroid Build Coastguard Worker 	{
229*48a54d36SAndroid Build Coastguard Worker 		buffer = (char *)GetNextLabel(buffer, nextLabel);
230*48a54d36SAndroid Build Coastguard Worker         strcat(decodedDomainString, nextLabel);
231*48a54d36SAndroid Build Coastguard Worker         strcat(decodedDomainString, ".");
232*48a54d36SAndroid Build Coastguard Worker     }
233*48a54d36SAndroid Build Coastguard Worker 
234*48a54d36SAndroid Build Coastguard Worker     // Remove trailing dot from domain name.
235*48a54d36SAndroid Build Coastguard Worker 
236*48a54d36SAndroid Build Coastguard Worker 	decodedDomainString[ strlen( decodedDomainString ) - 1 ] = '\0';
237*48a54d36SAndroid Build Coastguard Worker 
238*48a54d36SAndroid Build Coastguard Worker 	// Convert to Unicode
239*48a54d36SAndroid Build Coastguard Worker 
240*48a54d36SAndroid Build Coastguard Worker 	err = UTF8StringToStringObject( decodedDomainString, decoded );
241*48a54d36SAndroid Build Coastguard Worker 
242*48a54d36SAndroid Build Coastguard Worker 	return err;
243*48a54d36SAndroid Build Coastguard Worker }
244*48a54d36SAndroid Build Coastguard Worker 
245*48a54d36SAndroid Build Coastguard Worker 
246*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
247*48a54d36SAndroid Build Coastguard Worker //	CConfigPropertySheet::BrowseDomainsReply
248*48a54d36SAndroid Build Coastguard Worker //---------------------------------------------------------------------------------------------------------------------------
249*48a54d36SAndroid Build Coastguard Worker 
250*48a54d36SAndroid Build Coastguard Worker void DNSSD_API
BrowseDomainsReply(DNSServiceRef sdRef,DNSServiceFlags flags,uint32_t interfaceIndex,DNSServiceErrorType errorCode,const char * replyDomain,void * context)251*48a54d36SAndroid Build Coastguard Worker CConfigPropertySheet::BrowseDomainsReply
252*48a54d36SAndroid Build Coastguard Worker 							(
253*48a54d36SAndroid Build Coastguard Worker 							DNSServiceRef			sdRef,
254*48a54d36SAndroid Build Coastguard Worker 							DNSServiceFlags			flags,
255*48a54d36SAndroid Build Coastguard Worker 							uint32_t				interfaceIndex,
256*48a54d36SAndroid Build Coastguard Worker 							DNSServiceErrorType		errorCode,
257*48a54d36SAndroid Build Coastguard Worker 							const char			*	replyDomain,
258*48a54d36SAndroid Build Coastguard Worker 							void				*	context
259*48a54d36SAndroid Build Coastguard Worker 							)
260*48a54d36SAndroid Build Coastguard Worker {
261*48a54d36SAndroid Build Coastguard Worker 	CConfigPropertySheet	*	self = reinterpret_cast<CConfigPropertySheet*>(context);
262*48a54d36SAndroid Build Coastguard Worker 	CString						decoded;
263*48a54d36SAndroid Build Coastguard Worker 	OSStatus					err;
264*48a54d36SAndroid Build Coastguard Worker 
265*48a54d36SAndroid Build Coastguard Worker 	DEBUG_UNUSED( sdRef );
266*48a54d36SAndroid Build Coastguard Worker 	DEBUG_UNUSED( interfaceIndex );
267*48a54d36SAndroid Build Coastguard Worker 
268*48a54d36SAndroid Build Coastguard Worker 	if ( errorCode )
269*48a54d36SAndroid Build Coastguard Worker 	{
270*48a54d36SAndroid Build Coastguard Worker 		goto exit;
271*48a54d36SAndroid Build Coastguard Worker 	}
272*48a54d36SAndroid Build Coastguard Worker 
273*48a54d36SAndroid Build Coastguard Worker 	check( replyDomain );
274*48a54d36SAndroid Build Coastguard Worker 
275*48a54d36SAndroid Build Coastguard Worker 	// Ignore local domains
276*48a54d36SAndroid Build Coastguard Worker 
277*48a54d36SAndroid Build Coastguard Worker 	if ( strcmp( replyDomain, "local." ) == 0 )
278*48a54d36SAndroid Build Coastguard Worker 	{
279*48a54d36SAndroid Build Coastguard Worker 		goto exit;
280*48a54d36SAndroid Build Coastguard Worker 	}
281*48a54d36SAndroid Build Coastguard Worker 
282*48a54d36SAndroid Build Coastguard Worker 	err = self->DecodeDomainName( replyDomain, decoded );
283*48a54d36SAndroid Build Coastguard Worker 	require_noerr( err, exit );
284*48a54d36SAndroid Build Coastguard Worker 
285*48a54d36SAndroid Build Coastguard Worker 	// Remove trailing '.'
286*48a54d36SAndroid Build Coastguard Worker 
287*48a54d36SAndroid Build Coastguard Worker 	decoded.TrimRight( '.' );
288*48a54d36SAndroid Build Coastguard Worker 
289*48a54d36SAndroid Build Coastguard Worker 	if ( flags & kDNSServiceFlagsAdd )
290*48a54d36SAndroid Build Coastguard Worker 	{
291*48a54d36SAndroid Build Coastguard Worker 		self->m_browseDomains.push_back( decoded );
292*48a54d36SAndroid Build Coastguard Worker 	}
293*48a54d36SAndroid Build Coastguard Worker 	else
294*48a54d36SAndroid Build Coastguard Worker 	{
295*48a54d36SAndroid Build Coastguard Worker 		self->m_browseDomains.remove( decoded );
296*48a54d36SAndroid Build Coastguard Worker 	}
297*48a54d36SAndroid Build Coastguard Worker 
298*48a54d36SAndroid Build Coastguard Worker exit:
299*48a54d36SAndroid Build Coastguard Worker 
300*48a54d36SAndroid Build Coastguard Worker 	return;
301*48a54d36SAndroid Build Coastguard Worker }
302