summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSWindows/DLLX/DNSSDService.h
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSWindows/DLLX/DNSSDService.h')
-rwxr-xr-xmDNSResponder/mDNSWindows/DLLX/DNSSDService.h429
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)
+