|
|
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
iisassoc.hxx
Abstract:
This include file contains the declaration of the IIS_ASSOCIATION class. An IIS_ASSOCIATION is used to create an N-way association between IIS_ENDPOINTs and IIS_SERVER_INSTANCEs.
The current IIS_ASSOCIATION is hash based. It may hash on either the IP address, the host name, or both. The hash method is specified when the object is constructed.
Author:
Keith Moore (keithmo) 16-Jan-1997
Revision History:
--*/
#ifndef _IISASSOC_HXX_
#define _IISASSOC_HXX_
//
// We will need to do some perf tuning to get a more reasonable value for
// this number. We may need to make this metabase configurable, or at least
// base it on the 'size' of the server.
//
#define DEFAULT_ASSOCIATION_HASH_BUCKETS 97
typedef BOOL (WINAPI * LPFN_ASSOCIATION_CALLBACK)( IN LPVOID CallbackContext, IN LPVOID DescriptorContext, IN DWORD IpAddress, IN const CHAR * HostName );
class IIS_ASSOCIATION {
public:
//
// This hash context is used to avoid redundant hash context calculations
// while searching through multiple associations.
//
typedef struct _HASH_CONTEXT {
DWORD IpAddressHash; DWORD HostNameHash;
} HASH_CONTEXT, *PHASH_CONTEXT;
static VOID InitializeHashContext( OUT PHASH_CONTEXT HashContext ) { HashContext->IpAddressHash = 0; HashContext->HostNameHash = 0; }
//
// Usual constructor/destructor stuff.
//
IIS_ASSOCIATION( IN BOOL HashIpAddress, IN BOOL HashHostName, IN INT NumHashBuckets = DEFAULT_ASSOCIATION_HASH_BUCKETS );
~IIS_ASSOCIATION();
//
// Descriptor management.
//
DWORD AddDescriptor( IN DWORD IpAddress, IN const CHAR * HostName OPTIONAL, IN LPVOID Context, IN OUT PHASH_CONTEXT HashContext = NULL );
DWORD LookupDescriptor( IN DWORD IpAddress, IN const CHAR * HostName OPTIONAL, OUT LPVOID *Context, IN OUT PHASH_CONTEXT HashContext = NULL );
DWORD RemoveDescriptor( IN DWORD IpAddress, IN const CHAR * HostName OPTIONAL, OUT LPVOID *Context, IN OUT PHASH_CONTEXT HashContext = NULL );
VOID EnumDescriptors( IN LPFN_ASSOCIATION_CALLBACK Callback, IN LPVOID CallbackContext );
private:
VOID CalculateHash( IN DWORD IpAddress, IN const CHAR * HostName OPTIONAL, OUT PHASH_CONTEXT HashContext );
struct _HASH_ENTRY * FindDescriptor( IN DWORD IpAddress, IN const CHAR * HostName OPTIONAL, IN PHASH_CONTEXT HashContext );
struct _HASH_ENTRY * CreateHashEntry( IN DWORD IpAddress, IN const CHAR * HostName OPTIONAL, IN PHASH_CONTEXT HashContext );
INT m_NumHashBuckets; PLIST_ENTRY m_HashBuckets; BOOL m_HashIpAddress; BOOL m_HashHostName;
}; // IIS_ASSOCIATION
#endif // _IISASSOC_HXX_
|