|
|
/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
rescache.h
Abstract:
Contains prototypes, structures, manifests for rescache.c
Author:
Richard L Firth (rfirth) 10-Jul-1994
Revision History:
rfirth 10-Jul-1994 Created
--*/
//
// manifests
//
#define RESOLVER_CACHE_DISABLED -1
#define MINIMUM_RESOLVER_CACHE_ENTRIES 1
#define MAXIMUM_RESOLVER_CACHE_ENTRIES 128 // arbitrary, just in case user decides to wack it up
#define LIVE_FOREVER ((DWORD)-1)
#define LIVE_DEFAULT ((DWORD)0)
//
// types
//
//
// HOSTENT_CACHE_ENTRY_STATE - the hostent cache entry can be in-use, unused, or
// awaiting deletion
//
typedef enum { ENTRY_UNUSED = 1, ENTRY_IN_USE, ENTRY_DELETE } HOSTENT_CACHE_ENTRY_STATE;
//
// RESOLVER_CACHE_ENTRY - we maintain a doubly-linked list of these. The list is
// maintained in MRU order - we throw out the one at the far end of the list.
// The structure is variable length, dependent on the amount of data in the
// hostent. We also honour the time-to-live in the DNS answer. When we get a
// response we set the ExpirationTime field. On future cache hits, if the
// current time is >= the ExpirationTime value then we must throw out this entry
// and refresh the cache
//
typedef struct {
//
// ListEntry - cache entries comprise a double-linked list
//
LIST_ENTRY ListEntry;
//
// ExpirationTime - formed by adding the time-to-live value from the DNS
// response to the result obtained from time(). If ever time() returns a
// value >= ExpirationTime, this entry is stale and must be refreshed
//
DWORD ExpirationTime;
//
// HostName - original name resolved to Hostent
//
LPSTR HostName;
//
// State - unused, in-use, or delete
//
HOSTENT_CACHE_ENTRY_STATE State;
//
// ReferenceCount - only change State when zero
//
LONG ReferenceCount;
//
// Hostent - the fixed data portion of a HOSTENT structure. The variable
// part overflows the end of this structure
//
HOSTENT Hostent;
} RESOLVER_CACHE_ENTRY, *LPRESOLVER_CACHE_ENTRY;
//
// prototypes
//
#if defined(__cplusplus)
extern "C" { #endif
BOOL QueryHostentCache( SERIALIZED_LIST* pResolverCache, IN LPSTR Name OPTIONAL, IN LPBYTE Address OPTIONAL, OUT LPHOSTENT * Hostent, OUT LPDWORD TimeToLive );
VOID CacheHostent( SERIALIZED_LIST* pResolverCache, IN LPSTR lpszHostName, IN LPHOSTENT pHostent, IN DWORD TimeToLive, IN VOID** pAlloc=NULL, IN DWORD dwAllocSize=0 );
VOID FlushHostentCache( SERIALIZED_LIST* pResolverCache );
VOID ThrowOutHostentCacheEntry( SERIALIZED_LIST* pResolverCache, IN LPHOSTENT lpHostent );
VOID ReleaseHostentCacheEntry( SERIALIZED_LIST* pResolverCache, IN LPHOSTENT lpHostent );
#if defined(__cplusplus)
} #endif
#if defined(RNR_SUPPORTED)
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
rescache.h
Abstract:
Contains name resolution cache structure definition
Contents:
Author:
Shishir Pardikar 2-14-96
Environment:
Win32 user mode
Revision History:
2-14-96 shishirp Created
--*/
#if defined(__cplusplus)
extern "C" { #endif
DWORD InitNameresCache( VOID );
DWORD AddNameresCacheEntry( DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpName, int cntAddresses, LPCSADDR_INFO lpAddressInfoList );
DWORD RemoveNameresCacheEntry( DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpszName );
DWORD RemoveNameresCacheEntryByAddr( int cntAddresses, LPCSADDR_INFO lpCsaddrInfo );
DWORD GetNameresCacheEntry( DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpName, INT *lpcntAddresses, LPCSADDR_INFO *lplpCsaddrInfoList );
DWORD DeinitNameresCache( VOID );
#if defined(__cplusplus)
} #endif
#endif // defined(RNR_SUPPORTED)
|