1*48a54d36SAndroid Build Coastguard Worker /* -*- Mode: C; tab-width: 4 -*-
2*48a54d36SAndroid Build Coastguard Worker *
3*48a54d36SAndroid Build Coastguard Worker * Copyright (c) 2009 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
19*48a54d36SAndroid Build Coastguard Worker
20*48a54d36SAndroid Build Coastguard Worker #pragma warning(disable:4995)
21*48a54d36SAndroid Build Coastguard Worker
22*48a54d36SAndroid Build Coastguard Worker
23*48a54d36SAndroid Build Coastguard Worker
24*48a54d36SAndroid Build Coastguard Worker #include "stdafx.h"
25*48a54d36SAndroid Build Coastguard Worker
26*48a54d36SAndroid Build Coastguard Worker #include <strsafe.h>
27*48a54d36SAndroid Build Coastguard Worker
28*48a54d36SAndroid Build Coastguard Worker #include "DNSSDService.h"
29*48a54d36SAndroid Build Coastguard Worker
30*48a54d36SAndroid Build Coastguard Worker #include "DNSSDEventManager.h"
31*48a54d36SAndroid Build Coastguard Worker
32*48a54d36SAndroid Build Coastguard Worker #include "DNSSDRecord.h"
33*48a54d36SAndroid Build Coastguard Worker
34*48a54d36SAndroid Build Coastguard Worker #include "TXTRecord.h"
35*48a54d36SAndroid Build Coastguard Worker
36*48a54d36SAndroid Build Coastguard Worker #include "StringServices.h"
37*48a54d36SAndroid Build Coastguard Worker
38*48a54d36SAndroid Build Coastguard Worker #include <DebugServices.h>
39*48a54d36SAndroid Build Coastguard Worker
40*48a54d36SAndroid Build Coastguard Worker
41*48a54d36SAndroid Build Coastguard Worker
42*48a54d36SAndroid Build Coastguard Worker
43*48a54d36SAndroid Build Coastguard Worker
44*48a54d36SAndroid Build Coastguard Worker #define WM_SOCKET (WM_APP + 100)
45*48a54d36SAndroid Build Coastguard Worker
46*48a54d36SAndroid Build Coastguard Worker
47*48a54d36SAndroid Build Coastguard Worker
48*48a54d36SAndroid Build Coastguard Worker
49*48a54d36SAndroid Build Coastguard Worker
50*48a54d36SAndroid Build Coastguard Worker // CDNSSDService
51*48a54d36SAndroid Build Coastguard Worker
52*48a54d36SAndroid Build Coastguard Worker
53*48a54d36SAndroid Build Coastguard Worker
54*48a54d36SAndroid Build Coastguard Worker BOOL CDNSSDService::m_registeredWindowClass = FALSE;
55*48a54d36SAndroid Build Coastguard Worker
56*48a54d36SAndroid Build Coastguard Worker HWND CDNSSDService::m_hiddenWindow = NULL;
57*48a54d36SAndroid Build Coastguard Worker
58*48a54d36SAndroid Build Coastguard Worker CDNSSDService::SocketMap CDNSSDService::m_socketMap;
59*48a54d36SAndroid Build Coastguard Worker
60*48a54d36SAndroid Build Coastguard Worker
61*48a54d36SAndroid Build Coastguard Worker
62*48a54d36SAndroid Build Coastguard Worker
63*48a54d36SAndroid Build Coastguard Worker
FinalConstruct()64*48a54d36SAndroid Build Coastguard Worker HRESULT CDNSSDService::FinalConstruct()
65*48a54d36SAndroid Build Coastguard Worker
66*48a54d36SAndroid Build Coastguard Worker {
67*48a54d36SAndroid Build Coastguard Worker
68*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
69*48a54d36SAndroid Build Coastguard Worker
70*48a54d36SAndroid Build Coastguard Worker HRESULT hr = S_OK;
71*48a54d36SAndroid Build Coastguard Worker
72*48a54d36SAndroid Build Coastguard Worker
73*48a54d36SAndroid Build Coastguard Worker
74*48a54d36SAndroid Build Coastguard Worker m_isPrimary = TRUE;
75*48a54d36SAndroid Build Coastguard Worker
76*48a54d36SAndroid Build Coastguard Worker err = DNSServiceCreateConnection( &m_primary );
77*48a54d36SAndroid Build Coastguard Worker
78*48a54d36SAndroid Build Coastguard Worker require_action( !err, exit, hr = E_FAIL );
79*48a54d36SAndroid Build Coastguard Worker
80*48a54d36SAndroid Build Coastguard Worker
81*48a54d36SAndroid Build Coastguard Worker
82*48a54d36SAndroid Build Coastguard Worker if ( !m_hiddenWindow )
83*48a54d36SAndroid Build Coastguard Worker
84*48a54d36SAndroid Build Coastguard Worker {
85*48a54d36SAndroid Build Coastguard Worker
86*48a54d36SAndroid Build Coastguard Worker TCHAR windowClassName[ 256 ];
87*48a54d36SAndroid Build Coastguard Worker
88*48a54d36SAndroid Build Coastguard Worker
89*48a54d36SAndroid Build Coastguard Worker
90*48a54d36SAndroid Build Coastguard Worker StringCchPrintf( windowClassName, sizeof( windowClassName ) / sizeof( TCHAR ), TEXT( "Bonjour Hidden Window %d" ), GetProcessId( NULL ) );
91*48a54d36SAndroid Build Coastguard Worker
92*48a54d36SAndroid Build Coastguard Worker
93*48a54d36SAndroid Build Coastguard Worker
94*48a54d36SAndroid Build Coastguard Worker if ( !m_registeredWindowClass )
95*48a54d36SAndroid Build Coastguard Worker
96*48a54d36SAndroid Build Coastguard Worker {
97*48a54d36SAndroid Build Coastguard Worker
98*48a54d36SAndroid Build Coastguard Worker WNDCLASS wc;
99*48a54d36SAndroid Build Coastguard Worker
100*48a54d36SAndroid Build Coastguard Worker ATOM atom;
101*48a54d36SAndroid Build Coastguard Worker
102*48a54d36SAndroid Build Coastguard Worker
103*48a54d36SAndroid Build Coastguard Worker
104*48a54d36SAndroid Build Coastguard Worker wc.style = 0;
105*48a54d36SAndroid Build Coastguard Worker
106*48a54d36SAndroid Build Coastguard Worker wc.lpfnWndProc = WndProc;
107*48a54d36SAndroid Build Coastguard Worker
108*48a54d36SAndroid Build Coastguard Worker wc.cbClsExtra = 0;
109*48a54d36SAndroid Build Coastguard Worker
110*48a54d36SAndroid Build Coastguard Worker wc.cbWndExtra = 0;
111*48a54d36SAndroid Build Coastguard Worker
112*48a54d36SAndroid Build Coastguard Worker wc.hInstance = NULL;
113*48a54d36SAndroid Build Coastguard Worker
114*48a54d36SAndroid Build Coastguard Worker wc.hIcon = NULL;
115*48a54d36SAndroid Build Coastguard Worker
116*48a54d36SAndroid Build Coastguard Worker wc.hCursor = NULL;
117*48a54d36SAndroid Build Coastguard Worker
118*48a54d36SAndroid Build Coastguard Worker wc.hbrBackground = NULL;
119*48a54d36SAndroid Build Coastguard Worker
120*48a54d36SAndroid Build Coastguard Worker wc.lpszMenuName = NULL;
121*48a54d36SAndroid Build Coastguard Worker
122*48a54d36SAndroid Build Coastguard Worker wc.lpszClassName = windowClassName;
123*48a54d36SAndroid Build Coastguard Worker
124*48a54d36SAndroid Build Coastguard Worker
125*48a54d36SAndroid Build Coastguard Worker
126*48a54d36SAndroid Build Coastguard Worker atom = RegisterClass(&wc);
127*48a54d36SAndroid Build Coastguard Worker
128*48a54d36SAndroid Build Coastguard Worker require_action( atom != NULL, exit, hr = E_FAIL );
129*48a54d36SAndroid Build Coastguard Worker
130*48a54d36SAndroid Build Coastguard Worker
131*48a54d36SAndroid Build Coastguard Worker
132*48a54d36SAndroid Build Coastguard Worker m_registeredWindowClass = TRUE;
133*48a54d36SAndroid Build Coastguard Worker
134*48a54d36SAndroid Build Coastguard Worker }
135*48a54d36SAndroid Build Coastguard Worker
136*48a54d36SAndroid Build Coastguard Worker
137*48a54d36SAndroid Build Coastguard Worker
138*48a54d36SAndroid Build Coastguard Worker m_hiddenWindow = CreateWindow( windowClassName, windowClassName, WS_OVERLAPPED, 0, 0, 0, 0, NULL, NULL, GetModuleHandle( NULL ), NULL );
139*48a54d36SAndroid Build Coastguard Worker
140*48a54d36SAndroid Build Coastguard Worker require_action( m_hiddenWindow != NULL, exit, hr = E_FAIL );
141*48a54d36SAndroid Build Coastguard Worker
142*48a54d36SAndroid Build Coastguard Worker }
143*48a54d36SAndroid Build Coastguard Worker
144*48a54d36SAndroid Build Coastguard Worker
145*48a54d36SAndroid Build Coastguard Worker
146*48a54d36SAndroid Build Coastguard Worker err = WSAAsyncSelect( DNSServiceRefSockFD( m_primary ), m_hiddenWindow, WM_SOCKET, FD_READ );
147*48a54d36SAndroid Build Coastguard Worker
148*48a54d36SAndroid Build Coastguard Worker require_action( !err, exit, hr = E_FAIL );
149*48a54d36SAndroid Build Coastguard Worker
150*48a54d36SAndroid Build Coastguard Worker
151*48a54d36SAndroid Build Coastguard Worker
152*48a54d36SAndroid Build Coastguard Worker m_socketMap[ DNSServiceRefSockFD( m_primary ) ] = this;
153*48a54d36SAndroid Build Coastguard Worker
154*48a54d36SAndroid Build Coastguard Worker
155*48a54d36SAndroid Build Coastguard Worker
156*48a54d36SAndroid Build Coastguard Worker exit:
157*48a54d36SAndroid Build Coastguard Worker
158*48a54d36SAndroid Build Coastguard Worker
159*48a54d36SAndroid Build Coastguard Worker
160*48a54d36SAndroid Build Coastguard Worker return hr;
161*48a54d36SAndroid Build Coastguard Worker
162*48a54d36SAndroid Build Coastguard Worker }
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
FinalRelease()168*48a54d36SAndroid Build Coastguard Worker void CDNSSDService::FinalRelease()
169*48a54d36SAndroid Build Coastguard Worker
170*48a54d36SAndroid Build Coastguard Worker {
171*48a54d36SAndroid Build Coastguard Worker
172*48a54d36SAndroid Build Coastguard Worker dlog( kDebugLevelTrace, "FinalRelease()\n" );
173*48a54d36SAndroid Build Coastguard Worker
174*48a54d36SAndroid Build Coastguard Worker Stop();
175*48a54d36SAndroid Build Coastguard Worker
176*48a54d36SAndroid Build Coastguard Worker }
177*48a54d36SAndroid Build Coastguard Worker
178*48a54d36SAndroid Build Coastguard Worker
179*48a54d36SAndroid Build Coastguard Worker
180*48a54d36SAndroid Build Coastguard Worker
181*48a54d36SAndroid Build Coastguard Worker
EnumerateDomains(DNSSDFlags flags,ULONG ifIndex,IDNSSDEventManager * eventManager,IDNSSDService ** service)182*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::EnumerateDomains(DNSSDFlags flags, ULONG ifIndex, IDNSSDEventManager *eventManager, IDNSSDService **service)
183*48a54d36SAndroid Build Coastguard Worker
184*48a54d36SAndroid Build Coastguard Worker {
185*48a54d36SAndroid Build Coastguard Worker
186*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * object = NULL;
187*48a54d36SAndroid Build Coastguard Worker
188*48a54d36SAndroid Build Coastguard Worker DNSServiceRef subord = NULL;
189*48a54d36SAndroid Build Coastguard Worker
190*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
191*48a54d36SAndroid Build Coastguard Worker
192*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
193*48a54d36SAndroid Build Coastguard Worker
194*48a54d36SAndroid Build Coastguard Worker
195*48a54d36SAndroid Build Coastguard Worker
196*48a54d36SAndroid Build Coastguard Worker check( m_primary );
197*48a54d36SAndroid Build Coastguard Worker
198*48a54d36SAndroid Build Coastguard Worker
199*48a54d36SAndroid Build Coastguard Worker
200*48a54d36SAndroid Build Coastguard Worker // Initialize
201*48a54d36SAndroid Build Coastguard Worker
202*48a54d36SAndroid Build Coastguard Worker *service = NULL;
203*48a54d36SAndroid Build Coastguard Worker
204*48a54d36SAndroid Build Coastguard Worker
205*48a54d36SAndroid Build Coastguard Worker
206*48a54d36SAndroid Build Coastguard Worker try
207*48a54d36SAndroid Build Coastguard Worker
208*48a54d36SAndroid Build Coastguard Worker {
209*48a54d36SAndroid Build Coastguard Worker
210*48a54d36SAndroid Build Coastguard Worker object = new CComObject<CDNSSDService>();
211*48a54d36SAndroid Build Coastguard Worker
212*48a54d36SAndroid Build Coastguard Worker }
213*48a54d36SAndroid Build Coastguard Worker
214*48a54d36SAndroid Build Coastguard Worker catch ( ... )
215*48a54d36SAndroid Build Coastguard Worker
216*48a54d36SAndroid Build Coastguard Worker {
217*48a54d36SAndroid Build Coastguard Worker
218*48a54d36SAndroid Build Coastguard Worker object = NULL;
219*48a54d36SAndroid Build Coastguard Worker
220*48a54d36SAndroid Build Coastguard Worker }
221*48a54d36SAndroid Build Coastguard Worker
222*48a54d36SAndroid Build Coastguard Worker
223*48a54d36SAndroid Build Coastguard Worker
224*48a54d36SAndroid Build Coastguard Worker require_action( object != NULL, exit, err = kDNSServiceErr_NoMemory );
225*48a54d36SAndroid Build Coastguard Worker
226*48a54d36SAndroid Build Coastguard Worker object->AddRef();
227*48a54d36SAndroid Build Coastguard Worker
228*48a54d36SAndroid Build Coastguard Worker
229*48a54d36SAndroid Build Coastguard Worker
230*48a54d36SAndroid Build Coastguard Worker subord = m_primary;
231*48a54d36SAndroid Build Coastguard Worker
232*48a54d36SAndroid Build Coastguard Worker err = DNSServiceEnumerateDomains( &subord, flags | kDNSServiceFlagsShareConnection, ifIndex, ( DNSServiceDomainEnumReply ) &DomainEnumReply, object );
233*48a54d36SAndroid Build Coastguard Worker
234*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
235*48a54d36SAndroid Build Coastguard Worker
236*48a54d36SAndroid Build Coastguard Worker
237*48a54d36SAndroid Build Coastguard Worker
238*48a54d36SAndroid Build Coastguard Worker object->SetPrimaryRef( m_primary );
239*48a54d36SAndroid Build Coastguard Worker
240*48a54d36SAndroid Build Coastguard Worker object->SetSubordRef( subord );
241*48a54d36SAndroid Build Coastguard Worker
242*48a54d36SAndroid Build Coastguard Worker object->SetEventManager( eventManager );
243*48a54d36SAndroid Build Coastguard Worker
244*48a54d36SAndroid Build Coastguard Worker
245*48a54d36SAndroid Build Coastguard Worker
246*48a54d36SAndroid Build Coastguard Worker *service = object;
247*48a54d36SAndroid Build Coastguard Worker
248*48a54d36SAndroid Build Coastguard Worker
249*48a54d36SAndroid Build Coastguard Worker
250*48a54d36SAndroid Build Coastguard Worker exit:
251*48a54d36SAndroid Build Coastguard Worker
252*48a54d36SAndroid Build Coastguard Worker
253*48a54d36SAndroid Build Coastguard Worker
254*48a54d36SAndroid Build Coastguard Worker if ( err && object )
255*48a54d36SAndroid Build Coastguard Worker
256*48a54d36SAndroid Build Coastguard Worker {
257*48a54d36SAndroid Build Coastguard Worker
258*48a54d36SAndroid Build Coastguard Worker object->Release();
259*48a54d36SAndroid Build Coastguard Worker
260*48a54d36SAndroid Build Coastguard Worker }
261*48a54d36SAndroid Build Coastguard Worker
262*48a54d36SAndroid Build Coastguard Worker
263*48a54d36SAndroid Build Coastguard Worker
264*48a54d36SAndroid Build Coastguard Worker return err;
265*48a54d36SAndroid Build Coastguard Worker
266*48a54d36SAndroid Build Coastguard Worker }
267*48a54d36SAndroid Build Coastguard Worker
268*48a54d36SAndroid Build Coastguard Worker
269*48a54d36SAndroid Build Coastguard Worker
270*48a54d36SAndroid Build Coastguard Worker
271*48a54d36SAndroid Build Coastguard Worker
Browse(DNSSDFlags flags,ULONG ifIndex,BSTR regtype,BSTR domain,IDNSSDEventManager * eventManager,IDNSSDService ** service)272*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::Browse(DNSSDFlags flags, ULONG ifIndex, BSTR regtype, BSTR domain, IDNSSDEventManager* eventManager, IDNSSDService** service )
273*48a54d36SAndroid Build Coastguard Worker
274*48a54d36SAndroid Build Coastguard Worker {
275*48a54d36SAndroid Build Coastguard Worker
276*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * object = NULL;
277*48a54d36SAndroid Build Coastguard Worker
278*48a54d36SAndroid Build Coastguard Worker std::string regtypeUTF8;
279*48a54d36SAndroid Build Coastguard Worker
280*48a54d36SAndroid Build Coastguard Worker std::string domainUTF8;
281*48a54d36SAndroid Build Coastguard Worker
282*48a54d36SAndroid Build Coastguard Worker DNSServiceRef subord = NULL;
283*48a54d36SAndroid Build Coastguard Worker
284*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
285*48a54d36SAndroid Build Coastguard Worker
286*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
287*48a54d36SAndroid Build Coastguard Worker
288*48a54d36SAndroid Build Coastguard Worker BOOL ok;
289*48a54d36SAndroid Build Coastguard Worker
290*48a54d36SAndroid Build Coastguard Worker
291*48a54d36SAndroid Build Coastguard Worker
292*48a54d36SAndroid Build Coastguard Worker check( m_primary );
293*48a54d36SAndroid Build Coastguard Worker
294*48a54d36SAndroid Build Coastguard Worker
295*48a54d36SAndroid Build Coastguard Worker
296*48a54d36SAndroid Build Coastguard Worker // Initialize
297*48a54d36SAndroid Build Coastguard Worker
298*48a54d36SAndroid Build Coastguard Worker *service = NULL;
299*48a54d36SAndroid Build Coastguard Worker
300*48a54d36SAndroid Build Coastguard Worker
301*48a54d36SAndroid Build Coastguard Worker
302*48a54d36SAndroid Build Coastguard Worker // Convert BSTR params to utf8
303*48a54d36SAndroid Build Coastguard Worker
304*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( regtype, regtypeUTF8 );
305*48a54d36SAndroid Build Coastguard Worker
306*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
307*48a54d36SAndroid Build Coastguard Worker
308*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( domain, domainUTF8 );
309*48a54d36SAndroid Build Coastguard Worker
310*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
311*48a54d36SAndroid Build Coastguard Worker
312*48a54d36SAndroid Build Coastguard Worker
313*48a54d36SAndroid Build Coastguard Worker
314*48a54d36SAndroid Build Coastguard Worker try
315*48a54d36SAndroid Build Coastguard Worker
316*48a54d36SAndroid Build Coastguard Worker {
317*48a54d36SAndroid Build Coastguard Worker
318*48a54d36SAndroid Build Coastguard Worker object = new CComObject<CDNSSDService>();
319*48a54d36SAndroid Build Coastguard Worker
320*48a54d36SAndroid Build Coastguard Worker }
321*48a54d36SAndroid Build Coastguard Worker
322*48a54d36SAndroid Build Coastguard Worker catch ( ... )
323*48a54d36SAndroid Build Coastguard Worker
324*48a54d36SAndroid Build Coastguard Worker {
325*48a54d36SAndroid Build Coastguard Worker
326*48a54d36SAndroid Build Coastguard Worker object = NULL;
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 require_action( object != NULL, exit, err = kDNSServiceErr_NoMemory );
333*48a54d36SAndroid Build Coastguard Worker
334*48a54d36SAndroid Build Coastguard Worker object->AddRef();
335*48a54d36SAndroid Build Coastguard Worker
336*48a54d36SAndroid Build Coastguard Worker
337*48a54d36SAndroid Build Coastguard Worker
338*48a54d36SAndroid Build Coastguard Worker subord = m_primary;
339*48a54d36SAndroid Build Coastguard Worker
340*48a54d36SAndroid Build Coastguard Worker err = DNSServiceBrowse( &subord, flags | kDNSServiceFlagsShareConnection, ifIndex, regtypeUTF8.c_str(), ( domainUTF8.size() > 0 ) ? domainUTF8.c_str() : NULL, ( DNSServiceBrowseReply ) &BrowseReply, object );
341*48a54d36SAndroid Build Coastguard Worker
342*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
343*48a54d36SAndroid Build Coastguard Worker
344*48a54d36SAndroid Build Coastguard Worker
345*48a54d36SAndroid Build Coastguard Worker
346*48a54d36SAndroid Build Coastguard Worker object->SetPrimaryRef( m_primary );
347*48a54d36SAndroid Build Coastguard Worker
348*48a54d36SAndroid Build Coastguard Worker object->SetSubordRef( subord );
349*48a54d36SAndroid Build Coastguard Worker
350*48a54d36SAndroid Build Coastguard Worker object->SetEventManager( eventManager );
351*48a54d36SAndroid Build Coastguard Worker
352*48a54d36SAndroid Build Coastguard Worker
353*48a54d36SAndroid Build Coastguard Worker
354*48a54d36SAndroid Build Coastguard Worker *service = object;
355*48a54d36SAndroid Build Coastguard Worker
356*48a54d36SAndroid Build Coastguard Worker
357*48a54d36SAndroid Build Coastguard Worker
358*48a54d36SAndroid Build Coastguard Worker exit:
359*48a54d36SAndroid Build Coastguard Worker
360*48a54d36SAndroid Build Coastguard Worker
361*48a54d36SAndroid Build Coastguard Worker
362*48a54d36SAndroid Build Coastguard Worker if ( err && object )
363*48a54d36SAndroid Build Coastguard Worker
364*48a54d36SAndroid Build Coastguard Worker {
365*48a54d36SAndroid Build Coastguard Worker
366*48a54d36SAndroid Build Coastguard Worker object->Release();
367*48a54d36SAndroid Build Coastguard Worker
368*48a54d36SAndroid Build Coastguard Worker }
369*48a54d36SAndroid Build Coastguard Worker
370*48a54d36SAndroid Build Coastguard Worker
371*48a54d36SAndroid Build Coastguard Worker
372*48a54d36SAndroid Build Coastguard Worker return err;
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
379*48a54d36SAndroid Build Coastguard Worker
Resolve(DNSSDFlags flags,ULONG ifIndex,BSTR serviceName,BSTR regType,BSTR domain,IDNSSDEventManager * eventManager,IDNSSDService ** service)380*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::Resolve(DNSSDFlags flags, ULONG ifIndex, BSTR serviceName, BSTR regType, BSTR domain, IDNSSDEventManager* eventManager, IDNSSDService** service)
381*48a54d36SAndroid Build Coastguard Worker
382*48a54d36SAndroid Build Coastguard Worker {
383*48a54d36SAndroid Build Coastguard Worker
384*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * object = NULL;
385*48a54d36SAndroid Build Coastguard Worker
386*48a54d36SAndroid Build Coastguard Worker std::string serviceNameUTF8;
387*48a54d36SAndroid Build Coastguard Worker
388*48a54d36SAndroid Build Coastguard Worker std::string regTypeUTF8;
389*48a54d36SAndroid Build Coastguard Worker
390*48a54d36SAndroid Build Coastguard Worker std::string domainUTF8;
391*48a54d36SAndroid Build Coastguard Worker
392*48a54d36SAndroid Build Coastguard Worker DNSServiceRef subord = NULL;
393*48a54d36SAndroid Build Coastguard Worker
394*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
395*48a54d36SAndroid Build Coastguard Worker
396*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
397*48a54d36SAndroid Build Coastguard Worker
398*48a54d36SAndroid Build Coastguard Worker BOOL ok;
399*48a54d36SAndroid Build Coastguard Worker
400*48a54d36SAndroid Build Coastguard Worker
401*48a54d36SAndroid Build Coastguard Worker
402*48a54d36SAndroid Build Coastguard Worker check( m_primary );
403*48a54d36SAndroid Build Coastguard Worker
404*48a54d36SAndroid Build Coastguard Worker
405*48a54d36SAndroid Build Coastguard Worker
406*48a54d36SAndroid Build Coastguard Worker // Initialize
407*48a54d36SAndroid Build Coastguard Worker
408*48a54d36SAndroid Build Coastguard Worker *service = NULL;
409*48a54d36SAndroid Build Coastguard Worker
410*48a54d36SAndroid Build Coastguard Worker
411*48a54d36SAndroid Build Coastguard Worker
412*48a54d36SAndroid Build Coastguard Worker // Convert BSTR params to utf8
413*48a54d36SAndroid Build Coastguard Worker
414*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( serviceName, serviceNameUTF8 );
415*48a54d36SAndroid Build Coastguard Worker
416*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
417*48a54d36SAndroid Build Coastguard Worker
418*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( regType, regTypeUTF8 );
419*48a54d36SAndroid Build Coastguard Worker
420*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
421*48a54d36SAndroid Build Coastguard Worker
422*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( domain, domainUTF8 );
423*48a54d36SAndroid Build Coastguard Worker
424*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
425*48a54d36SAndroid Build Coastguard Worker
426*48a54d36SAndroid Build Coastguard Worker
427*48a54d36SAndroid Build Coastguard Worker
428*48a54d36SAndroid Build Coastguard Worker try
429*48a54d36SAndroid Build Coastguard Worker
430*48a54d36SAndroid Build Coastguard Worker {
431*48a54d36SAndroid Build Coastguard Worker
432*48a54d36SAndroid Build Coastguard Worker object = new CComObject<CDNSSDService>();
433*48a54d36SAndroid Build Coastguard Worker
434*48a54d36SAndroid Build Coastguard Worker }
435*48a54d36SAndroid Build Coastguard Worker
436*48a54d36SAndroid Build Coastguard Worker catch ( ... )
437*48a54d36SAndroid Build Coastguard Worker
438*48a54d36SAndroid Build Coastguard Worker {
439*48a54d36SAndroid Build Coastguard Worker
440*48a54d36SAndroid Build Coastguard Worker object = NULL;
441*48a54d36SAndroid Build Coastguard Worker
442*48a54d36SAndroid Build Coastguard Worker }
443*48a54d36SAndroid Build Coastguard Worker
444*48a54d36SAndroid Build Coastguard Worker
445*48a54d36SAndroid Build Coastguard Worker
446*48a54d36SAndroid Build Coastguard Worker require_action( object != NULL, exit, err = kDNSServiceErr_NoMemory );
447*48a54d36SAndroid Build Coastguard Worker
448*48a54d36SAndroid Build Coastguard Worker object->AddRef();
449*48a54d36SAndroid Build Coastguard Worker
450*48a54d36SAndroid Build Coastguard Worker
451*48a54d36SAndroid Build Coastguard Worker
452*48a54d36SAndroid Build Coastguard Worker subord = m_primary;
453*48a54d36SAndroid Build Coastguard Worker
454*48a54d36SAndroid Build Coastguard Worker err = DNSServiceResolve( &subord, flags | kDNSServiceFlagsShareConnection, ifIndex, serviceNameUTF8.c_str(), regTypeUTF8.c_str(), domainUTF8.c_str(), ( DNSServiceResolveReply ) &ResolveReply, object );
455*48a54d36SAndroid Build Coastguard Worker
456*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
457*48a54d36SAndroid Build Coastguard Worker
458*48a54d36SAndroid Build Coastguard Worker
459*48a54d36SAndroid Build Coastguard Worker
460*48a54d36SAndroid Build Coastguard Worker object->SetPrimaryRef( m_primary );
461*48a54d36SAndroid Build Coastguard Worker
462*48a54d36SAndroid Build Coastguard Worker object->SetSubordRef( subord );
463*48a54d36SAndroid Build Coastguard Worker
464*48a54d36SAndroid Build Coastguard Worker object->SetEventManager( eventManager );
465*48a54d36SAndroid Build Coastguard Worker
466*48a54d36SAndroid Build Coastguard Worker
467*48a54d36SAndroid Build Coastguard Worker
468*48a54d36SAndroid Build Coastguard Worker *service = object;
469*48a54d36SAndroid Build Coastguard Worker
470*48a54d36SAndroid Build Coastguard Worker
471*48a54d36SAndroid Build Coastguard Worker
472*48a54d36SAndroid Build Coastguard Worker exit:
473*48a54d36SAndroid Build Coastguard Worker
474*48a54d36SAndroid Build Coastguard Worker
475*48a54d36SAndroid Build Coastguard Worker
476*48a54d36SAndroid Build Coastguard Worker if ( err && object )
477*48a54d36SAndroid Build Coastguard Worker
478*48a54d36SAndroid Build Coastguard Worker {
479*48a54d36SAndroid Build Coastguard Worker
480*48a54d36SAndroid Build Coastguard Worker object->Release();
481*48a54d36SAndroid Build Coastguard Worker
482*48a54d36SAndroid Build Coastguard Worker }
483*48a54d36SAndroid Build Coastguard Worker
484*48a54d36SAndroid Build Coastguard Worker
485*48a54d36SAndroid Build Coastguard Worker
486*48a54d36SAndroid Build Coastguard Worker return err;
487*48a54d36SAndroid Build Coastguard Worker
488*48a54d36SAndroid Build Coastguard Worker }
489*48a54d36SAndroid Build Coastguard Worker
490*48a54d36SAndroid Build Coastguard Worker
491*48a54d36SAndroid Build Coastguard Worker
492*48a54d36SAndroid Build Coastguard Worker
493*48a54d36SAndroid Build Coastguard Worker
Register(DNSSDFlags flags,ULONG ifIndex,BSTR serviceName,BSTR regType,BSTR domain,BSTR host,USHORT port,ITXTRecord * record,IDNSSDEventManager * eventManager,IDNSSDService ** service)494*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::Register(DNSSDFlags flags, ULONG ifIndex, BSTR serviceName, BSTR regType, BSTR domain, BSTR host, USHORT port, ITXTRecord *record, IDNSSDEventManager *eventManager, IDNSSDService **service)
495*48a54d36SAndroid Build Coastguard Worker
496*48a54d36SAndroid Build Coastguard Worker {
497*48a54d36SAndroid Build Coastguard Worker
498*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * object = NULL;
499*48a54d36SAndroid Build Coastguard Worker
500*48a54d36SAndroid Build Coastguard Worker std::string serviceNameUTF8;
501*48a54d36SAndroid Build Coastguard Worker
502*48a54d36SAndroid Build Coastguard Worker std::string regTypeUTF8;
503*48a54d36SAndroid Build Coastguard Worker
504*48a54d36SAndroid Build Coastguard Worker std::string domainUTF8;
505*48a54d36SAndroid Build Coastguard Worker
506*48a54d36SAndroid Build Coastguard Worker std::string hostUTF8;
507*48a54d36SAndroid Build Coastguard Worker
508*48a54d36SAndroid Build Coastguard Worker const void * txtRecord = NULL;
509*48a54d36SAndroid Build Coastguard Worker
510*48a54d36SAndroid Build Coastguard Worker uint16_t txtLen = 0;
511*48a54d36SAndroid Build Coastguard Worker
512*48a54d36SAndroid Build Coastguard Worker DNSServiceRef subord = NULL;
513*48a54d36SAndroid Build Coastguard Worker
514*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
515*48a54d36SAndroid Build Coastguard Worker
516*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
517*48a54d36SAndroid Build Coastguard Worker
518*48a54d36SAndroid Build Coastguard Worker BOOL ok;
519*48a54d36SAndroid Build Coastguard Worker
520*48a54d36SAndroid Build Coastguard Worker
521*48a54d36SAndroid Build Coastguard Worker
522*48a54d36SAndroid Build Coastguard Worker check( m_primary );
523*48a54d36SAndroid Build Coastguard Worker
524*48a54d36SAndroid Build Coastguard Worker
525*48a54d36SAndroid Build Coastguard Worker
526*48a54d36SAndroid Build Coastguard Worker // Initialize
527*48a54d36SAndroid Build Coastguard Worker
528*48a54d36SAndroid Build Coastguard Worker *service = NULL;
529*48a54d36SAndroid Build Coastguard Worker
530*48a54d36SAndroid Build Coastguard Worker
531*48a54d36SAndroid Build Coastguard Worker
532*48a54d36SAndroid Build Coastguard Worker // Convert BSTR params to utf8
533*48a54d36SAndroid Build Coastguard Worker
534*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( serviceName, serviceNameUTF8 );
535*48a54d36SAndroid Build Coastguard Worker
536*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
537*48a54d36SAndroid Build Coastguard Worker
538*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( regType, regTypeUTF8 );
539*48a54d36SAndroid Build Coastguard Worker
540*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
541*48a54d36SAndroid Build Coastguard Worker
542*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( domain, domainUTF8 );
543*48a54d36SAndroid Build Coastguard Worker
544*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
545*48a54d36SAndroid Build Coastguard Worker
546*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( host, hostUTF8 );
547*48a54d36SAndroid Build Coastguard Worker
548*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
549*48a54d36SAndroid Build Coastguard Worker
550*48a54d36SAndroid Build Coastguard Worker
551*48a54d36SAndroid Build Coastguard Worker
552*48a54d36SAndroid Build Coastguard Worker try
553*48a54d36SAndroid Build Coastguard Worker
554*48a54d36SAndroid Build Coastguard Worker {
555*48a54d36SAndroid Build Coastguard Worker
556*48a54d36SAndroid Build Coastguard Worker object = new CComObject<CDNSSDService>();
557*48a54d36SAndroid Build Coastguard Worker
558*48a54d36SAndroid Build Coastguard Worker }
559*48a54d36SAndroid Build Coastguard Worker
560*48a54d36SAndroid Build Coastguard Worker catch ( ... )
561*48a54d36SAndroid Build Coastguard Worker
562*48a54d36SAndroid Build Coastguard Worker {
563*48a54d36SAndroid Build Coastguard Worker
564*48a54d36SAndroid Build Coastguard Worker object = NULL;
565*48a54d36SAndroid Build Coastguard Worker
566*48a54d36SAndroid Build Coastguard Worker }
567*48a54d36SAndroid Build Coastguard Worker
568*48a54d36SAndroid Build Coastguard Worker
569*48a54d36SAndroid Build Coastguard Worker
570*48a54d36SAndroid Build Coastguard Worker require_action( object != NULL, exit, err = kDNSServiceErr_NoMemory );
571*48a54d36SAndroid Build Coastguard Worker
572*48a54d36SAndroid Build Coastguard Worker object->AddRef();
573*48a54d36SAndroid Build Coastguard Worker
574*48a54d36SAndroid Build Coastguard Worker
575*48a54d36SAndroid Build Coastguard Worker
576*48a54d36SAndroid Build Coastguard Worker if ( record )
577*48a54d36SAndroid Build Coastguard Worker
578*48a54d36SAndroid Build Coastguard Worker {
579*48a54d36SAndroid Build Coastguard Worker
580*48a54d36SAndroid Build Coastguard Worker CComObject< CTXTRecord > * realTXTRecord;
581*48a54d36SAndroid Build Coastguard Worker
582*48a54d36SAndroid Build Coastguard Worker
583*48a54d36SAndroid Build Coastguard Worker
584*48a54d36SAndroid Build Coastguard Worker realTXTRecord = ( CComObject< CTXTRecord >* ) record;
585*48a54d36SAndroid Build Coastguard Worker
586*48a54d36SAndroid Build Coastguard Worker
587*48a54d36SAndroid Build Coastguard Worker
588*48a54d36SAndroid Build Coastguard Worker txtRecord = realTXTRecord->GetBytes();
589*48a54d36SAndroid Build Coastguard Worker
590*48a54d36SAndroid Build Coastguard Worker txtLen = realTXTRecord->GetLen();
591*48a54d36SAndroid Build Coastguard Worker
592*48a54d36SAndroid Build Coastguard Worker }
593*48a54d36SAndroid Build Coastguard Worker
594*48a54d36SAndroid Build Coastguard Worker
595*48a54d36SAndroid Build Coastguard Worker
596*48a54d36SAndroid Build Coastguard Worker subord = m_primary;
597*48a54d36SAndroid Build Coastguard Worker
598*48a54d36SAndroid Build Coastguard Worker err = DNSServiceRegister( &subord, flags | kDNSServiceFlagsShareConnection, ifIndex, serviceNameUTF8.c_str(), regTypeUTF8.c_str(), ( domainUTF8.size() > 0 ) ? domainUTF8.c_str() : NULL, hostUTF8.c_str(), htons( port ), txtLen, txtRecord, ( DNSServiceRegisterReply ) &RegisterReply, object );
599*48a54d36SAndroid Build Coastguard Worker
600*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
601*48a54d36SAndroid Build Coastguard Worker
602*48a54d36SAndroid Build Coastguard Worker
603*48a54d36SAndroid Build Coastguard Worker
604*48a54d36SAndroid Build Coastguard Worker object->SetPrimaryRef( m_primary );
605*48a54d36SAndroid Build Coastguard Worker
606*48a54d36SAndroid Build Coastguard Worker object->SetSubordRef( subord );
607*48a54d36SAndroid Build Coastguard Worker
608*48a54d36SAndroid Build Coastguard Worker object->SetEventManager( eventManager );
609*48a54d36SAndroid Build Coastguard Worker
610*48a54d36SAndroid Build Coastguard Worker
611*48a54d36SAndroid Build Coastguard Worker
612*48a54d36SAndroid Build Coastguard Worker *service = object;
613*48a54d36SAndroid Build Coastguard Worker
614*48a54d36SAndroid Build Coastguard Worker
615*48a54d36SAndroid Build Coastguard Worker
616*48a54d36SAndroid Build Coastguard Worker exit:
617*48a54d36SAndroid Build Coastguard Worker
618*48a54d36SAndroid Build Coastguard Worker
619*48a54d36SAndroid Build Coastguard Worker
620*48a54d36SAndroid Build Coastguard Worker if ( err && object )
621*48a54d36SAndroid Build Coastguard Worker
622*48a54d36SAndroid Build Coastguard Worker {
623*48a54d36SAndroid Build Coastguard Worker
624*48a54d36SAndroid Build Coastguard Worker object->Release();
625*48a54d36SAndroid Build Coastguard Worker
626*48a54d36SAndroid Build Coastguard Worker }
627*48a54d36SAndroid Build Coastguard Worker
628*48a54d36SAndroid Build Coastguard Worker
629*48a54d36SAndroid Build Coastguard Worker
630*48a54d36SAndroid Build Coastguard Worker return err;
631*48a54d36SAndroid Build Coastguard Worker
632*48a54d36SAndroid Build Coastguard Worker }
633*48a54d36SAndroid Build Coastguard Worker
634*48a54d36SAndroid Build Coastguard Worker
635*48a54d36SAndroid Build Coastguard Worker
636*48a54d36SAndroid Build Coastguard Worker
637*48a54d36SAndroid Build Coastguard Worker
QueryRecord(DNSSDFlags flags,ULONG ifIndex,BSTR fullname,DNSSDRRType rrtype,DNSSDRRClass rrclass,IDNSSDEventManager * eventManager,IDNSSDService ** service)638*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::QueryRecord(DNSSDFlags flags, ULONG ifIndex, BSTR fullname, DNSSDRRType rrtype, DNSSDRRClass rrclass, IDNSSDEventManager *eventManager, IDNSSDService **service)
639*48a54d36SAndroid Build Coastguard Worker
640*48a54d36SAndroid Build Coastguard Worker {
641*48a54d36SAndroid Build Coastguard Worker
642*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * object = NULL;
643*48a54d36SAndroid Build Coastguard Worker
644*48a54d36SAndroid Build Coastguard Worker DNSServiceRef subord = NULL;
645*48a54d36SAndroid Build Coastguard Worker
646*48a54d36SAndroid Build Coastguard Worker std::string fullNameUTF8;
647*48a54d36SAndroid Build Coastguard Worker
648*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
649*48a54d36SAndroid Build Coastguard Worker
650*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
651*48a54d36SAndroid Build Coastguard Worker
652*48a54d36SAndroid Build Coastguard Worker BOOL ok;
653*48a54d36SAndroid Build Coastguard Worker
654*48a54d36SAndroid Build Coastguard Worker
655*48a54d36SAndroid Build Coastguard Worker
656*48a54d36SAndroid Build Coastguard Worker check( m_primary );
657*48a54d36SAndroid Build Coastguard Worker
658*48a54d36SAndroid Build Coastguard Worker
659*48a54d36SAndroid Build Coastguard Worker
660*48a54d36SAndroid Build Coastguard Worker // Initialize
661*48a54d36SAndroid Build Coastguard Worker
662*48a54d36SAndroid Build Coastguard Worker *service = NULL;
663*48a54d36SAndroid Build Coastguard Worker
664*48a54d36SAndroid Build Coastguard Worker
665*48a54d36SAndroid Build Coastguard Worker
666*48a54d36SAndroid Build Coastguard Worker // Convert BSTR params to utf8
667*48a54d36SAndroid Build Coastguard Worker
668*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( fullname, fullNameUTF8 );
669*48a54d36SAndroid Build Coastguard Worker
670*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
671*48a54d36SAndroid Build Coastguard Worker
672*48a54d36SAndroid Build Coastguard Worker
673*48a54d36SAndroid Build Coastguard Worker
674*48a54d36SAndroid Build Coastguard Worker try
675*48a54d36SAndroid Build Coastguard Worker
676*48a54d36SAndroid Build Coastguard Worker {
677*48a54d36SAndroid Build Coastguard Worker
678*48a54d36SAndroid Build Coastguard Worker object = new CComObject<CDNSSDService>();
679*48a54d36SAndroid Build Coastguard Worker
680*48a54d36SAndroid Build Coastguard Worker }
681*48a54d36SAndroid Build Coastguard Worker
682*48a54d36SAndroid Build Coastguard Worker catch ( ... )
683*48a54d36SAndroid Build Coastguard Worker
684*48a54d36SAndroid Build Coastguard Worker {
685*48a54d36SAndroid Build Coastguard Worker
686*48a54d36SAndroid Build Coastguard Worker object = NULL;
687*48a54d36SAndroid Build Coastguard Worker
688*48a54d36SAndroid Build Coastguard Worker }
689*48a54d36SAndroid Build Coastguard Worker
690*48a54d36SAndroid Build Coastguard Worker
691*48a54d36SAndroid Build Coastguard Worker
692*48a54d36SAndroid Build Coastguard Worker require_action( object != NULL, exit, err = kDNSServiceErr_NoMemory );
693*48a54d36SAndroid Build Coastguard Worker
694*48a54d36SAndroid Build Coastguard Worker object->AddRef();
695*48a54d36SAndroid Build Coastguard Worker
696*48a54d36SAndroid Build Coastguard Worker
697*48a54d36SAndroid Build Coastguard Worker
698*48a54d36SAndroid Build Coastguard Worker subord = m_primary;
699*48a54d36SAndroid Build Coastguard Worker
700*48a54d36SAndroid Build Coastguard Worker err = DNSServiceQueryRecord( &subord, flags | kDNSServiceFlagsShareConnection, ifIndex, fullNameUTF8.c_str(), ( uint16_t ) rrtype, ( uint16_t ) rrclass, ( DNSServiceQueryRecordReply ) &QueryRecordReply, object );
701*48a54d36SAndroid Build Coastguard Worker
702*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
703*48a54d36SAndroid Build Coastguard Worker
704*48a54d36SAndroid Build Coastguard Worker
705*48a54d36SAndroid Build Coastguard Worker
706*48a54d36SAndroid Build Coastguard Worker object->SetPrimaryRef( m_primary );
707*48a54d36SAndroid Build Coastguard Worker
708*48a54d36SAndroid Build Coastguard Worker object->SetSubordRef( subord );
709*48a54d36SAndroid Build Coastguard Worker
710*48a54d36SAndroid Build Coastguard Worker object->SetEventManager( eventManager );
711*48a54d36SAndroid Build Coastguard Worker
712*48a54d36SAndroid Build Coastguard Worker
713*48a54d36SAndroid Build Coastguard Worker
714*48a54d36SAndroid Build Coastguard Worker *service = object;
715*48a54d36SAndroid Build Coastguard Worker
716*48a54d36SAndroid Build Coastguard Worker
717*48a54d36SAndroid Build Coastguard Worker
718*48a54d36SAndroid Build Coastguard Worker exit:
719*48a54d36SAndroid Build Coastguard Worker
720*48a54d36SAndroid Build Coastguard Worker
721*48a54d36SAndroid Build Coastguard Worker
722*48a54d36SAndroid Build Coastguard Worker if ( err && object )
723*48a54d36SAndroid Build Coastguard Worker
724*48a54d36SAndroid Build Coastguard Worker {
725*48a54d36SAndroid Build Coastguard Worker
726*48a54d36SAndroid Build Coastguard Worker object->Release();
727*48a54d36SAndroid Build Coastguard Worker
728*48a54d36SAndroid Build Coastguard Worker }
729*48a54d36SAndroid Build Coastguard Worker
730*48a54d36SAndroid Build Coastguard Worker
731*48a54d36SAndroid Build Coastguard Worker
732*48a54d36SAndroid Build Coastguard Worker return err;
733*48a54d36SAndroid Build Coastguard Worker
734*48a54d36SAndroid Build Coastguard Worker }
735*48a54d36SAndroid Build Coastguard Worker
736*48a54d36SAndroid Build Coastguard Worker
737*48a54d36SAndroid Build Coastguard Worker
738*48a54d36SAndroid Build Coastguard Worker
739*48a54d36SAndroid Build Coastguard Worker
RegisterRecord(DNSSDFlags flags,ULONG ifIndex,BSTR fullName,DNSSDRRType rrtype,DNSSDRRClass rrclass,VARIANT rdata,ULONG ttl,IDNSSDEventManager * eventManager,IDNSSDRecord ** record)740*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::RegisterRecord(DNSSDFlags flags, ULONG ifIndex, BSTR fullName, DNSSDRRType rrtype, DNSSDRRClass rrclass, VARIANT rdata, ULONG ttl, IDNSSDEventManager* eventManager, IDNSSDRecord** record)
741*48a54d36SAndroid Build Coastguard Worker
742*48a54d36SAndroid Build Coastguard Worker {
743*48a54d36SAndroid Build Coastguard Worker
744*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDRecord> * object = NULL;
745*48a54d36SAndroid Build Coastguard Worker
746*48a54d36SAndroid Build Coastguard Worker DNSRecordRef rref = NULL;
747*48a54d36SAndroid Build Coastguard Worker
748*48a54d36SAndroid Build Coastguard Worker std::string fullNameUTF8;
749*48a54d36SAndroid Build Coastguard Worker
750*48a54d36SAndroid Build Coastguard Worker std::vector< BYTE > byteArray;
751*48a54d36SAndroid Build Coastguard Worker
752*48a54d36SAndroid Build Coastguard Worker const void * byteArrayPtr = NULL;
753*48a54d36SAndroid Build Coastguard Worker
754*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
755*48a54d36SAndroid Build Coastguard Worker
756*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
757*48a54d36SAndroid Build Coastguard Worker
758*48a54d36SAndroid Build Coastguard Worker BOOL ok;
759*48a54d36SAndroid Build Coastguard Worker
760*48a54d36SAndroid Build Coastguard Worker
761*48a54d36SAndroid Build Coastguard Worker
762*48a54d36SAndroid Build Coastguard Worker check( m_primary );
763*48a54d36SAndroid Build Coastguard Worker
764*48a54d36SAndroid Build Coastguard Worker
765*48a54d36SAndroid Build Coastguard Worker
766*48a54d36SAndroid Build Coastguard Worker // Initialize
767*48a54d36SAndroid Build Coastguard Worker
768*48a54d36SAndroid Build Coastguard Worker *object = NULL;
769*48a54d36SAndroid Build Coastguard Worker
770*48a54d36SAndroid Build Coastguard Worker
771*48a54d36SAndroid Build Coastguard Worker
772*48a54d36SAndroid Build Coastguard Worker // Convert BSTR params to utf8
773*48a54d36SAndroid Build Coastguard Worker
774*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( fullName, fullNameUTF8 );
775*48a54d36SAndroid Build Coastguard Worker
776*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
777*48a54d36SAndroid Build Coastguard Worker
778*48a54d36SAndroid Build Coastguard Worker
779*48a54d36SAndroid Build Coastguard Worker
780*48a54d36SAndroid Build Coastguard Worker // Convert the VARIANT
781*48a54d36SAndroid Build Coastguard Worker
782*48a54d36SAndroid Build Coastguard Worker ok = VariantToByteArray( &rdata, byteArray );
783*48a54d36SAndroid Build Coastguard Worker
784*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
785*48a54d36SAndroid Build Coastguard Worker
786*48a54d36SAndroid Build Coastguard Worker
787*48a54d36SAndroid Build Coastguard Worker
788*48a54d36SAndroid Build Coastguard Worker try
789*48a54d36SAndroid Build Coastguard Worker
790*48a54d36SAndroid Build Coastguard Worker {
791*48a54d36SAndroid Build Coastguard Worker
792*48a54d36SAndroid Build Coastguard Worker object = new CComObject<CDNSSDRecord>();
793*48a54d36SAndroid Build Coastguard Worker
794*48a54d36SAndroid Build Coastguard Worker }
795*48a54d36SAndroid Build Coastguard Worker
796*48a54d36SAndroid Build Coastguard Worker catch ( ... )
797*48a54d36SAndroid Build Coastguard Worker
798*48a54d36SAndroid Build Coastguard Worker {
799*48a54d36SAndroid Build Coastguard Worker
800*48a54d36SAndroid Build Coastguard Worker object = NULL;
801*48a54d36SAndroid Build Coastguard Worker
802*48a54d36SAndroid Build Coastguard Worker }
803*48a54d36SAndroid Build Coastguard Worker
804*48a54d36SAndroid Build Coastguard Worker
805*48a54d36SAndroid Build Coastguard Worker
806*48a54d36SAndroid Build Coastguard Worker require_action( object != NULL, exit, err = kDNSServiceErr_NoMemory );
807*48a54d36SAndroid Build Coastguard Worker
808*48a54d36SAndroid Build Coastguard Worker object->AddRef();
809*48a54d36SAndroid Build Coastguard Worker
810*48a54d36SAndroid Build Coastguard Worker
811*48a54d36SAndroid Build Coastguard Worker
812*48a54d36SAndroid Build Coastguard Worker err = DNSServiceRegisterRecord( m_primary, &rref, flags, ifIndex, fullNameUTF8.c_str(), rrtype, rrclass, ( uint16_t ) byteArray.size(), byteArray.size() > 0 ? &byteArray[ 0 ] : NULL, ttl, &RegisterRecordReply, object );
813*48a54d36SAndroid Build Coastguard Worker
814*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
815*48a54d36SAndroid Build Coastguard Worker
816*48a54d36SAndroid Build Coastguard Worker
817*48a54d36SAndroid Build Coastguard Worker
818*48a54d36SAndroid Build Coastguard Worker object->SetServiceObject( this );
819*48a54d36SAndroid Build Coastguard Worker
820*48a54d36SAndroid Build Coastguard Worker object->SetRecordRef( rref );
821*48a54d36SAndroid Build Coastguard Worker
822*48a54d36SAndroid Build Coastguard Worker this->SetEventManager( eventManager );
823*48a54d36SAndroid Build Coastguard Worker
824*48a54d36SAndroid Build Coastguard Worker
825*48a54d36SAndroid Build Coastguard Worker
826*48a54d36SAndroid Build Coastguard Worker *record = object;
827*48a54d36SAndroid Build Coastguard Worker
828*48a54d36SAndroid Build Coastguard Worker
829*48a54d36SAndroid Build Coastguard Worker
830*48a54d36SAndroid Build Coastguard Worker exit:
831*48a54d36SAndroid Build Coastguard Worker
832*48a54d36SAndroid Build Coastguard Worker
833*48a54d36SAndroid Build Coastguard Worker
834*48a54d36SAndroid Build Coastguard Worker if ( err && object )
835*48a54d36SAndroid Build Coastguard Worker
836*48a54d36SAndroid Build Coastguard Worker {
837*48a54d36SAndroid Build Coastguard Worker
838*48a54d36SAndroid Build Coastguard Worker object->Release();
839*48a54d36SAndroid Build Coastguard Worker
840*48a54d36SAndroid Build Coastguard Worker }
841*48a54d36SAndroid Build Coastguard Worker
842*48a54d36SAndroid Build Coastguard Worker
843*48a54d36SAndroid Build Coastguard Worker
844*48a54d36SAndroid Build Coastguard Worker return err;
845*48a54d36SAndroid Build Coastguard Worker
846*48a54d36SAndroid Build Coastguard Worker }
847*48a54d36SAndroid Build Coastguard Worker
848*48a54d36SAndroid Build Coastguard Worker
849*48a54d36SAndroid Build Coastguard Worker
850*48a54d36SAndroid Build Coastguard Worker
851*48a54d36SAndroid Build Coastguard Worker
AddRecord(DNSSDFlags flags,DNSSDRRType rrtype,VARIANT rdata,ULONG ttl,IDNSSDRecord ** record)852*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::AddRecord(DNSSDFlags flags, DNSSDRRType rrtype, VARIANT rdata, ULONG ttl, IDNSSDRecord ** record)
853*48a54d36SAndroid Build Coastguard Worker
854*48a54d36SAndroid Build Coastguard Worker {
855*48a54d36SAndroid Build Coastguard Worker
856*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDRecord> * object = NULL;
857*48a54d36SAndroid Build Coastguard Worker
858*48a54d36SAndroid Build Coastguard Worker DNSRecordRef rref = NULL;
859*48a54d36SAndroid Build Coastguard Worker
860*48a54d36SAndroid Build Coastguard Worker std::vector< BYTE > byteArray;
861*48a54d36SAndroid Build Coastguard Worker
862*48a54d36SAndroid Build Coastguard Worker const void * byteArrayPtr = NULL;
863*48a54d36SAndroid Build Coastguard Worker
864*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
865*48a54d36SAndroid Build Coastguard Worker
866*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
867*48a54d36SAndroid Build Coastguard Worker
868*48a54d36SAndroid Build Coastguard Worker BOOL ok;
869*48a54d36SAndroid Build Coastguard Worker
870*48a54d36SAndroid Build Coastguard Worker
871*48a54d36SAndroid Build Coastguard Worker
872*48a54d36SAndroid Build Coastguard Worker check( m_primary );
873*48a54d36SAndroid Build Coastguard Worker
874*48a54d36SAndroid Build Coastguard Worker
875*48a54d36SAndroid Build Coastguard Worker
876*48a54d36SAndroid Build Coastguard Worker // Initialize
877*48a54d36SAndroid Build Coastguard Worker
878*48a54d36SAndroid Build Coastguard Worker *object = NULL;
879*48a54d36SAndroid Build Coastguard Worker
880*48a54d36SAndroid Build Coastguard Worker
881*48a54d36SAndroid Build Coastguard Worker
882*48a54d36SAndroid Build Coastguard Worker // Convert the VARIANT
883*48a54d36SAndroid Build Coastguard Worker
884*48a54d36SAndroid Build Coastguard Worker ok = VariantToByteArray( &rdata, byteArray );
885*48a54d36SAndroid Build Coastguard Worker
886*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
887*48a54d36SAndroid Build Coastguard Worker
888*48a54d36SAndroid Build Coastguard Worker
889*48a54d36SAndroid Build Coastguard Worker
890*48a54d36SAndroid Build Coastguard Worker try
891*48a54d36SAndroid Build Coastguard Worker
892*48a54d36SAndroid Build Coastguard Worker {
893*48a54d36SAndroid Build Coastguard Worker
894*48a54d36SAndroid Build Coastguard Worker object = new CComObject<CDNSSDRecord>();
895*48a54d36SAndroid Build Coastguard Worker
896*48a54d36SAndroid Build Coastguard Worker }
897*48a54d36SAndroid Build Coastguard Worker
898*48a54d36SAndroid Build Coastguard Worker catch ( ... )
899*48a54d36SAndroid Build Coastguard Worker
900*48a54d36SAndroid Build Coastguard Worker {
901*48a54d36SAndroid Build Coastguard Worker
902*48a54d36SAndroid Build Coastguard Worker object = NULL;
903*48a54d36SAndroid Build Coastguard Worker
904*48a54d36SAndroid Build Coastguard Worker }
905*48a54d36SAndroid Build Coastguard Worker
906*48a54d36SAndroid Build Coastguard Worker
907*48a54d36SAndroid Build Coastguard Worker
908*48a54d36SAndroid Build Coastguard Worker require_action( object != NULL, exit, err = kDNSServiceErr_NoMemory );
909*48a54d36SAndroid Build Coastguard Worker
910*48a54d36SAndroid Build Coastguard Worker object->AddRef();
911*48a54d36SAndroid Build Coastguard Worker
912*48a54d36SAndroid Build Coastguard Worker
913*48a54d36SAndroid Build Coastguard Worker
914*48a54d36SAndroid Build Coastguard Worker err = DNSServiceAddRecord( m_primary, &rref, flags, rrtype, ( uint16_t ) byteArray.size(), byteArray.size() > 0 ? &byteArray[ 0 ] : NULL, ttl );
915*48a54d36SAndroid Build Coastguard Worker
916*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
917*48a54d36SAndroid Build Coastguard Worker
918*48a54d36SAndroid Build Coastguard Worker
919*48a54d36SAndroid Build Coastguard Worker
920*48a54d36SAndroid Build Coastguard Worker object->SetServiceObject( this );
921*48a54d36SAndroid Build Coastguard Worker
922*48a54d36SAndroid Build Coastguard Worker object->SetRecordRef( rref );
923*48a54d36SAndroid Build Coastguard Worker
924*48a54d36SAndroid Build Coastguard Worker
925*48a54d36SAndroid Build Coastguard Worker
926*48a54d36SAndroid Build Coastguard Worker *record = object;
927*48a54d36SAndroid Build Coastguard Worker
928*48a54d36SAndroid Build Coastguard Worker
929*48a54d36SAndroid Build Coastguard Worker
930*48a54d36SAndroid Build Coastguard Worker exit:
931*48a54d36SAndroid Build Coastguard Worker
932*48a54d36SAndroid Build Coastguard Worker
933*48a54d36SAndroid Build Coastguard Worker
934*48a54d36SAndroid Build Coastguard Worker if ( err && object )
935*48a54d36SAndroid Build Coastguard Worker
936*48a54d36SAndroid Build Coastguard Worker {
937*48a54d36SAndroid Build Coastguard Worker
938*48a54d36SAndroid Build Coastguard Worker object->Release();
939*48a54d36SAndroid Build Coastguard Worker
940*48a54d36SAndroid Build Coastguard Worker }
941*48a54d36SAndroid Build Coastguard Worker
942*48a54d36SAndroid Build Coastguard Worker
943*48a54d36SAndroid Build Coastguard Worker
944*48a54d36SAndroid Build Coastguard Worker return err;
945*48a54d36SAndroid Build Coastguard Worker
946*48a54d36SAndroid Build Coastguard Worker }
947*48a54d36SAndroid Build Coastguard Worker
948*48a54d36SAndroid Build Coastguard Worker
949*48a54d36SAndroid Build Coastguard Worker
ReconfirmRecord(DNSSDFlags flags,ULONG ifIndex,BSTR fullName,DNSSDRRType rrtype,DNSSDRRClass rrclass,VARIANT rdata)950*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::ReconfirmRecord(DNSSDFlags flags, ULONG ifIndex, BSTR fullName, DNSSDRRType rrtype, DNSSDRRClass rrclass, VARIANT rdata)
951*48a54d36SAndroid Build Coastguard Worker
952*48a54d36SAndroid Build Coastguard Worker {
953*48a54d36SAndroid Build Coastguard Worker
954*48a54d36SAndroid Build Coastguard Worker std::string fullNameUTF8;
955*48a54d36SAndroid Build Coastguard Worker
956*48a54d36SAndroid Build Coastguard Worker std::vector< BYTE > byteArray;
957*48a54d36SAndroid Build Coastguard Worker
958*48a54d36SAndroid Build Coastguard Worker const void * byteArrayPtr = NULL;
959*48a54d36SAndroid Build Coastguard Worker
960*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
961*48a54d36SAndroid Build Coastguard Worker
962*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
963*48a54d36SAndroid Build Coastguard Worker
964*48a54d36SAndroid Build Coastguard Worker BOOL ok;
965*48a54d36SAndroid Build Coastguard Worker
966*48a54d36SAndroid Build Coastguard Worker
967*48a54d36SAndroid Build Coastguard Worker
968*48a54d36SAndroid Build Coastguard Worker // Convert BSTR params to utf8
969*48a54d36SAndroid Build Coastguard Worker
970*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( fullName, fullNameUTF8 );
971*48a54d36SAndroid Build Coastguard Worker
972*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
973*48a54d36SAndroid Build Coastguard Worker
974*48a54d36SAndroid Build Coastguard Worker
975*48a54d36SAndroid Build Coastguard Worker
976*48a54d36SAndroid Build Coastguard Worker // Convert the VARIANT
977*48a54d36SAndroid Build Coastguard Worker
978*48a54d36SAndroid Build Coastguard Worker ok = VariantToByteArray( &rdata, byteArray );
979*48a54d36SAndroid Build Coastguard Worker
980*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
981*48a54d36SAndroid Build Coastguard Worker
982*48a54d36SAndroid Build Coastguard Worker
983*48a54d36SAndroid Build Coastguard Worker
984*48a54d36SAndroid Build Coastguard Worker err = DNSServiceReconfirmRecord( flags, ifIndex, fullNameUTF8.c_str(), rrtype, rrclass, ( uint16_t ) byteArray.size(), byteArray.size() > 0 ? &byteArray[ 0 ] : NULL );
985*48a54d36SAndroid Build Coastguard Worker
986*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
987*48a54d36SAndroid Build Coastguard Worker
988*48a54d36SAndroid Build Coastguard Worker
989*48a54d36SAndroid Build Coastguard Worker
990*48a54d36SAndroid Build Coastguard Worker exit:
991*48a54d36SAndroid Build Coastguard Worker
992*48a54d36SAndroid Build Coastguard Worker
993*48a54d36SAndroid Build Coastguard Worker
994*48a54d36SAndroid Build Coastguard Worker return err;
995*48a54d36SAndroid Build Coastguard Worker
996*48a54d36SAndroid Build Coastguard Worker }
997*48a54d36SAndroid Build Coastguard Worker
998*48a54d36SAndroid Build Coastguard Worker
999*48a54d36SAndroid Build Coastguard Worker
1000*48a54d36SAndroid Build Coastguard Worker
1001*48a54d36SAndroid Build Coastguard Worker
GetProperty(BSTR prop,VARIANT * value)1002*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::GetProperty(BSTR prop, VARIANT * value )
1003*48a54d36SAndroid Build Coastguard Worker
1004*48a54d36SAndroid Build Coastguard Worker {
1005*48a54d36SAndroid Build Coastguard Worker
1006*48a54d36SAndroid Build Coastguard Worker std::string propUTF8;
1007*48a54d36SAndroid Build Coastguard Worker
1008*48a54d36SAndroid Build Coastguard Worker std::vector< BYTE > byteArray;
1009*48a54d36SAndroid Build Coastguard Worker
1010*48a54d36SAndroid Build Coastguard Worker SAFEARRAY * psa = NULL;
1011*48a54d36SAndroid Build Coastguard Worker
1012*48a54d36SAndroid Build Coastguard Worker BYTE * pData = NULL;
1013*48a54d36SAndroid Build Coastguard Worker
1014*48a54d36SAndroid Build Coastguard Worker uint32_t elems = 0;
1015*48a54d36SAndroid Build Coastguard Worker
1016*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
1017*48a54d36SAndroid Build Coastguard Worker
1018*48a54d36SAndroid Build Coastguard Worker BOOL ok = TRUE;
1019*48a54d36SAndroid Build Coastguard Worker
1020*48a54d36SAndroid Build Coastguard Worker
1021*48a54d36SAndroid Build Coastguard Worker
1022*48a54d36SAndroid Build Coastguard Worker // Convert BSTR params to utf8
1023*48a54d36SAndroid Build Coastguard Worker
1024*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( prop, propUTF8 );
1025*48a54d36SAndroid Build Coastguard Worker
1026*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
1027*48a54d36SAndroid Build Coastguard Worker
1028*48a54d36SAndroid Build Coastguard Worker
1029*48a54d36SAndroid Build Coastguard Worker
1030*48a54d36SAndroid Build Coastguard Worker // Setup the byte array
1031*48a54d36SAndroid Build Coastguard Worker
1032*48a54d36SAndroid Build Coastguard Worker require_action( V_VT( value ) == ( VT_ARRAY|VT_UI1 ), exit, err = kDNSServiceErr_Unknown );
1033*48a54d36SAndroid Build Coastguard Worker
1034*48a54d36SAndroid Build Coastguard Worker psa = V_ARRAY( value );
1035*48a54d36SAndroid Build Coastguard Worker
1036*48a54d36SAndroid Build Coastguard Worker require_action( psa, exit, err = kDNSServiceErr_Unknown );
1037*48a54d36SAndroid Build Coastguard Worker
1038*48a54d36SAndroid Build Coastguard Worker require_action( SafeArrayGetDim( psa ) == 1, exit, err = kDNSServiceErr_Unknown );
1039*48a54d36SAndroid Build Coastguard Worker
1040*48a54d36SAndroid Build Coastguard Worker byteArray.reserve( psa->rgsabound[0].cElements );
1041*48a54d36SAndroid Build Coastguard Worker
1042*48a54d36SAndroid Build Coastguard Worker byteArray.assign( byteArray.capacity(), 0 );
1043*48a54d36SAndroid Build Coastguard Worker
1044*48a54d36SAndroid Build Coastguard Worker elems = ( uint32_t ) byteArray.capacity();
1045*48a54d36SAndroid Build Coastguard Worker
1046*48a54d36SAndroid Build Coastguard Worker
1047*48a54d36SAndroid Build Coastguard Worker
1048*48a54d36SAndroid Build Coastguard Worker // Call the function and package the return value in the Variant
1049*48a54d36SAndroid Build Coastguard Worker
1050*48a54d36SAndroid Build Coastguard Worker err = DNSServiceGetProperty( propUTF8.c_str(), &byteArray[ 0 ], &elems );
1051*48a54d36SAndroid Build Coastguard Worker
1052*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
1053*48a54d36SAndroid Build Coastguard Worker
1054*48a54d36SAndroid Build Coastguard Worker ok = ByteArrayToVariant( &byteArray[ 0 ], elems, value );
1055*48a54d36SAndroid Build Coastguard Worker
1056*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSSDError_Unknown );
1057*48a54d36SAndroid Build Coastguard Worker
1058*48a54d36SAndroid Build Coastguard Worker
1059*48a54d36SAndroid Build Coastguard Worker
1060*48a54d36SAndroid Build Coastguard Worker exit:
1061*48a54d36SAndroid Build Coastguard Worker
1062*48a54d36SAndroid Build Coastguard Worker
1063*48a54d36SAndroid Build Coastguard Worker
1064*48a54d36SAndroid Build Coastguard Worker if ( psa )
1065*48a54d36SAndroid Build Coastguard Worker
1066*48a54d36SAndroid Build Coastguard Worker {
1067*48a54d36SAndroid Build Coastguard Worker
1068*48a54d36SAndroid Build Coastguard Worker SafeArrayUnaccessData( psa );
1069*48a54d36SAndroid Build Coastguard Worker
1070*48a54d36SAndroid Build Coastguard Worker psa = NULL;
1071*48a54d36SAndroid Build Coastguard Worker
1072*48a54d36SAndroid Build Coastguard Worker }
1073*48a54d36SAndroid Build Coastguard Worker
1074*48a54d36SAndroid Build Coastguard Worker
1075*48a54d36SAndroid Build Coastguard Worker
1076*48a54d36SAndroid Build Coastguard Worker return err;
1077*48a54d36SAndroid Build Coastguard Worker
1078*48a54d36SAndroid Build Coastguard Worker }
1079*48a54d36SAndroid Build Coastguard Worker
1080*48a54d36SAndroid Build Coastguard Worker
1081*48a54d36SAndroid Build Coastguard Worker
GetAddrInfo(DNSSDFlags flags,ULONG ifIndex,DNSSDAddressFamily addressFamily,BSTR hostName,IDNSSDEventManager * eventManager,IDNSSDService ** service)1082*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::GetAddrInfo(DNSSDFlags flags, ULONG ifIndex, DNSSDAddressFamily addressFamily, BSTR hostName, IDNSSDEventManager *eventManager, IDNSSDService **service)
1083*48a54d36SAndroid Build Coastguard Worker
1084*48a54d36SAndroid Build Coastguard Worker {
1085*48a54d36SAndroid Build Coastguard Worker
1086*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * object = NULL;
1087*48a54d36SAndroid Build Coastguard Worker
1088*48a54d36SAndroid Build Coastguard Worker DNSServiceRef subord = NULL;
1089*48a54d36SAndroid Build Coastguard Worker
1090*48a54d36SAndroid Build Coastguard Worker std::string hostNameUTF8;
1091*48a54d36SAndroid Build Coastguard Worker
1092*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
1093*48a54d36SAndroid Build Coastguard Worker
1094*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
1095*48a54d36SAndroid Build Coastguard Worker
1096*48a54d36SAndroid Build Coastguard Worker BOOL ok;
1097*48a54d36SAndroid Build Coastguard Worker
1098*48a54d36SAndroid Build Coastguard Worker
1099*48a54d36SAndroid Build Coastguard Worker
1100*48a54d36SAndroid Build Coastguard Worker check( m_primary );
1101*48a54d36SAndroid Build Coastguard Worker
1102*48a54d36SAndroid Build Coastguard Worker
1103*48a54d36SAndroid Build Coastguard Worker
1104*48a54d36SAndroid Build Coastguard Worker // Initialize
1105*48a54d36SAndroid Build Coastguard Worker
1106*48a54d36SAndroid Build Coastguard Worker *service = NULL;
1107*48a54d36SAndroid Build Coastguard Worker
1108*48a54d36SAndroid Build Coastguard Worker
1109*48a54d36SAndroid Build Coastguard Worker
1110*48a54d36SAndroid Build Coastguard Worker // Convert BSTR params to utf8
1111*48a54d36SAndroid Build Coastguard Worker
1112*48a54d36SAndroid Build Coastguard Worker ok = BSTRToUTF8( hostName, hostNameUTF8 );
1113*48a54d36SAndroid Build Coastguard Worker
1114*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_BadParam );
1115*48a54d36SAndroid Build Coastguard Worker
1116*48a54d36SAndroid Build Coastguard Worker
1117*48a54d36SAndroid Build Coastguard Worker
1118*48a54d36SAndroid Build Coastguard Worker try
1119*48a54d36SAndroid Build Coastguard Worker
1120*48a54d36SAndroid Build Coastguard Worker {
1121*48a54d36SAndroid Build Coastguard Worker
1122*48a54d36SAndroid Build Coastguard Worker object = new CComObject<CDNSSDService>();
1123*48a54d36SAndroid Build Coastguard Worker
1124*48a54d36SAndroid Build Coastguard Worker }
1125*48a54d36SAndroid Build Coastguard Worker
1126*48a54d36SAndroid Build Coastguard Worker catch ( ... )
1127*48a54d36SAndroid Build Coastguard Worker
1128*48a54d36SAndroid Build Coastguard Worker {
1129*48a54d36SAndroid Build Coastguard Worker
1130*48a54d36SAndroid Build Coastguard Worker object = NULL;
1131*48a54d36SAndroid Build Coastguard Worker
1132*48a54d36SAndroid Build Coastguard Worker }
1133*48a54d36SAndroid Build Coastguard Worker
1134*48a54d36SAndroid Build Coastguard Worker
1135*48a54d36SAndroid Build Coastguard Worker
1136*48a54d36SAndroid Build Coastguard Worker require_action( object != NULL, exit, err = kDNSServiceErr_NoMemory );
1137*48a54d36SAndroid Build Coastguard Worker
1138*48a54d36SAndroid Build Coastguard Worker object->AddRef();
1139*48a54d36SAndroid Build Coastguard Worker
1140*48a54d36SAndroid Build Coastguard Worker
1141*48a54d36SAndroid Build Coastguard Worker
1142*48a54d36SAndroid Build Coastguard Worker subord = m_primary;
1143*48a54d36SAndroid Build Coastguard Worker
1144*48a54d36SAndroid Build Coastguard Worker err = DNSServiceGetAddrInfo( &subord, flags | kDNSServiceFlagsShareConnection, ifIndex, addressFamily, hostNameUTF8.c_str(), ( DNSServiceGetAddrInfoReply ) &GetAddrInfoReply, object );
1145*48a54d36SAndroid Build Coastguard Worker
1146*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
1147*48a54d36SAndroid Build Coastguard Worker
1148*48a54d36SAndroid Build Coastguard Worker
1149*48a54d36SAndroid Build Coastguard Worker
1150*48a54d36SAndroid Build Coastguard Worker object->SetPrimaryRef( m_primary );
1151*48a54d36SAndroid Build Coastguard Worker
1152*48a54d36SAndroid Build Coastguard Worker object->SetSubordRef( subord );
1153*48a54d36SAndroid Build Coastguard Worker
1154*48a54d36SAndroid Build Coastguard Worker object->SetEventManager( eventManager );
1155*48a54d36SAndroid Build Coastguard Worker
1156*48a54d36SAndroid Build Coastguard Worker
1157*48a54d36SAndroid Build Coastguard Worker
1158*48a54d36SAndroid Build Coastguard Worker *service = object;
1159*48a54d36SAndroid Build Coastguard Worker
1160*48a54d36SAndroid Build Coastguard Worker
1161*48a54d36SAndroid Build Coastguard Worker
1162*48a54d36SAndroid Build Coastguard Worker exit:
1163*48a54d36SAndroid Build Coastguard Worker
1164*48a54d36SAndroid Build Coastguard Worker
1165*48a54d36SAndroid Build Coastguard Worker
1166*48a54d36SAndroid Build Coastguard Worker if ( err && object )
1167*48a54d36SAndroid Build Coastguard Worker
1168*48a54d36SAndroid Build Coastguard Worker {
1169*48a54d36SAndroid Build Coastguard Worker
1170*48a54d36SAndroid Build Coastguard Worker object->Release();
1171*48a54d36SAndroid Build Coastguard Worker
1172*48a54d36SAndroid Build Coastguard Worker }
1173*48a54d36SAndroid Build Coastguard Worker
1174*48a54d36SAndroid Build Coastguard Worker
1175*48a54d36SAndroid Build Coastguard Worker
1176*48a54d36SAndroid Build Coastguard Worker return err;
1177*48a54d36SAndroid Build Coastguard Worker
1178*48a54d36SAndroid Build Coastguard Worker }
1179*48a54d36SAndroid Build Coastguard Worker
1180*48a54d36SAndroid Build Coastguard Worker
1181*48a54d36SAndroid Build Coastguard Worker
1182*48a54d36SAndroid Build Coastguard Worker
1183*48a54d36SAndroid Build Coastguard Worker
NATPortMappingCreate(DNSSDFlags flags,ULONG ifIndex,DNSSDAddressFamily addressFamily,DNSSDProtocol protocol,USHORT internalPort,USHORT externalPort,ULONG ttl,IDNSSDEventManager * eventManager,IDNSSDService ** service)1184*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::NATPortMappingCreate(DNSSDFlags flags, ULONG ifIndex, DNSSDAddressFamily addressFamily, DNSSDProtocol protocol, USHORT internalPort, USHORT externalPort, ULONG ttl, IDNSSDEventManager *eventManager, IDNSSDService **service)
1185*48a54d36SAndroid Build Coastguard Worker
1186*48a54d36SAndroid Build Coastguard Worker {
1187*48a54d36SAndroid Build Coastguard Worker
1188*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * object = NULL;
1189*48a54d36SAndroid Build Coastguard Worker
1190*48a54d36SAndroid Build Coastguard Worker DNSServiceRef subord = NULL;
1191*48a54d36SAndroid Build Coastguard Worker
1192*48a54d36SAndroid Build Coastguard Worker DNSServiceProtocol prot = 0;
1193*48a54d36SAndroid Build Coastguard Worker
1194*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType err = 0;
1195*48a54d36SAndroid Build Coastguard Worker
1196*48a54d36SAndroid Build Coastguard Worker HRESULT hr = 0;
1197*48a54d36SAndroid Build Coastguard Worker
1198*48a54d36SAndroid Build Coastguard Worker
1199*48a54d36SAndroid Build Coastguard Worker
1200*48a54d36SAndroid Build Coastguard Worker check( m_primary );
1201*48a54d36SAndroid Build Coastguard Worker
1202*48a54d36SAndroid Build Coastguard Worker
1203*48a54d36SAndroid Build Coastguard Worker
1204*48a54d36SAndroid Build Coastguard Worker // Initialize
1205*48a54d36SAndroid Build Coastguard Worker
1206*48a54d36SAndroid Build Coastguard Worker *service = NULL;
1207*48a54d36SAndroid Build Coastguard Worker
1208*48a54d36SAndroid Build Coastguard Worker
1209*48a54d36SAndroid Build Coastguard Worker
1210*48a54d36SAndroid Build Coastguard Worker try
1211*48a54d36SAndroid Build Coastguard Worker
1212*48a54d36SAndroid Build Coastguard Worker {
1213*48a54d36SAndroid Build Coastguard Worker
1214*48a54d36SAndroid Build Coastguard Worker object = new CComObject<CDNSSDService>();
1215*48a54d36SAndroid Build Coastguard Worker
1216*48a54d36SAndroid Build Coastguard Worker }
1217*48a54d36SAndroid Build Coastguard Worker
1218*48a54d36SAndroid Build Coastguard Worker catch ( ... )
1219*48a54d36SAndroid Build Coastguard Worker
1220*48a54d36SAndroid Build Coastguard Worker {
1221*48a54d36SAndroid Build Coastguard Worker
1222*48a54d36SAndroid Build Coastguard Worker object = NULL;
1223*48a54d36SAndroid Build Coastguard Worker
1224*48a54d36SAndroid Build Coastguard Worker }
1225*48a54d36SAndroid Build Coastguard Worker
1226*48a54d36SAndroid Build Coastguard Worker
1227*48a54d36SAndroid Build Coastguard Worker
1228*48a54d36SAndroid Build Coastguard Worker require_action( object != NULL, exit, err = kDNSServiceErr_NoMemory );
1229*48a54d36SAndroid Build Coastguard Worker
1230*48a54d36SAndroid Build Coastguard Worker object->AddRef();
1231*48a54d36SAndroid Build Coastguard Worker
1232*48a54d36SAndroid Build Coastguard Worker
1233*48a54d36SAndroid Build Coastguard Worker
1234*48a54d36SAndroid Build Coastguard Worker prot = ( addressFamily | protocol );
1235*48a54d36SAndroid Build Coastguard Worker
1236*48a54d36SAndroid Build Coastguard Worker
1237*48a54d36SAndroid Build Coastguard Worker
1238*48a54d36SAndroid Build Coastguard Worker subord = m_primary;
1239*48a54d36SAndroid Build Coastguard Worker
1240*48a54d36SAndroid Build Coastguard Worker err = DNSServiceNATPortMappingCreate( &subord, flags | kDNSServiceFlagsShareConnection, ifIndex, prot, htons( internalPort ), htons( externalPort ), ttl, ( DNSServiceNATPortMappingReply ) &NATPortMappingReply, object );
1241*48a54d36SAndroid Build Coastguard Worker
1242*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
1243*48a54d36SAndroid Build Coastguard Worker
1244*48a54d36SAndroid Build Coastguard Worker
1245*48a54d36SAndroid Build Coastguard Worker
1246*48a54d36SAndroid Build Coastguard Worker object->SetPrimaryRef( m_primary );
1247*48a54d36SAndroid Build Coastguard Worker
1248*48a54d36SAndroid Build Coastguard Worker object->SetSubordRef( subord );
1249*48a54d36SAndroid Build Coastguard Worker
1250*48a54d36SAndroid Build Coastguard Worker object->SetEventManager( eventManager );
1251*48a54d36SAndroid Build Coastguard Worker
1252*48a54d36SAndroid Build Coastguard Worker
1253*48a54d36SAndroid Build Coastguard Worker
1254*48a54d36SAndroid Build Coastguard Worker *service = object;
1255*48a54d36SAndroid Build Coastguard Worker
1256*48a54d36SAndroid Build Coastguard Worker
1257*48a54d36SAndroid Build Coastguard Worker
1258*48a54d36SAndroid Build Coastguard Worker exit:
1259*48a54d36SAndroid Build Coastguard Worker
1260*48a54d36SAndroid Build Coastguard Worker
1261*48a54d36SAndroid Build Coastguard Worker
1262*48a54d36SAndroid Build Coastguard Worker if ( err && object )
1263*48a54d36SAndroid Build Coastguard Worker
1264*48a54d36SAndroid Build Coastguard Worker {
1265*48a54d36SAndroid Build Coastguard Worker
1266*48a54d36SAndroid Build Coastguard Worker object->Release();
1267*48a54d36SAndroid Build Coastguard Worker
1268*48a54d36SAndroid Build Coastguard Worker }
1269*48a54d36SAndroid Build Coastguard Worker
1270*48a54d36SAndroid Build Coastguard Worker
1271*48a54d36SAndroid Build Coastguard Worker
1272*48a54d36SAndroid Build Coastguard Worker return err;
1273*48a54d36SAndroid Build Coastguard Worker
1274*48a54d36SAndroid Build Coastguard Worker }
1275*48a54d36SAndroid Build Coastguard Worker
1276*48a54d36SAndroid Build Coastguard Worker
1277*48a54d36SAndroid Build Coastguard Worker
1278*48a54d36SAndroid Build Coastguard Worker
1279*48a54d36SAndroid Build Coastguard Worker
Stop(void)1280*48a54d36SAndroid Build Coastguard Worker STDMETHODIMP CDNSSDService::Stop(void)
1281*48a54d36SAndroid Build Coastguard Worker
1282*48a54d36SAndroid Build Coastguard Worker {
1283*48a54d36SAndroid Build Coastguard Worker
1284*48a54d36SAndroid Build Coastguard Worker if ( !m_stopped )
1285*48a54d36SAndroid Build Coastguard Worker
1286*48a54d36SAndroid Build Coastguard Worker {
1287*48a54d36SAndroid Build Coastguard Worker
1288*48a54d36SAndroid Build Coastguard Worker m_stopped = TRUE;
1289*48a54d36SAndroid Build Coastguard Worker
1290*48a54d36SAndroid Build Coastguard Worker
1291*48a54d36SAndroid Build Coastguard Worker
1292*48a54d36SAndroid Build Coastguard Worker dlog( kDebugLevelTrace, "Stop()\n" );
1293*48a54d36SAndroid Build Coastguard Worker
1294*48a54d36SAndroid Build Coastguard Worker
1295*48a54d36SAndroid Build Coastguard Worker
1296*48a54d36SAndroid Build Coastguard Worker if ( m_isPrimary && m_primary )
1297*48a54d36SAndroid Build Coastguard Worker
1298*48a54d36SAndroid Build Coastguard Worker {
1299*48a54d36SAndroid Build Coastguard Worker
1300*48a54d36SAndroid Build Coastguard Worker SocketMap::iterator it;
1301*48a54d36SAndroid Build Coastguard Worker
1302*48a54d36SAndroid Build Coastguard Worker
1303*48a54d36SAndroid Build Coastguard Worker
1304*48a54d36SAndroid Build Coastguard Worker if ( m_hiddenWindow )
1305*48a54d36SAndroid Build Coastguard Worker
1306*48a54d36SAndroid Build Coastguard Worker {
1307*48a54d36SAndroid Build Coastguard Worker
1308*48a54d36SAndroid Build Coastguard Worker WSAAsyncSelect( DNSServiceRefSockFD( m_primary ), m_hiddenWindow, 0, 0 );
1309*48a54d36SAndroid Build Coastguard Worker
1310*48a54d36SAndroid Build Coastguard Worker }
1311*48a54d36SAndroid Build Coastguard Worker
1312*48a54d36SAndroid Build Coastguard Worker
1313*48a54d36SAndroid Build Coastguard Worker
1314*48a54d36SAndroid Build Coastguard Worker it = m_socketMap.find( DNSServiceRefSockFD( m_primary ) );
1315*48a54d36SAndroid Build Coastguard Worker
1316*48a54d36SAndroid Build Coastguard Worker
1317*48a54d36SAndroid Build Coastguard Worker
1318*48a54d36SAndroid Build Coastguard Worker if ( it != m_socketMap.end() )
1319*48a54d36SAndroid Build Coastguard Worker
1320*48a54d36SAndroid Build Coastguard Worker {
1321*48a54d36SAndroid Build Coastguard Worker
1322*48a54d36SAndroid Build Coastguard Worker m_socketMap.erase( it );
1323*48a54d36SAndroid Build Coastguard Worker
1324*48a54d36SAndroid Build Coastguard Worker }
1325*48a54d36SAndroid Build Coastguard Worker
1326*48a54d36SAndroid Build Coastguard Worker
1327*48a54d36SAndroid Build Coastguard Worker
1328*48a54d36SAndroid Build Coastguard Worker DNSServiceRefDeallocate( m_primary );
1329*48a54d36SAndroid Build Coastguard Worker
1330*48a54d36SAndroid Build Coastguard Worker m_primary = NULL;
1331*48a54d36SAndroid Build Coastguard Worker
1332*48a54d36SAndroid Build Coastguard Worker }
1333*48a54d36SAndroid Build Coastguard Worker
1334*48a54d36SAndroid Build Coastguard Worker else if ( m_subord )
1335*48a54d36SAndroid Build Coastguard Worker
1336*48a54d36SAndroid Build Coastguard Worker {
1337*48a54d36SAndroid Build Coastguard Worker
1338*48a54d36SAndroid Build Coastguard Worker DNSServiceRefDeallocate( m_subord );
1339*48a54d36SAndroid Build Coastguard Worker
1340*48a54d36SAndroid Build Coastguard Worker m_subord = NULL;
1341*48a54d36SAndroid Build Coastguard Worker
1342*48a54d36SAndroid Build Coastguard Worker }
1343*48a54d36SAndroid Build Coastguard Worker
1344*48a54d36SAndroid Build Coastguard Worker
1345*48a54d36SAndroid Build Coastguard Worker
1346*48a54d36SAndroid Build Coastguard Worker if ( m_eventManager != NULL )
1347*48a54d36SAndroid Build Coastguard Worker
1348*48a54d36SAndroid Build Coastguard Worker {
1349*48a54d36SAndroid Build Coastguard Worker
1350*48a54d36SAndroid Build Coastguard Worker m_eventManager->Release();
1351*48a54d36SAndroid Build Coastguard Worker
1352*48a54d36SAndroid Build Coastguard Worker m_eventManager = NULL;
1353*48a54d36SAndroid Build Coastguard Worker
1354*48a54d36SAndroid Build Coastguard Worker }
1355*48a54d36SAndroid Build Coastguard Worker
1356*48a54d36SAndroid Build Coastguard Worker }
1357*48a54d36SAndroid Build Coastguard Worker
1358*48a54d36SAndroid Build Coastguard Worker
1359*48a54d36SAndroid Build Coastguard Worker
1360*48a54d36SAndroid Build Coastguard Worker return S_OK;
1361*48a54d36SAndroid Build Coastguard Worker
1362*48a54d36SAndroid Build Coastguard Worker }
1363*48a54d36SAndroid Build Coastguard Worker
1364*48a54d36SAndroid Build Coastguard Worker
1365*48a54d36SAndroid Build Coastguard Worker
1366*48a54d36SAndroid Build Coastguard Worker
1367*48a54d36SAndroid Build Coastguard Worker
1368*48a54d36SAndroid Build Coastguard Worker void DNSSD_API
DomainEnumReply(DNSServiceRef sdRef,DNSServiceFlags flags,uint32_t ifIndex,DNSServiceErrorType errorCode,const char * replyDomainUTF8,void * context)1369*48a54d36SAndroid Build Coastguard Worker CDNSSDService::DomainEnumReply
1370*48a54d36SAndroid Build Coastguard Worker (
1371*48a54d36SAndroid Build Coastguard Worker DNSServiceRef sdRef,
1372*48a54d36SAndroid Build Coastguard Worker DNSServiceFlags flags,
1373*48a54d36SAndroid Build Coastguard Worker uint32_t ifIndex,
1374*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType errorCode,
1375*48a54d36SAndroid Build Coastguard Worker const char *replyDomainUTF8,
1376*48a54d36SAndroid Build Coastguard Worker void *context
1377*48a54d36SAndroid Build Coastguard Worker )
1378*48a54d36SAndroid Build Coastguard Worker
1379*48a54d36SAndroid Build Coastguard Worker {
1380*48a54d36SAndroid Build Coastguard Worker
1381*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * service = NULL;
1382*48a54d36SAndroid Build Coastguard Worker
1383*48a54d36SAndroid Build Coastguard Worker CDNSSDEventManager * eventManager = NULL;
1384*48a54d36SAndroid Build Coastguard Worker
1385*48a54d36SAndroid Build Coastguard Worker int err = 0;
1386*48a54d36SAndroid Build Coastguard Worker
1387*48a54d36SAndroid Build Coastguard Worker
1388*48a54d36SAndroid Build Coastguard Worker
1389*48a54d36SAndroid Build Coastguard Worker service = ( CComObject< CDNSSDService>* ) context;
1390*48a54d36SAndroid Build Coastguard Worker
1391*48a54d36SAndroid Build Coastguard Worker require_action( service, exit, err = kDNSServiceErr_Unknown );
1392*48a54d36SAndroid Build Coastguard Worker
1393*48a54d36SAndroid Build Coastguard Worker
1394*48a54d36SAndroid Build Coastguard Worker
1395*48a54d36SAndroid Build Coastguard Worker if ( service->ShouldHandleReply( errorCode, eventManager ) )
1396*48a54d36SAndroid Build Coastguard Worker
1397*48a54d36SAndroid Build Coastguard Worker {
1398*48a54d36SAndroid Build Coastguard Worker
1399*48a54d36SAndroid Build Coastguard Worker CComBSTR replyDomain;
1400*48a54d36SAndroid Build Coastguard Worker
1401*48a54d36SAndroid Build Coastguard Worker BOOL ok;
1402*48a54d36SAndroid Build Coastguard Worker
1403*48a54d36SAndroid Build Coastguard Worker
1404*48a54d36SAndroid Build Coastguard Worker
1405*48a54d36SAndroid Build Coastguard Worker ok = UTF8ToBSTR( replyDomainUTF8, replyDomain );
1406*48a54d36SAndroid Build Coastguard Worker
1407*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1408*48a54d36SAndroid Build Coastguard Worker
1409*48a54d36SAndroid Build Coastguard Worker
1410*48a54d36SAndroid Build Coastguard Worker
1411*48a54d36SAndroid Build Coastguard Worker if ( flags & kDNSServiceFlagsAdd )
1412*48a54d36SAndroid Build Coastguard Worker
1413*48a54d36SAndroid Build Coastguard Worker {
1414*48a54d36SAndroid Build Coastguard Worker
1415*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_DomainFound( service, ( DNSSDFlags ) flags, ifIndex, replyDomain );
1416*48a54d36SAndroid Build Coastguard Worker
1417*48a54d36SAndroid Build Coastguard Worker }
1418*48a54d36SAndroid Build Coastguard Worker
1419*48a54d36SAndroid Build Coastguard Worker else
1420*48a54d36SAndroid Build Coastguard Worker
1421*48a54d36SAndroid Build Coastguard Worker {
1422*48a54d36SAndroid Build Coastguard Worker
1423*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_DomainLost( service, ( DNSSDFlags ) flags, ifIndex, replyDomain );
1424*48a54d36SAndroid Build Coastguard Worker
1425*48a54d36SAndroid Build Coastguard Worker }
1426*48a54d36SAndroid Build Coastguard Worker
1427*48a54d36SAndroid Build Coastguard Worker }
1428*48a54d36SAndroid Build Coastguard Worker
1429*48a54d36SAndroid Build Coastguard Worker
1430*48a54d36SAndroid Build Coastguard Worker
1431*48a54d36SAndroid Build Coastguard Worker exit:
1432*48a54d36SAndroid Build Coastguard Worker
1433*48a54d36SAndroid Build Coastguard Worker
1434*48a54d36SAndroid Build Coastguard Worker
1435*48a54d36SAndroid Build Coastguard Worker return;
1436*48a54d36SAndroid Build Coastguard Worker
1437*48a54d36SAndroid Build Coastguard Worker }
1438*48a54d36SAndroid Build Coastguard Worker
1439*48a54d36SAndroid Build Coastguard Worker
1440*48a54d36SAndroid Build Coastguard Worker
1441*48a54d36SAndroid Build Coastguard Worker
1442*48a54d36SAndroid Build Coastguard Worker
1443*48a54d36SAndroid Build Coastguard Worker void DNSSD_API
BrowseReply(DNSServiceRef sdRef,DNSServiceFlags flags,uint32_t ifIndex,DNSServiceErrorType errorCode,const char * serviceNameUTF8,const char * regTypeUTF8,const char * replyDomainUTF8,void * context)1444*48a54d36SAndroid Build Coastguard Worker CDNSSDService::BrowseReply
1445*48a54d36SAndroid Build Coastguard Worker (
1446*48a54d36SAndroid Build Coastguard Worker DNSServiceRef sdRef,
1447*48a54d36SAndroid Build Coastguard Worker DNSServiceFlags flags,
1448*48a54d36SAndroid Build Coastguard Worker uint32_t ifIndex,
1449*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType errorCode,
1450*48a54d36SAndroid Build Coastguard Worker const char *serviceNameUTF8,
1451*48a54d36SAndroid Build Coastguard Worker const char *regTypeUTF8,
1452*48a54d36SAndroid Build Coastguard Worker const char *replyDomainUTF8,
1453*48a54d36SAndroid Build Coastguard Worker void *context
1454*48a54d36SAndroid Build Coastguard Worker )
1455*48a54d36SAndroid Build Coastguard Worker
1456*48a54d36SAndroid Build Coastguard Worker {
1457*48a54d36SAndroid Build Coastguard Worker
1458*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * service = NULL;
1459*48a54d36SAndroid Build Coastguard Worker
1460*48a54d36SAndroid Build Coastguard Worker CDNSSDEventManager * eventManager = NULL;
1461*48a54d36SAndroid Build Coastguard Worker
1462*48a54d36SAndroid Build Coastguard Worker int err = 0;
1463*48a54d36SAndroid Build Coastguard Worker
1464*48a54d36SAndroid Build Coastguard Worker
1465*48a54d36SAndroid Build Coastguard Worker
1466*48a54d36SAndroid Build Coastguard Worker service = ( CComObject< CDNSSDService>* ) context;
1467*48a54d36SAndroid Build Coastguard Worker
1468*48a54d36SAndroid Build Coastguard Worker require_action( service, exit, err = kDNSServiceErr_Unknown );
1469*48a54d36SAndroid Build Coastguard Worker
1470*48a54d36SAndroid Build Coastguard Worker
1471*48a54d36SAndroid Build Coastguard Worker
1472*48a54d36SAndroid Build Coastguard Worker if ( service->ShouldHandleReply( errorCode, eventManager ) )
1473*48a54d36SAndroid Build Coastguard Worker
1474*48a54d36SAndroid Build Coastguard Worker {
1475*48a54d36SAndroid Build Coastguard Worker
1476*48a54d36SAndroid Build Coastguard Worker CComBSTR serviceName;
1477*48a54d36SAndroid Build Coastguard Worker
1478*48a54d36SAndroid Build Coastguard Worker CComBSTR regType;
1479*48a54d36SAndroid Build Coastguard Worker
1480*48a54d36SAndroid Build Coastguard Worker CComBSTR replyDomain;
1481*48a54d36SAndroid Build Coastguard Worker
1482*48a54d36SAndroid Build Coastguard Worker
1483*48a54d36SAndroid Build Coastguard Worker
1484*48a54d36SAndroid Build Coastguard Worker UTF8ToBSTR( serviceNameUTF8, serviceName );
1485*48a54d36SAndroid Build Coastguard Worker
1486*48a54d36SAndroid Build Coastguard Worker UTF8ToBSTR( regTypeUTF8, regType );
1487*48a54d36SAndroid Build Coastguard Worker
1488*48a54d36SAndroid Build Coastguard Worker UTF8ToBSTR( replyDomainUTF8, replyDomain );
1489*48a54d36SAndroid Build Coastguard Worker
1490*48a54d36SAndroid Build Coastguard Worker
1491*48a54d36SAndroid Build Coastguard Worker
1492*48a54d36SAndroid Build Coastguard Worker if ( flags & kDNSServiceFlagsAdd )
1493*48a54d36SAndroid Build Coastguard Worker
1494*48a54d36SAndroid Build Coastguard Worker {
1495*48a54d36SAndroid Build Coastguard Worker
1496*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_ServiceFound( service, ( DNSSDFlags ) flags, ifIndex, serviceName, regType, replyDomain );
1497*48a54d36SAndroid Build Coastguard Worker
1498*48a54d36SAndroid Build Coastguard Worker }
1499*48a54d36SAndroid Build Coastguard Worker
1500*48a54d36SAndroid Build Coastguard Worker else
1501*48a54d36SAndroid Build Coastguard Worker
1502*48a54d36SAndroid Build Coastguard Worker {
1503*48a54d36SAndroid Build Coastguard Worker
1504*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_ServiceLost( service, ( DNSSDFlags ) flags, ifIndex, serviceName, regType, replyDomain );
1505*48a54d36SAndroid Build Coastguard Worker
1506*48a54d36SAndroid Build Coastguard Worker }
1507*48a54d36SAndroid Build Coastguard Worker
1508*48a54d36SAndroid Build Coastguard Worker }
1509*48a54d36SAndroid Build Coastguard Worker
1510*48a54d36SAndroid Build Coastguard Worker
1511*48a54d36SAndroid Build Coastguard Worker
1512*48a54d36SAndroid Build Coastguard Worker exit:
1513*48a54d36SAndroid Build Coastguard Worker
1514*48a54d36SAndroid Build Coastguard Worker
1515*48a54d36SAndroid Build Coastguard Worker
1516*48a54d36SAndroid Build Coastguard Worker return;
1517*48a54d36SAndroid Build Coastguard Worker
1518*48a54d36SAndroid Build Coastguard Worker }
1519*48a54d36SAndroid Build Coastguard Worker
1520*48a54d36SAndroid Build Coastguard Worker
1521*48a54d36SAndroid Build Coastguard Worker
1522*48a54d36SAndroid Build Coastguard Worker
1523*48a54d36SAndroid Build Coastguard Worker
1524*48a54d36SAndroid Build Coastguard Worker void DNSSD_API
1525*48a54d36SAndroid Build Coastguard Worker
ResolveReply(DNSServiceRef sdRef,DNSServiceFlags flags,uint32_t ifIndex,DNSServiceErrorType errorCode,const char * fullNameUTF8,const char * hostNameUTF8,uint16_t port,uint16_t txtLen,const unsigned char * txtRecord,void * context)1526*48a54d36SAndroid Build Coastguard Worker CDNSSDService::ResolveReply
1527*48a54d36SAndroid Build Coastguard Worker
1528*48a54d36SAndroid Build Coastguard Worker (
1529*48a54d36SAndroid Build Coastguard Worker DNSServiceRef sdRef,
1530*48a54d36SAndroid Build Coastguard Worker DNSServiceFlags flags,
1531*48a54d36SAndroid Build Coastguard Worker uint32_t ifIndex,
1532*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType errorCode,
1533*48a54d36SAndroid Build Coastguard Worker const char *fullNameUTF8,
1534*48a54d36SAndroid Build Coastguard Worker const char *hostNameUTF8,
1535*48a54d36SAndroid Build Coastguard Worker uint16_t port,
1536*48a54d36SAndroid Build Coastguard Worker uint16_t txtLen,
1537*48a54d36SAndroid Build Coastguard Worker const unsigned char *txtRecord,
1538*48a54d36SAndroid Build Coastguard Worker void *context
1539*48a54d36SAndroid Build Coastguard Worker
1540*48a54d36SAndroid Build Coastguard Worker )
1541*48a54d36SAndroid Build Coastguard Worker
1542*48a54d36SAndroid Build Coastguard Worker {
1543*48a54d36SAndroid Build Coastguard Worker
1544*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * service = NULL;
1545*48a54d36SAndroid Build Coastguard Worker
1546*48a54d36SAndroid Build Coastguard Worker CDNSSDEventManager * eventManager = NULL;
1547*48a54d36SAndroid Build Coastguard Worker
1548*48a54d36SAndroid Build Coastguard Worker int err = 0;
1549*48a54d36SAndroid Build Coastguard Worker
1550*48a54d36SAndroid Build Coastguard Worker
1551*48a54d36SAndroid Build Coastguard Worker
1552*48a54d36SAndroid Build Coastguard Worker service = ( CComObject< CDNSSDService>* ) context;
1553*48a54d36SAndroid Build Coastguard Worker
1554*48a54d36SAndroid Build Coastguard Worker require_action( service, exit, err = kDNSServiceErr_Unknown );
1555*48a54d36SAndroid Build Coastguard Worker
1556*48a54d36SAndroid Build Coastguard Worker
1557*48a54d36SAndroid Build Coastguard Worker
1558*48a54d36SAndroid Build Coastguard Worker if ( service->ShouldHandleReply( errorCode, eventManager ) )
1559*48a54d36SAndroid Build Coastguard Worker
1560*48a54d36SAndroid Build Coastguard Worker {
1561*48a54d36SAndroid Build Coastguard Worker
1562*48a54d36SAndroid Build Coastguard Worker CComBSTR fullName;
1563*48a54d36SAndroid Build Coastguard Worker
1564*48a54d36SAndroid Build Coastguard Worker CComBSTR hostName;
1565*48a54d36SAndroid Build Coastguard Worker
1566*48a54d36SAndroid Build Coastguard Worker CComBSTR regType;
1567*48a54d36SAndroid Build Coastguard Worker
1568*48a54d36SAndroid Build Coastguard Worker CComBSTR replyDomain;
1569*48a54d36SAndroid Build Coastguard Worker
1570*48a54d36SAndroid Build Coastguard Worker CComObject< CTXTRecord >* record;
1571*48a54d36SAndroid Build Coastguard Worker
1572*48a54d36SAndroid Build Coastguard Worker BOOL ok;
1573*48a54d36SAndroid Build Coastguard Worker
1574*48a54d36SAndroid Build Coastguard Worker
1575*48a54d36SAndroid Build Coastguard Worker
1576*48a54d36SAndroid Build Coastguard Worker ok = UTF8ToBSTR( fullNameUTF8, fullName );
1577*48a54d36SAndroid Build Coastguard Worker
1578*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1579*48a54d36SAndroid Build Coastguard Worker
1580*48a54d36SAndroid Build Coastguard Worker ok = UTF8ToBSTR( hostNameUTF8, hostName );
1581*48a54d36SAndroid Build Coastguard Worker
1582*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1583*48a54d36SAndroid Build Coastguard Worker
1584*48a54d36SAndroid Build Coastguard Worker
1585*48a54d36SAndroid Build Coastguard Worker
1586*48a54d36SAndroid Build Coastguard Worker try
1587*48a54d36SAndroid Build Coastguard Worker
1588*48a54d36SAndroid Build Coastguard Worker {
1589*48a54d36SAndroid Build Coastguard Worker
1590*48a54d36SAndroid Build Coastguard Worker record = new CComObject<CTXTRecord>();
1591*48a54d36SAndroid Build Coastguard Worker
1592*48a54d36SAndroid Build Coastguard Worker }
1593*48a54d36SAndroid Build Coastguard Worker
1594*48a54d36SAndroid Build Coastguard Worker catch ( ... )
1595*48a54d36SAndroid Build Coastguard Worker
1596*48a54d36SAndroid Build Coastguard Worker {
1597*48a54d36SAndroid Build Coastguard Worker
1598*48a54d36SAndroid Build Coastguard Worker record = NULL;
1599*48a54d36SAndroid Build Coastguard Worker
1600*48a54d36SAndroid Build Coastguard Worker }
1601*48a54d36SAndroid Build Coastguard Worker
1602*48a54d36SAndroid Build Coastguard Worker
1603*48a54d36SAndroid Build Coastguard Worker
1604*48a54d36SAndroid Build Coastguard Worker require_action( record, exit, err = kDNSServiceErr_NoMemory );
1605*48a54d36SAndroid Build Coastguard Worker
1606*48a54d36SAndroid Build Coastguard Worker record->AddRef();
1607*48a54d36SAndroid Build Coastguard Worker
1608*48a54d36SAndroid Build Coastguard Worker
1609*48a54d36SAndroid Build Coastguard Worker
1610*48a54d36SAndroid Build Coastguard Worker if ( txtLen > 0 )
1611*48a54d36SAndroid Build Coastguard Worker
1612*48a54d36SAndroid Build Coastguard Worker {
1613*48a54d36SAndroid Build Coastguard Worker
1614*48a54d36SAndroid Build Coastguard Worker record->SetBytes( txtRecord, txtLen );
1615*48a54d36SAndroid Build Coastguard Worker
1616*48a54d36SAndroid Build Coastguard Worker }
1617*48a54d36SAndroid Build Coastguard Worker
1618*48a54d36SAndroid Build Coastguard Worker
1619*48a54d36SAndroid Build Coastguard Worker
1620*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_ServiceResolved( service, ( DNSSDFlags ) flags, ifIndex, fullName, hostName, ntohs( port ), record );
1621*48a54d36SAndroid Build Coastguard Worker
1622*48a54d36SAndroid Build Coastguard Worker }
1623*48a54d36SAndroid Build Coastguard Worker
1624*48a54d36SAndroid Build Coastguard Worker
1625*48a54d36SAndroid Build Coastguard Worker
1626*48a54d36SAndroid Build Coastguard Worker exit:
1627*48a54d36SAndroid Build Coastguard Worker
1628*48a54d36SAndroid Build Coastguard Worker
1629*48a54d36SAndroid Build Coastguard Worker
1630*48a54d36SAndroid Build Coastguard Worker return;
1631*48a54d36SAndroid Build Coastguard Worker
1632*48a54d36SAndroid Build Coastguard Worker }
1633*48a54d36SAndroid Build Coastguard Worker
1634*48a54d36SAndroid Build Coastguard Worker
1635*48a54d36SAndroid Build Coastguard Worker
1636*48a54d36SAndroid Build Coastguard Worker
1637*48a54d36SAndroid Build Coastguard Worker
1638*48a54d36SAndroid Build Coastguard Worker void DNSSD_API
RegisterReply(DNSServiceRef sdRef,DNSServiceFlags flags,DNSServiceErrorType errorCode,const char * serviceNameUTF8,const char * regTypeUTF8,const char * domainUTF8,void * context)1639*48a54d36SAndroid Build Coastguard Worker CDNSSDService::RegisterReply
1640*48a54d36SAndroid Build Coastguard Worker (
1641*48a54d36SAndroid Build Coastguard Worker DNSServiceRef sdRef,
1642*48a54d36SAndroid Build Coastguard Worker DNSServiceFlags flags,
1643*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType errorCode,
1644*48a54d36SAndroid Build Coastguard Worker const char *serviceNameUTF8,
1645*48a54d36SAndroid Build Coastguard Worker const char *regTypeUTF8,
1646*48a54d36SAndroid Build Coastguard Worker const char *domainUTF8,
1647*48a54d36SAndroid Build Coastguard Worker void *context
1648*48a54d36SAndroid Build Coastguard Worker )
1649*48a54d36SAndroid Build Coastguard Worker
1650*48a54d36SAndroid Build Coastguard Worker {
1651*48a54d36SAndroid Build Coastguard Worker
1652*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * service = NULL;
1653*48a54d36SAndroid Build Coastguard Worker
1654*48a54d36SAndroid Build Coastguard Worker CDNSSDEventManager * eventManager = NULL;
1655*48a54d36SAndroid Build Coastguard Worker
1656*48a54d36SAndroid Build Coastguard Worker int err = 0;
1657*48a54d36SAndroid Build Coastguard Worker
1658*48a54d36SAndroid Build Coastguard Worker
1659*48a54d36SAndroid Build Coastguard Worker
1660*48a54d36SAndroid Build Coastguard Worker service = ( CComObject< CDNSSDService>* ) context;
1661*48a54d36SAndroid Build Coastguard Worker
1662*48a54d36SAndroid Build Coastguard Worker require_action( service, exit, err = kDNSServiceErr_Unknown );
1663*48a54d36SAndroid Build Coastguard Worker
1664*48a54d36SAndroid Build Coastguard Worker
1665*48a54d36SAndroid Build Coastguard Worker
1666*48a54d36SAndroid Build Coastguard Worker if ( service->ShouldHandleReply( errorCode, eventManager ) )
1667*48a54d36SAndroid Build Coastguard Worker
1668*48a54d36SAndroid Build Coastguard Worker {
1669*48a54d36SAndroid Build Coastguard Worker
1670*48a54d36SAndroid Build Coastguard Worker CComBSTR serviceName;
1671*48a54d36SAndroid Build Coastguard Worker
1672*48a54d36SAndroid Build Coastguard Worker CComBSTR regType;
1673*48a54d36SAndroid Build Coastguard Worker
1674*48a54d36SAndroid Build Coastguard Worker CComBSTR domain;
1675*48a54d36SAndroid Build Coastguard Worker
1676*48a54d36SAndroid Build Coastguard Worker BOOL ok;
1677*48a54d36SAndroid Build Coastguard Worker
1678*48a54d36SAndroid Build Coastguard Worker
1679*48a54d36SAndroid Build Coastguard Worker
1680*48a54d36SAndroid Build Coastguard Worker ok = UTF8ToBSTR( serviceNameUTF8, serviceName );
1681*48a54d36SAndroid Build Coastguard Worker
1682*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1683*48a54d36SAndroid Build Coastguard Worker
1684*48a54d36SAndroid Build Coastguard Worker ok = UTF8ToBSTR( regTypeUTF8, regType );
1685*48a54d36SAndroid Build Coastguard Worker
1686*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1687*48a54d36SAndroid Build Coastguard Worker
1688*48a54d36SAndroid Build Coastguard Worker ok = UTF8ToBSTR( domainUTF8, domain );
1689*48a54d36SAndroid Build Coastguard Worker
1690*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1691*48a54d36SAndroid Build Coastguard Worker
1692*48a54d36SAndroid Build Coastguard Worker
1693*48a54d36SAndroid Build Coastguard Worker
1694*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_ServiceRegistered( service, ( DNSSDFlags ) flags, serviceName, regType, domain );
1695*48a54d36SAndroid Build Coastguard Worker
1696*48a54d36SAndroid Build Coastguard Worker }
1697*48a54d36SAndroid Build Coastguard Worker
1698*48a54d36SAndroid Build Coastguard Worker
1699*48a54d36SAndroid Build Coastguard Worker
1700*48a54d36SAndroid Build Coastguard Worker exit:
1701*48a54d36SAndroid Build Coastguard Worker
1702*48a54d36SAndroid Build Coastguard Worker
1703*48a54d36SAndroid Build Coastguard Worker
1704*48a54d36SAndroid Build Coastguard Worker return;
1705*48a54d36SAndroid Build Coastguard Worker
1706*48a54d36SAndroid Build Coastguard Worker }
1707*48a54d36SAndroid Build Coastguard Worker
1708*48a54d36SAndroid Build Coastguard Worker
1709*48a54d36SAndroid Build Coastguard Worker
1710*48a54d36SAndroid Build Coastguard Worker
1711*48a54d36SAndroid Build Coastguard Worker
1712*48a54d36SAndroid Build Coastguard Worker void DNSSD_API
QueryRecordReply(DNSServiceRef sdRef,DNSServiceFlags flags,uint32_t ifIndex,DNSServiceErrorType errorCode,const char * fullNameUTF8,uint16_t rrtype,uint16_t rrclass,uint16_t rdlen,const void * rdata,uint32_t ttl,void * context)1713*48a54d36SAndroid Build Coastguard Worker CDNSSDService::QueryRecordReply
1714*48a54d36SAndroid Build Coastguard Worker (
1715*48a54d36SAndroid Build Coastguard Worker DNSServiceRef sdRef,
1716*48a54d36SAndroid Build Coastguard Worker DNSServiceFlags flags,
1717*48a54d36SAndroid Build Coastguard Worker uint32_t ifIndex,
1718*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType errorCode,
1719*48a54d36SAndroid Build Coastguard Worker const char *fullNameUTF8,
1720*48a54d36SAndroid Build Coastguard Worker uint16_t rrtype,
1721*48a54d36SAndroid Build Coastguard Worker uint16_t rrclass,
1722*48a54d36SAndroid Build Coastguard Worker uint16_t rdlen,
1723*48a54d36SAndroid Build Coastguard Worker const void *rdata,
1724*48a54d36SAndroid Build Coastguard Worker uint32_t ttl,
1725*48a54d36SAndroid Build Coastguard Worker void *context
1726*48a54d36SAndroid Build Coastguard Worker )
1727*48a54d36SAndroid Build Coastguard Worker
1728*48a54d36SAndroid Build Coastguard Worker {
1729*48a54d36SAndroid Build Coastguard Worker
1730*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * service = NULL;
1731*48a54d36SAndroid Build Coastguard Worker
1732*48a54d36SAndroid Build Coastguard Worker CDNSSDEventManager * eventManager = NULL;
1733*48a54d36SAndroid Build Coastguard Worker
1734*48a54d36SAndroid Build Coastguard Worker int err = 0;
1735*48a54d36SAndroid Build Coastguard Worker
1736*48a54d36SAndroid Build Coastguard Worker
1737*48a54d36SAndroid Build Coastguard Worker
1738*48a54d36SAndroid Build Coastguard Worker service = ( CComObject< CDNSSDService>* ) context;
1739*48a54d36SAndroid Build Coastguard Worker
1740*48a54d36SAndroid Build Coastguard Worker require_action( service, exit, err = kDNSServiceErr_Unknown );
1741*48a54d36SAndroid Build Coastguard Worker
1742*48a54d36SAndroid Build Coastguard Worker
1743*48a54d36SAndroid Build Coastguard Worker
1744*48a54d36SAndroid Build Coastguard Worker if ( service->ShouldHandleReply( errorCode, eventManager ) )
1745*48a54d36SAndroid Build Coastguard Worker
1746*48a54d36SAndroid Build Coastguard Worker {
1747*48a54d36SAndroid Build Coastguard Worker
1748*48a54d36SAndroid Build Coastguard Worker CComBSTR fullName;
1749*48a54d36SAndroid Build Coastguard Worker
1750*48a54d36SAndroid Build Coastguard Worker VARIANT var;
1751*48a54d36SAndroid Build Coastguard Worker
1752*48a54d36SAndroid Build Coastguard Worker BOOL ok;
1753*48a54d36SAndroid Build Coastguard Worker
1754*48a54d36SAndroid Build Coastguard Worker
1755*48a54d36SAndroid Build Coastguard Worker
1756*48a54d36SAndroid Build Coastguard Worker ok = UTF8ToBSTR( fullNameUTF8, fullName );
1757*48a54d36SAndroid Build Coastguard Worker
1758*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1759*48a54d36SAndroid Build Coastguard Worker
1760*48a54d36SAndroid Build Coastguard Worker ok = ByteArrayToVariant( rdata, rdlen, &var );
1761*48a54d36SAndroid Build Coastguard Worker
1762*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1763*48a54d36SAndroid Build Coastguard Worker
1764*48a54d36SAndroid Build Coastguard Worker
1765*48a54d36SAndroid Build Coastguard Worker
1766*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_QueryRecordAnswered( service, ( DNSSDFlags ) flags, ifIndex, fullName, ( DNSSDRRType ) rrtype, ( DNSSDRRClass ) rrclass, var, ttl );
1767*48a54d36SAndroid Build Coastguard Worker
1768*48a54d36SAndroid Build Coastguard Worker }
1769*48a54d36SAndroid Build Coastguard Worker
1770*48a54d36SAndroid Build Coastguard Worker
1771*48a54d36SAndroid Build Coastguard Worker
1772*48a54d36SAndroid Build Coastguard Worker exit:
1773*48a54d36SAndroid Build Coastguard Worker
1774*48a54d36SAndroid Build Coastguard Worker
1775*48a54d36SAndroid Build Coastguard Worker
1776*48a54d36SAndroid Build Coastguard Worker return;
1777*48a54d36SAndroid Build Coastguard Worker
1778*48a54d36SAndroid Build Coastguard Worker }
1779*48a54d36SAndroid Build Coastguard Worker
1780*48a54d36SAndroid Build Coastguard Worker
1781*48a54d36SAndroid Build Coastguard Worker
1782*48a54d36SAndroid Build Coastguard Worker
1783*48a54d36SAndroid Build Coastguard Worker
1784*48a54d36SAndroid Build Coastguard Worker void DNSSD_API
GetAddrInfoReply(DNSServiceRef sdRef,DNSServiceFlags flags,uint32_t ifIndex,DNSServiceErrorType errorCode,const char * hostNameUTF8,const struct sockaddr * rawAddress,uint32_t ttl,void * context)1785*48a54d36SAndroid Build Coastguard Worker CDNSSDService::GetAddrInfoReply
1786*48a54d36SAndroid Build Coastguard Worker (
1787*48a54d36SAndroid Build Coastguard Worker DNSServiceRef sdRef,
1788*48a54d36SAndroid Build Coastguard Worker DNSServiceFlags flags,
1789*48a54d36SAndroid Build Coastguard Worker uint32_t ifIndex,
1790*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType errorCode,
1791*48a54d36SAndroid Build Coastguard Worker const char *hostNameUTF8,
1792*48a54d36SAndroid Build Coastguard Worker const struct sockaddr *rawAddress,
1793*48a54d36SAndroid Build Coastguard Worker uint32_t ttl,
1794*48a54d36SAndroid Build Coastguard Worker void *context
1795*48a54d36SAndroid Build Coastguard Worker )
1796*48a54d36SAndroid Build Coastguard Worker
1797*48a54d36SAndroid Build Coastguard Worker {
1798*48a54d36SAndroid Build Coastguard Worker
1799*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * service = NULL;
1800*48a54d36SAndroid Build Coastguard Worker
1801*48a54d36SAndroid Build Coastguard Worker CDNSSDEventManager * eventManager = NULL;
1802*48a54d36SAndroid Build Coastguard Worker
1803*48a54d36SAndroid Build Coastguard Worker int err = 0;
1804*48a54d36SAndroid Build Coastguard Worker
1805*48a54d36SAndroid Build Coastguard Worker
1806*48a54d36SAndroid Build Coastguard Worker
1807*48a54d36SAndroid Build Coastguard Worker service = ( CComObject< CDNSSDService>* ) context;
1808*48a54d36SAndroid Build Coastguard Worker
1809*48a54d36SAndroid Build Coastguard Worker require_action( service, exit, err = kDNSServiceErr_Unknown );
1810*48a54d36SAndroid Build Coastguard Worker
1811*48a54d36SAndroid Build Coastguard Worker
1812*48a54d36SAndroid Build Coastguard Worker
1813*48a54d36SAndroid Build Coastguard Worker if ( service->ShouldHandleReply( errorCode, eventManager ) )
1814*48a54d36SAndroid Build Coastguard Worker
1815*48a54d36SAndroid Build Coastguard Worker {
1816*48a54d36SAndroid Build Coastguard Worker
1817*48a54d36SAndroid Build Coastguard Worker CComBSTR hostName;
1818*48a54d36SAndroid Build Coastguard Worker
1819*48a54d36SAndroid Build Coastguard Worker DWORD sockaddrLen;
1820*48a54d36SAndroid Build Coastguard Worker
1821*48a54d36SAndroid Build Coastguard Worker DNSSDAddressFamily addressFamily;
1822*48a54d36SAndroid Build Coastguard Worker
1823*48a54d36SAndroid Build Coastguard Worker char addressUTF8[INET6_ADDRSTRLEN];
1824*48a54d36SAndroid Build Coastguard Worker
1825*48a54d36SAndroid Build Coastguard Worker DWORD addressLen = sizeof( addressUTF8 );
1826*48a54d36SAndroid Build Coastguard Worker
1827*48a54d36SAndroid Build Coastguard Worker CComBSTR address;
1828*48a54d36SAndroid Build Coastguard Worker
1829*48a54d36SAndroid Build Coastguard Worker BOOL ok;
1830*48a54d36SAndroid Build Coastguard Worker
1831*48a54d36SAndroid Build Coastguard Worker
1832*48a54d36SAndroid Build Coastguard Worker
1833*48a54d36SAndroid Build Coastguard Worker ok = UTF8ToBSTR( hostNameUTF8, hostName );
1834*48a54d36SAndroid Build Coastguard Worker
1835*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1836*48a54d36SAndroid Build Coastguard Worker
1837*48a54d36SAndroid Build Coastguard Worker
1838*48a54d36SAndroid Build Coastguard Worker
1839*48a54d36SAndroid Build Coastguard Worker switch ( rawAddress->sa_family )
1840*48a54d36SAndroid Build Coastguard Worker
1841*48a54d36SAndroid Build Coastguard Worker {
1842*48a54d36SAndroid Build Coastguard Worker
1843*48a54d36SAndroid Build Coastguard Worker case AF_INET:
1844*48a54d36SAndroid Build Coastguard Worker
1845*48a54d36SAndroid Build Coastguard Worker {
1846*48a54d36SAndroid Build Coastguard Worker
1847*48a54d36SAndroid Build Coastguard Worker addressFamily = kDNSSDAddressFamily_IPv4;
1848*48a54d36SAndroid Build Coastguard Worker
1849*48a54d36SAndroid Build Coastguard Worker sockaddrLen = sizeof( sockaddr_in );
1850*48a54d36SAndroid Build Coastguard Worker
1851*48a54d36SAndroid Build Coastguard Worker }
1852*48a54d36SAndroid Build Coastguard Worker
1853*48a54d36SAndroid Build Coastguard Worker break;
1854*48a54d36SAndroid Build Coastguard Worker
1855*48a54d36SAndroid Build Coastguard Worker
1856*48a54d36SAndroid Build Coastguard Worker
1857*48a54d36SAndroid Build Coastguard Worker case AF_INET6:
1858*48a54d36SAndroid Build Coastguard Worker
1859*48a54d36SAndroid Build Coastguard Worker {
1860*48a54d36SAndroid Build Coastguard Worker
1861*48a54d36SAndroid Build Coastguard Worker addressFamily = kDNSSDAddressFamily_IPv6;
1862*48a54d36SAndroid Build Coastguard Worker
1863*48a54d36SAndroid Build Coastguard Worker sockaddrLen = sizeof( sockaddr_in6 );
1864*48a54d36SAndroid Build Coastguard Worker
1865*48a54d36SAndroid Build Coastguard Worker }
1866*48a54d36SAndroid Build Coastguard Worker
1867*48a54d36SAndroid Build Coastguard Worker break;
1868*48a54d36SAndroid Build Coastguard Worker
1869*48a54d36SAndroid Build Coastguard Worker }
1870*48a54d36SAndroid Build Coastguard Worker
1871*48a54d36SAndroid Build Coastguard Worker
1872*48a54d36SAndroid Build Coastguard Worker
1873*48a54d36SAndroid Build Coastguard Worker err = WSAAddressToStringA( ( LPSOCKADDR ) rawAddress, sockaddrLen, NULL, addressUTF8, &addressLen );
1874*48a54d36SAndroid Build Coastguard Worker
1875*48a54d36SAndroid Build Coastguard Worker require_noerr( err, exit );
1876*48a54d36SAndroid Build Coastguard Worker
1877*48a54d36SAndroid Build Coastguard Worker ok = UTF8ToBSTR( addressUTF8, address );
1878*48a54d36SAndroid Build Coastguard Worker
1879*48a54d36SAndroid Build Coastguard Worker require_action( ok, exit, err = kDNSServiceErr_Unknown );
1880*48a54d36SAndroid Build Coastguard Worker
1881*48a54d36SAndroid Build Coastguard Worker
1882*48a54d36SAndroid Build Coastguard Worker
1883*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_AddressFound( service, ( DNSSDFlags ) flags, ifIndex, hostName, addressFamily, address, ttl );
1884*48a54d36SAndroid Build Coastguard Worker
1885*48a54d36SAndroid Build Coastguard Worker }
1886*48a54d36SAndroid Build Coastguard Worker
1887*48a54d36SAndroid Build Coastguard Worker
1888*48a54d36SAndroid Build Coastguard Worker
1889*48a54d36SAndroid Build Coastguard Worker exit:
1890*48a54d36SAndroid Build Coastguard Worker
1891*48a54d36SAndroid Build Coastguard Worker
1892*48a54d36SAndroid Build Coastguard Worker
1893*48a54d36SAndroid Build Coastguard Worker return;
1894*48a54d36SAndroid Build Coastguard Worker
1895*48a54d36SAndroid Build Coastguard Worker }
1896*48a54d36SAndroid Build Coastguard Worker
1897*48a54d36SAndroid Build Coastguard Worker
1898*48a54d36SAndroid Build Coastguard Worker
1899*48a54d36SAndroid Build Coastguard Worker
1900*48a54d36SAndroid Build Coastguard Worker
1901*48a54d36SAndroid Build Coastguard Worker void DNSSD_API
NATPortMappingReply(DNSServiceRef sdRef,DNSServiceFlags flags,uint32_t ifIndex,DNSServiceErrorType errorCode,uint32_t externalAddress,DNSServiceProtocol protocol,uint16_t internalPort,uint16_t externalPort,uint32_t ttl,void * context)1902*48a54d36SAndroid Build Coastguard Worker CDNSSDService::NATPortMappingReply
1903*48a54d36SAndroid Build Coastguard Worker (
1904*48a54d36SAndroid Build Coastguard Worker DNSServiceRef sdRef,
1905*48a54d36SAndroid Build Coastguard Worker DNSServiceFlags flags,
1906*48a54d36SAndroid Build Coastguard Worker uint32_t ifIndex,
1907*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType errorCode,
1908*48a54d36SAndroid Build Coastguard Worker uint32_t externalAddress, /* four byte IPv4 address in network byte order */
1909*48a54d36SAndroid Build Coastguard Worker DNSServiceProtocol protocol,
1910*48a54d36SAndroid Build Coastguard Worker uint16_t internalPort,
1911*48a54d36SAndroid Build Coastguard Worker uint16_t externalPort, /* may be different than the requested port */
1912*48a54d36SAndroid Build Coastguard Worker uint32_t ttl, /* may be different than the requested ttl */
1913*48a54d36SAndroid Build Coastguard Worker void *context
1914*48a54d36SAndroid Build Coastguard Worker )
1915*48a54d36SAndroid Build Coastguard Worker
1916*48a54d36SAndroid Build Coastguard Worker {
1917*48a54d36SAndroid Build Coastguard Worker
1918*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDService> * service = NULL;
1919*48a54d36SAndroid Build Coastguard Worker
1920*48a54d36SAndroid Build Coastguard Worker CDNSSDEventManager * eventManager = NULL;
1921*48a54d36SAndroid Build Coastguard Worker
1922*48a54d36SAndroid Build Coastguard Worker int err = 0;
1923*48a54d36SAndroid Build Coastguard Worker
1924*48a54d36SAndroid Build Coastguard Worker
1925*48a54d36SAndroid Build Coastguard Worker
1926*48a54d36SAndroid Build Coastguard Worker service = ( CComObject< CDNSSDService>* ) context;
1927*48a54d36SAndroid Build Coastguard Worker
1928*48a54d36SAndroid Build Coastguard Worker require_action( service, exit, err = kDNSServiceErr_Unknown );
1929*48a54d36SAndroid Build Coastguard Worker
1930*48a54d36SAndroid Build Coastguard Worker
1931*48a54d36SAndroid Build Coastguard Worker
1932*48a54d36SAndroid Build Coastguard Worker if ( service->ShouldHandleReply( errorCode, eventManager ) )
1933*48a54d36SAndroid Build Coastguard Worker
1934*48a54d36SAndroid Build Coastguard Worker {
1935*48a54d36SAndroid Build Coastguard Worker
1936*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_MappingCreated( service, ( DNSSDFlags ) flags, ifIndex, externalAddress, ( DNSSDAddressFamily ) ( protocol & 0x8 ), ( DNSSDProtocol ) ( protocol & 0x80 ), ntohs( internalPort ), ntohs( externalPort ), ttl );
1937*48a54d36SAndroid Build Coastguard Worker
1938*48a54d36SAndroid Build Coastguard Worker }
1939*48a54d36SAndroid Build Coastguard Worker
1940*48a54d36SAndroid Build Coastguard Worker
1941*48a54d36SAndroid Build Coastguard Worker
1942*48a54d36SAndroid Build Coastguard Worker exit:
1943*48a54d36SAndroid Build Coastguard Worker
1944*48a54d36SAndroid Build Coastguard Worker
1945*48a54d36SAndroid Build Coastguard Worker
1946*48a54d36SAndroid Build Coastguard Worker return;
1947*48a54d36SAndroid Build Coastguard Worker
1948*48a54d36SAndroid Build Coastguard Worker }
1949*48a54d36SAndroid Build Coastguard Worker
1950*48a54d36SAndroid Build Coastguard Worker
1951*48a54d36SAndroid Build Coastguard Worker
1952*48a54d36SAndroid Build Coastguard Worker
1953*48a54d36SAndroid Build Coastguard Worker
1954*48a54d36SAndroid Build Coastguard Worker void DNSSD_API
RegisterRecordReply(DNSServiceRef sdRef,DNSRecordRef RecordRef,DNSServiceFlags flags,DNSServiceErrorType errorCode,void * context)1955*48a54d36SAndroid Build Coastguard Worker CDNSSDService::RegisterRecordReply
1956*48a54d36SAndroid Build Coastguard Worker (
1957*48a54d36SAndroid Build Coastguard Worker DNSServiceRef sdRef,
1958*48a54d36SAndroid Build Coastguard Worker DNSRecordRef RecordRef,
1959*48a54d36SAndroid Build Coastguard Worker DNSServiceFlags flags,
1960*48a54d36SAndroid Build Coastguard Worker DNSServiceErrorType errorCode,
1961*48a54d36SAndroid Build Coastguard Worker void *context
1962*48a54d36SAndroid Build Coastguard Worker )
1963*48a54d36SAndroid Build Coastguard Worker
1964*48a54d36SAndroid Build Coastguard Worker {
1965*48a54d36SAndroid Build Coastguard Worker
1966*48a54d36SAndroid Build Coastguard Worker CComObject<CDNSSDRecord> * record = NULL;
1967*48a54d36SAndroid Build Coastguard Worker
1968*48a54d36SAndroid Build Coastguard Worker CDNSSDService * service = NULL;
1969*48a54d36SAndroid Build Coastguard Worker
1970*48a54d36SAndroid Build Coastguard Worker CDNSSDEventManager * eventManager = NULL;
1971*48a54d36SAndroid Build Coastguard Worker
1972*48a54d36SAndroid Build Coastguard Worker int err = 0;
1973*48a54d36SAndroid Build Coastguard Worker
1974*48a54d36SAndroid Build Coastguard Worker
1975*48a54d36SAndroid Build Coastguard Worker
1976*48a54d36SAndroid Build Coastguard Worker record = ( CComObject< CDNSSDRecord >* ) context;
1977*48a54d36SAndroid Build Coastguard Worker
1978*48a54d36SAndroid Build Coastguard Worker require_action( record, exit, err = kDNSServiceErr_Unknown );
1979*48a54d36SAndroid Build Coastguard Worker
1980*48a54d36SAndroid Build Coastguard Worker service = record->GetServiceObject();
1981*48a54d36SAndroid Build Coastguard Worker
1982*48a54d36SAndroid Build Coastguard Worker require_action( service, exit, err = kDNSServiceErr_Unknown );
1983*48a54d36SAndroid Build Coastguard Worker
1984*48a54d36SAndroid Build Coastguard Worker
1985*48a54d36SAndroid Build Coastguard Worker
1986*48a54d36SAndroid Build Coastguard Worker if ( service->ShouldHandleReply( errorCode, eventManager ) )
1987*48a54d36SAndroid Build Coastguard Worker
1988*48a54d36SAndroid Build Coastguard Worker {
1989*48a54d36SAndroid Build Coastguard Worker
1990*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_RecordRegistered( record, ( DNSSDFlags ) flags );
1991*48a54d36SAndroid Build Coastguard Worker
1992*48a54d36SAndroid Build Coastguard Worker }
1993*48a54d36SAndroid Build Coastguard Worker
1994*48a54d36SAndroid Build Coastguard Worker
1995*48a54d36SAndroid Build Coastguard Worker
1996*48a54d36SAndroid Build Coastguard Worker exit:
1997*48a54d36SAndroid Build Coastguard Worker
1998*48a54d36SAndroid Build Coastguard Worker
1999*48a54d36SAndroid Build Coastguard Worker
2000*48a54d36SAndroid Build Coastguard Worker return;
2001*48a54d36SAndroid Build Coastguard Worker
2002*48a54d36SAndroid Build Coastguard Worker }
2003*48a54d36SAndroid Build Coastguard Worker
2004*48a54d36SAndroid Build Coastguard Worker
2005*48a54d36SAndroid Build Coastguard Worker
2006*48a54d36SAndroid Build Coastguard Worker
2007*48a54d36SAndroid Build Coastguard Worker
2008*48a54d36SAndroid Build Coastguard Worker BOOL
2009*48a54d36SAndroid Build Coastguard Worker
ShouldHandleReply(DNSServiceErrorType errorCode,CDNSSDEventManager * & eventManager)2010*48a54d36SAndroid Build Coastguard Worker CDNSSDService::ShouldHandleReply( DNSServiceErrorType errorCode, CDNSSDEventManager *& eventManager )
2011*48a54d36SAndroid Build Coastguard Worker
2012*48a54d36SAndroid Build Coastguard Worker {
2013*48a54d36SAndroid Build Coastguard Worker
2014*48a54d36SAndroid Build Coastguard Worker BOOL ok = FALSE;
2015*48a54d36SAndroid Build Coastguard Worker
2016*48a54d36SAndroid Build Coastguard Worker
2017*48a54d36SAndroid Build Coastguard Worker
2018*48a54d36SAndroid Build Coastguard Worker if ( !this->Stopped() )
2019*48a54d36SAndroid Build Coastguard Worker
2020*48a54d36SAndroid Build Coastguard Worker {
2021*48a54d36SAndroid Build Coastguard Worker
2022*48a54d36SAndroid Build Coastguard Worker eventManager = this->GetEventManager();
2023*48a54d36SAndroid Build Coastguard Worker
2024*48a54d36SAndroid Build Coastguard Worker require_action( eventManager, exit, ok = FALSE );
2025*48a54d36SAndroid Build Coastguard Worker
2026*48a54d36SAndroid Build Coastguard Worker
2027*48a54d36SAndroid Build Coastguard Worker
2028*48a54d36SAndroid Build Coastguard Worker if ( !errorCode )
2029*48a54d36SAndroid Build Coastguard Worker
2030*48a54d36SAndroid Build Coastguard Worker {
2031*48a54d36SAndroid Build Coastguard Worker
2032*48a54d36SAndroid Build Coastguard Worker ok = TRUE;
2033*48a54d36SAndroid Build Coastguard Worker
2034*48a54d36SAndroid Build Coastguard Worker }
2035*48a54d36SAndroid Build Coastguard Worker
2036*48a54d36SAndroid Build Coastguard Worker else
2037*48a54d36SAndroid Build Coastguard Worker
2038*48a54d36SAndroid Build Coastguard Worker {
2039*48a54d36SAndroid Build Coastguard Worker
2040*48a54d36SAndroid Build Coastguard Worker eventManager->Fire_OperationFailed( this, ( DNSSDError ) errorCode );
2041*48a54d36SAndroid Build Coastguard Worker
2042*48a54d36SAndroid Build Coastguard Worker }
2043*48a54d36SAndroid Build Coastguard Worker
2044*48a54d36SAndroid Build Coastguard Worker }
2045*48a54d36SAndroid Build Coastguard Worker
2046*48a54d36SAndroid Build Coastguard Worker
2047*48a54d36SAndroid Build Coastguard Worker
2048*48a54d36SAndroid Build Coastguard Worker exit:
2049*48a54d36SAndroid Build Coastguard Worker
2050*48a54d36SAndroid Build Coastguard Worker
2051*48a54d36SAndroid Build Coastguard Worker
2052*48a54d36SAndroid Build Coastguard Worker return ok;
2053*48a54d36SAndroid Build Coastguard Worker
2054*48a54d36SAndroid Build Coastguard Worker }
2055*48a54d36SAndroid Build Coastguard Worker
2056*48a54d36SAndroid Build Coastguard Worker
2057*48a54d36SAndroid Build Coastguard Worker
2058*48a54d36SAndroid Build Coastguard Worker
2059*48a54d36SAndroid Build Coastguard Worker
2060*48a54d36SAndroid Build Coastguard Worker LRESULT CALLBACK
2061*48a54d36SAndroid Build Coastguard Worker
WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)2062*48a54d36SAndroid Build Coastguard Worker CDNSSDService::WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
2063*48a54d36SAndroid Build Coastguard Worker
2064*48a54d36SAndroid Build Coastguard Worker {
2065*48a54d36SAndroid Build Coastguard Worker
2066*48a54d36SAndroid Build Coastguard Worker if ( msg == WM_SOCKET )
2067*48a54d36SAndroid Build Coastguard Worker
2068*48a54d36SAndroid Build Coastguard Worker {
2069*48a54d36SAndroid Build Coastguard Worker
2070*48a54d36SAndroid Build Coastguard Worker SocketMap::iterator it;
2071*48a54d36SAndroid Build Coastguard Worker
2072*48a54d36SAndroid Build Coastguard Worker
2073*48a54d36SAndroid Build Coastguard Worker
2074*48a54d36SAndroid Build Coastguard Worker it = m_socketMap.find( ( SOCKET ) wParam );
2075*48a54d36SAndroid Build Coastguard Worker
2076*48a54d36SAndroid Build Coastguard Worker check( it != m_socketMap.end() );
2077*48a54d36SAndroid Build Coastguard Worker
2078*48a54d36SAndroid Build Coastguard Worker
2079*48a54d36SAndroid Build Coastguard Worker
2080*48a54d36SAndroid Build Coastguard Worker if ( it != m_socketMap.end() )
2081*48a54d36SAndroid Build Coastguard Worker
2082*48a54d36SAndroid Build Coastguard Worker {
2083*48a54d36SAndroid Build Coastguard Worker
2084*48a54d36SAndroid Build Coastguard Worker DNSServiceProcessResult( it->second->m_primary );
2085*48a54d36SAndroid Build Coastguard Worker
2086*48a54d36SAndroid Build Coastguard Worker }
2087*48a54d36SAndroid Build Coastguard Worker
2088*48a54d36SAndroid Build Coastguard Worker }
2089*48a54d36SAndroid Build Coastguard Worker
2090*48a54d36SAndroid Build Coastguard Worker
2091*48a54d36SAndroid Build Coastguard Worker
2092*48a54d36SAndroid Build Coastguard Worker return DefWindowProc(hWnd, msg, wParam, lParam);;
2093*48a54d36SAndroid Build Coastguard Worker
2094*48a54d36SAndroid Build Coastguard Worker }
2095*48a54d36SAndroid Build Coastguard Worker
2096