X-Git-Url: https://git.saurik.com/apple/mdnsresponder.git/blobdiff_plain/b7388343e7dbd0ce526282fbd93d546e3b0610db..8e92c31c9a45a66732f5bc7afbc9f5596c17e91d:/mDNSWindows/Applications/ExplorerPlugin/ExplorerBarWindow.h diff --git a/mDNSWindows/Applications/ExplorerPlugin/ExplorerBarWindow.h b/mDNSWindows/Applications/ExplorerPlugin/ExplorerBarWindow.h new file mode 100644 index 0000000..ac234f5 --- /dev/null +++ b/mDNSWindows/Applications/ExplorerPlugin/ExplorerBarWindow.h @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2003-2004 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + + Change History (most recent first): + +$Log: ExplorerBarWindow.h,v $ +Revision 1.3 2004/04/15 01:00:05 bradley +Removed support for automatically querying for A/AAAA records when resolving names. Platforms +without .local name resolving support will need to manually query for A/AAAA records as needed. + +Revision 1.2 2004/04/08 09:43:43 bradley +Changed callback calling conventions to __stdcall so they can be used with C# delegates. + +Revision 1.1 2004/01/30 03:01:56 bradley +Explorer Plugin to browse for Rendezvous-enabled Web and FTP servers from within Internet Explorer. + +*/ + +#ifndef __EXPLORER_BAR_WINDOW__ +#define __EXPLORER_BAR_WINDOW__ + +#pragma once + +#include "afxtempl.h" + +#include "DNSSD.h" + +//=========================================================================================================================== +// 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; + + 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; + size_t mSize; + + TextRecord( void ) + { + mData = NULL; + mSize = 0; + } + + ~TextRecord( void ) + { + if( mData ) + { + free( mData ); + } + } + + void GetData( void *outData, size_t *outSize ) + { + if( outData ) + { + *( (void **) outData ) = mData; + } + if( outSize ) + { + *outSize = mSize; + } + } + + OSStatus SetData( const void *inData, size_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; + HTREEITEM treeItem; + bool treeFirst; + ExplorerBarWindow * obj; + bool needsLogin; + + ServiceHandlerEntry( void ) + { + type = NULL; + urlScheme = NULL; + ref = NULL; + treeItem = NULL; + treeFirst = true; + obj = NULL; + needsLogin = false; + } + + ~ServiceHandlerEntry( void ) + { + if( ref ) + { + DNSServiceRefDeallocate( ref ); + } + + 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 ); + + // Browsing + + static void CALLBACK_COMPAT + BrowseCallBack( + DNSServiceRef inRef, + DNSServiceFlags inFlags, + uint32_t inInterfaceIndex, + DNSServiceErrorType inErrorCode, + const char * inName, + const char * inType, + const char * inDomain, + void * inContext ); + afx_msg LONG OnServiceAdd( WPARAM inWParam, LPARAM inLParam ); + afx_msg LONG OnServiceRemove( WPARAM inWParam, LPARAM inLParam ); + + // Resolving + + OSStatus StartResolve( ServiceInfo *inService ); + void StopResolve( void ); + + static void CALLBACK_COMPAT + 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 ); + afx_msg LONG OnResolve( WPARAM inWParam, LPARAM inLParam ); + + // Accessors + + public: + + ExplorerBar * GetOwner( void ) const { return( mOwner ); } + void SetOwner( ExplorerBar *inOwner ) { mOwner = inOwner; } + + DECLARE_MESSAGE_MAP() +}; + +#endif // __EXPLORER_BAR_WINDOW__