diff options
Diffstat (limited to 'mDNSResponder/mDNSWindows/DLLX/DNSSDService.h')
-rwxr-xr-x | mDNSResponder/mDNSWindows/DLLX/DNSSDService.h | 429 |
1 files changed, 429 insertions, 0 deletions
diff --git a/mDNSResponder/mDNSWindows/DLLX/DNSSDService.h b/mDNSResponder/mDNSWindows/DLLX/DNSSDService.h new file mode 100755 index 00000000..5eb8dcbd --- /dev/null +++ b/mDNSResponder/mDNSWindows/DLLX/DNSSDService.h @@ -0,0 +1,429 @@ +/* -*- Mode: C; tab-width: 4 -*- + * + * Copyright (c) 2009 Apple Computer, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#pragma once + +#include "resource.h" // main symbols + + + +#include "DLLX.h" + +#include "DNSSDEventManager.h" + +#include <CommonServices.h> + +#include <DebugServices.h> + +#include <dns_sd.h> + +#include <map> + + + + + +#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA) + +#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms." + +#endif + + + + + + + +// CDNSSDService + + + +class ATL_NO_VTABLE CDNSSDService : + + public CComObjectRootEx<CComSingleThreadModel>, + + public CComCoClass<CDNSSDService, &CLSID_DNSSDService>, + + public IDispatchImpl<IDNSSDService, &IID_IDNSSDService, &LIBID_Bonjour, /*wMajor =*/ 1, /*wMinor =*/ 0> + +{ + +public: + + + + typedef CComObjectRootEx<CComSingleThreadModel> Super; + + + + CDNSSDService() + + : + + m_isPrimary( FALSE ), + + m_eventManager( NULL ), + + m_stopped( FALSE ), + + m_primary( NULL ), + + m_subord( NULL ) + + { + + } + + + +DECLARE_REGISTRY_RESOURCEID(IDR_DNSSDSERVICE) + + + + + +BEGIN_COM_MAP(CDNSSDService) + + COM_INTERFACE_ENTRY(IDNSSDService) + + COM_INTERFACE_ENTRY(IDispatch) + +END_COM_MAP() + + + + DECLARE_PROTECT_FINAL_CONSTRUCT() + + + + HRESULT + + FinalConstruct(); + + + + void + + FinalRelease(); + + + +public: + + + + inline DNSServiceRef + + GetPrimaryRef() + + { + + return m_primary; + + } + + + + inline void + + SetPrimaryRef( DNSServiceRef primary ) + + { + + m_primary = primary; + + } + + + + inline DNSServiceRef + + GetSubordRef() + + { + + return m_subord; + + } + + + + inline void + + SetSubordRef( DNSServiceRef subord ) + + { + + m_subord = subord; + + } + + + + inline CDNSSDEventManager* + + GetEventManager() + + { + + return m_eventManager; + + } + + + + inline void + + SetEventManager( IDNSSDEventManager * eventManager ) + + { + + if ( m_eventManager ) + + { + + m_eventManager->Release(); + + m_eventManager = NULL; + + } + + + + if ( eventManager ) + + { + + m_eventManager = dynamic_cast< CDNSSDEventManager* >( eventManager ); + + check( m_eventManager ); + + m_eventManager->AddRef(); + + } + + } + + + + inline BOOL + + Stopped() + + { + + return m_stopped; + + } + + + +private: + + + + static void DNSSD_API + DomainEnumReply + ( + DNSServiceRef sdRef, + DNSServiceFlags flags, + uint32_t ifIndex, + DNSServiceErrorType errorCode, + const char *replyDomain, + void *context + ); + + + + static void DNSSD_API + BrowseReply + ( + DNSServiceRef sdRef, + DNSServiceFlags flags, + uint32_t interfaceIndex, + DNSServiceErrorType errorCode, + const char *serviceName, + const char *regtype, + const char *replyDomain, + void *context + ); + + + + static void DNSSD_API + + ResolveReply + + ( + DNSServiceRef sdRef, + DNSServiceFlags flags, + uint32_t interfaceIndex, + DNSServiceErrorType errorCode, + const char *fullname, + const char *hosttarget, + uint16_t port, + uint16_t txtLen, + const unsigned char *txtRecord, + void *context + + ); + + + + static void DNSSD_API + RegisterReply + ( + DNSServiceRef sdRef, + DNSServiceFlags flags, + DNSServiceErrorType errorCode, + const char *name, + const char *regtype, + const char *domain, + void *context + ); + + + + static void DNSSD_API + QueryRecordReply + ( + DNSServiceRef sdRef, + DNSServiceFlags flags, + uint32_t interfaceIndex, + DNSServiceErrorType errorCode, + const char *fullname, + uint16_t rrtype, + uint16_t rrclass, + uint16_t rdlen, + const void *rdata, + uint32_t ttl, + void *context + ); + + + + static void DNSSD_API + GetAddrInfoReply + ( + DNSServiceRef sdRef, + DNSServiceFlags flags, + uint32_t interfaceIndex, + DNSServiceErrorType errorCode, + const char *hostname, + const struct sockaddr *address, + uint32_t ttl, + void *context + ); + + + + static void DNSSD_API + NATPortMappingReply + ( + DNSServiceRef sdRef, + DNSServiceFlags flags, + uint32_t interfaceIndex, + DNSServiceErrorType errorCode, + uint32_t externalAddress, /* four byte IPv4 address in network byte order */ + DNSServiceProtocol protocol, + uint16_t internalPort, + uint16_t externalPort, /* may be different than the requested port */ + uint32_t ttl, /* may be different than the requested ttl */ + void *context + ); + + + + static void DNSSD_API + RegisterRecordReply + ( + DNSServiceRef sdRef, + DNSRecordRef RecordRef, + DNSServiceFlags flags, + DNSServiceErrorType errorCode, + void *context + ); + + + + inline BOOL + + ShouldHandleReply( DNSServiceErrorType errorCode, CDNSSDEventManager *& eventManager ); + + + + static LRESULT CALLBACK + + WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ); + + + + typedef std::map< SOCKET, CDNSSDService* > SocketMap; + + + + static BOOL m_registeredWindowClass; + + static HWND m_hiddenWindow; + + static SocketMap m_socketMap; + + CDNSSDEventManager * m_eventManager; + + BOOL m_stopped; + + BOOL m_isPrimary; + + DNSServiceRef m_primary; + + DNSServiceRef m_subord; + +public: + + STDMETHOD(EnumerateDomains)(DNSSDFlags flags, ULONG ifIndex, IDNSSDEventManager *eventManager, IDNSSDService **service); + + STDMETHOD(Browse)(DNSSDFlags flags, ULONG interfaceIndex, BSTR regtype, BSTR domain, IDNSSDEventManager* eventManager, IDNSSDService** sdref); + + STDMETHOD(Resolve)(DNSSDFlags flags, ULONG ifIndex, BSTR serviceName, BSTR regType, BSTR domain, IDNSSDEventManager* eventManager, IDNSSDService** service); + + STDMETHOD(Register)(DNSSDFlags flags, ULONG ifIndex, BSTR name, BSTR regType, BSTR domain, BSTR host, USHORT port, ITXTRecord *record, IDNSSDEventManager *eventManager, IDNSSDService **service); + + STDMETHOD(QueryRecord)(DNSSDFlags flags, ULONG ifIndex, BSTR fullname, DNSSDRRType rrtype, DNSSDRRClass rrclass, IDNSSDEventManager *eventManager, IDNSSDService **service); + + STDMETHOD(RegisterRecord)(DNSSDFlags flags, ULONG ifIndex, BSTR fullname, DNSSDRRType rrtype, DNSSDRRClass rrclass, VARIANT rdata, ULONG ttl, IDNSSDEventManager* eventManager, IDNSSDRecord** record); + + STDMETHOD(AddRecord)(DNSSDFlags flags, DNSSDRRType rrtype, VARIANT rdata, ULONG ttl, IDNSSDRecord ** record); + + STDMETHOD(ReconfirmRecord)(DNSSDFlags flags, ULONG ifIndex, BSTR fullname, DNSSDRRType rrtype, DNSSDRRClass rrclass, VARIANT rdata); + + STDMETHOD(GetProperty)(BSTR prop, VARIANT * value); + + STDMETHOD(GetAddrInfo)(DNSSDFlags flags, ULONG ifIndex, DNSSDAddressFamily addressFamily, BSTR hostname, IDNSSDEventManager *eventManager, IDNSSDService **service); + + STDMETHOD(NATPortMappingCreate)(DNSSDFlags flags, ULONG ifIndex, DNSSDAddressFamily addressFamily, DNSSDProtocol protocol, USHORT internalPort, USHORT externalPort, ULONG ttl, IDNSSDEventManager *eventManager, IDNSSDService **service); + + STDMETHOD(Stop)(void); + +}; + + + +OBJECT_ENTRY_AUTO(__uuidof(DNSSDService), CDNSSDService) + |