|
|
/*++
Copyright (c) 1998, Microsoft Corporation
Module Name:
dnslookup.h
Abstract:
This module contains declarations related to the DNS server's lookup table.
Author:
Tom Brown (tbrown) 25-Oct-1999
Revision History:
Raghu Gatta (rgatta) 21-Oct-2000 Time macros + New Functions
--*/
#ifndef _NATHLP_DNSLOOKUP_H_
#define _NATHLP_DNSLOOKUP_H_
#define LOCAL_DOMAIN L"local"
#define LOCAL_DOMAIN_ANSI "local"
//
// move to somewhere else if necessary
//
//
// Time conversion constants and macros
//
#define SYSTIME_UNITS_IN_1_MSEC (1000 * 10)
#define SYSTIME_UNITS_IN_1_SEC (1000 * SYSTIME_UNITS_IN_1_MSEC)
//
// macro to get system time in 100-nanosecond units
//
#define DnsQuerySystemTime(p) NtQuerySystemTime((p))
//
// macros to convert time between 100-nanosecond, 1millsec, and 1 sec units
//
#define DnsSystemTimeToMillisecs(p) { \
DWORD _r; \ *(p) = RtlExtendedLargeIntegerDivide(*(p), SYSTIME_UNITS_IN_1_MSEC, &_r);\ }
#define DnsMillisecsToSystemTime(p) \
*(p) = RtlExtendedIntegerMultiply(*(p), SYSTIME_UNITS_IN_1_MSEC)
#define DnsSecsToSystemTime(p) \
*(p) = RtlExtendedIntegerMultiply(*(p), SYSTIME_UNITS_IN_1_SEC)
#define CACHE_ENTRY_EXPIRY (7 * 24 * 60 * 60) // (matches DHCP lease time)
typedef ULONG DNS_ADDRESS;
typedef struct { DNS_ADDRESS ulAddress; FILETIME ftExpires; //ULONG ulExpires;
} ADDRESS_INFO, *PADDRESS_INFO;
typedef struct { WCHAR *pszName; UINT cAddresses; DWORD cAddressesAllocated; PADDRESS_INFO aAddressInfo; } DNS_ENTRY, *PDNS_ENTRY;
typedef struct { DNS_ADDRESS ulAddress; WCHAR *pszName; // do not free this! It is the same pointer as used in the
// forward lookup table.
} REVERSE_DNS_ENTRY, *PREVERSE_DNS_ENTRY;
extern CRITICAL_SECTION DnsTableLock; // protects both tables
extern RTL_GENERIC_TABLE g_DnsTable, g_ReverseDnsTable;
ULONG DnsInitializeTableManagement( VOID );
VOID DnsShutdownTableManagement( VOID );
VOID DnsEmptyTables( VOID );
BOOL DnsRegisterName( WCHAR *pszName, UINT cAddresses, ADDRESS_INFO aAddressInfo[] );
VOID DnsAddAddressForName( WCHAR *pszName, DNS_ADDRESS ulAddress, FILETIME ftExpires //ULONG ulExpires
);
VOID DnsDeleteAddressForName( WCHAR *pszName, DNS_ADDRESS ulAddress );
PDNS_ENTRY DnsLookupAddress( WCHAR *pszName );
PREVERSE_DNS_ENTRY DnsLookupName( DNS_ADDRESS ulAddress );
VOID DnsDeleteName( WCHAR *pszName );
VOID DnsUpdateName( WCHAR *pszName, DNS_ADDRESS ulAddress );
VOID DnsUpdate( CHAR *pszName, ULONG len, ULONG ulAddress );
VOID DnsAddSelf( VOID );
VOID DnsCleanupTables( VOID );
DWORD DnsConvertHostNametoUnicode( UINT CodePage, CHAR *pszHostName, PWCHAR DnsICSDomainSuffix, PWCHAR *ppszUnicodeFQDN );
BOOL ConvertToUtf8( IN UINT CodePage, IN LPSTR pszName, OUT PCHAR *ppszUtf8Name, OUT ULONG *pUtf8NameSize );
BOOL ConvertUTF8ToUnicode( IN LPBYTE UTF8String, OUT LPWSTR *ppszUnicodeName, OUT DWORD *pUnicodeNameSize );
#endif
|