summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/Clients/ExplorerPlugin/ExplorerBarWindow.h
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/Clients/ExplorerPlugin/ExplorerBarWindow.h')
-rw-r--r--mDNSResponder/Clients/ExplorerPlugin/ExplorerBarWindow.h264
1 files changed, 264 insertions, 0 deletions
diff --git a/mDNSResponder/Clients/ExplorerPlugin/ExplorerBarWindow.h b/mDNSResponder/Clients/ExplorerPlugin/ExplorerBarWindow.h
new file mode 100644
index 00000000..e8163181
--- /dev/null
+++ b/mDNSResponder/Clients/ExplorerPlugin/ExplorerBarWindow.h
@@ -0,0 +1,264 @@
+/* -*- Mode: C; tab-width: 4 -*-
+ *
+ * Copyright (c) 2003-2004 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.
+ */
+
+#ifndef __EXPLORER_BAR_WINDOW__
+#define __EXPLORER_BAR_WINDOW__
+
+#pragma once
+
+#include "afxtempl.h"
+
+#include "dns_sd.h"
+#include <list>
+
+//===========================================================================================================================
+// Structures
+//===========================================================================================================================
+
+// Forward Declarations
+
+struct ServiceHandlerEntry;
+class ExplorerBarWindow;
+
+// ServiceInfo
+
+struct ServiceInfo
+{
+ CString displayName;
+ char * name;
+ char * type;
+ char * domain;
+ uint32_t ifi;
+ HTREEITEM item;
+ ServiceHandlerEntry * handler;
+ DWORD refs;
+
+ ServiceInfo( void )
+ {
+ item = NULL;
+ type = NULL;
+ domain = NULL;
+ handler = NULL;
+ }
+
+ ~ServiceInfo( void )
+ {
+ if( name )
+ {
+ free( name );
+ }
+ if( type )
+ {
+ free( type );
+ }
+ if( domain )
+ {
+ free( domain );
+ }
+ }
+};
+
+typedef CArray < ServiceInfo *, ServiceInfo * > ServiceInfoArray;
+
+// TextRecord
+
+struct TextRecord
+{
+ uint8_t * mData;
+ uint16_t mSize;
+
+ TextRecord( void )
+ {
+ mData = NULL;
+ mSize = 0;
+ }
+
+ ~TextRecord( void )
+ {
+ if( mData )
+ {
+ free( mData );
+ }
+ }
+
+ void GetData( void *outData, uint16_t *outSize )
+ {
+ if( outData )
+ {
+ *( (void **) outData ) = mData;
+ }
+ if( outSize )
+ {
+ *outSize = mSize;
+ }
+ }
+
+ OSStatus SetData( const void *inData, uint16_t inSize )
+ {
+ OSStatus err;
+ uint8_t * newData;
+
+ newData = (uint8_t *) malloc( inSize );
+ require_action( newData, exit, err = kNoMemoryErr );
+ memcpy( newData, inData, inSize );
+
+ if( mData )
+ {
+ free( mData );
+ }
+ mData = newData;
+ mSize = inSize;
+ err = kNoErr;
+
+exit:
+ return( err );
+ }
+};
+
+// ResolveInfo
+
+struct ResolveInfo
+{
+ CString host;
+ uint16_t port;
+ uint32_t ifi;
+ TextRecord txt;
+ ServiceHandlerEntry * handler;
+};
+
+// ServiceHandlerEntry
+
+struct ServiceHandlerEntry
+{
+ const char * type;
+ const char * urlScheme;
+ DNSServiceRef ref;
+ ServiceInfoArray array;
+ ExplorerBarWindow * obj;
+ bool needsLogin;
+
+ ServiceHandlerEntry( void )
+ {
+ type = NULL;
+ urlScheme = NULL;
+ ref = NULL;
+ obj = NULL;
+ needsLogin = false;
+ }
+
+ ~ServiceHandlerEntry( void )
+ {
+ int i;
+ int n;
+
+ n = (int) array.GetSize();
+ for( i = 0; i < n; ++i )
+ {
+ delete array[ i ];
+ }
+ }
+};
+
+typedef CArray < ServiceHandlerEntry *, ServiceHandlerEntry * > ServiceHandlerArray;
+
+//===========================================================================================================================
+// ExplorerBarWindow
+//===========================================================================================================================
+
+class ExplorerBar; // Forward Declaration
+
+class ExplorerBarWindow : public CWnd
+{
+protected:
+
+ExplorerBar * mOwner;
+CTreeCtrl mTree;
+
+ServiceHandlerArray mServiceHandlers;
+DNSServiceRef mResolveServiceRef;
+
+public:
+
+ExplorerBarWindow( void );
+virtual ~ExplorerBarWindow( void );
+
+protected:
+
+// General
+
+afx_msg int OnCreate( LPCREATESTRUCT inCreateStruct );
+afx_msg void OnDestroy( void );
+afx_msg void OnSize( UINT inType, int inX, int inY );
+afx_msg void OnDoubleClick( NMHDR *inNMHDR, LRESULT *outResult );
+afx_msg LRESULT OnServiceEvent( WPARAM inWParam, LPARAM inLParam );
+
+// Browsing
+
+static void DNSSD_API
+BrowseCallBack(
+ DNSServiceRef inRef,
+ DNSServiceFlags inFlags,
+ uint32_t inInterfaceIndex,
+ DNSServiceErrorType inErrorCode,
+ const char * inName,
+ const char * inType,
+ const char * inDomain,
+ void * inContext );
+LONG OnServiceAdd( ServiceInfo * service );
+LONG OnServiceRemove( ServiceInfo * service );
+
+// Resolving
+
+OSStatus StartResolve( ServiceInfo *inService );
+void StopResolve( void );
+
+
+void Stop( DNSServiceRef ref );
+
+
+static void DNSSD_API
+ResolveCallBack(
+ DNSServiceRef inRef,
+ DNSServiceFlags inFlags,
+ uint32_t inInterfaceIndex,
+ DNSServiceErrorType inErrorCode,
+ const char * inFullName,
+ const char * inHostName,
+ uint16_t inPort,
+ uint16_t inTXTSize,
+ const char * inTXT,
+ void * inContext );
+LONG OnResolve( ResolveInfo * resolve );
+
+// Accessors
+
+public:
+
+ExplorerBar * GetOwner( void ) const { return( mOwner ); }
+void SetOwner( ExplorerBar *inOwner ) { mOwner = inOwner; }
+
+DECLARE_MESSAGE_MAP()
+private:
+
+typedef std::list< DNSServiceRef > ServiceRefList;
+
+HTREEITEM m_about;
+ServiceRefList m_serviceRefs;
+CImageList m_imageList;
+};
+
+#endif // __EXPLORER_BAR_WINDOW__