|
|
// Copyright (c) 1997-1999 Microsoft Corporation
//
// DNS API wrappers
//
// 12-16-97 sburns
#ifndef DNS_HPP_INCLUDED
#define DNS_HPP_INCLUDED
// A collection of DNS related names.
namespace Dns { // the number of bytes in a full DNS name to reserve for stuff
// netlogon pre-/appends to DNS names when registering them
const size_t SRV_RECORD_RESERVE = 100;
// the max lengths, in bytes, of strings when represented in the UTF-8
// character set. These are the limits we expose to the user
const size_t MAX_NAME_LENGTH = DNS_MAX_NAME_LENGTH - SRV_RECORD_RESERVE; const size_t MAX_LABEL_LENGTH = DNS_MAX_LABEL_LENGTH;
// Compares DNS names with DnsNameCompareEx (see private\inc\dnsapi.h),
// returning the result.
DNS_NAME_COMPARE_STATUS CompareNames(const String& dnsNameLeft, const String& dnsNameRight);
// Returns the name of the parent DNS domain. E.g. if "foo.bar.com" is
// passed, then "bar.com" is the result. If "com" is passed, then "."
// (the root zone) is the result.
//
// domainName - the name of the domain
String GetParentDomainName(const String& domainName);
// Returns corresponding NetBIOS name, or empty string if mapping failed.
// Not for domain names -- just computer names!
//
// hostname - the name to be mapped to a NetBIOS name. This name must be a
// valid DNS name.
//
// err - ptr to a variable that will accept the win error code returned if
// the conversion fails. If the conversion fails, the return value is
// the empty string.
String HostnameToNetbiosName(const String& hostname, HRESULT* err=0);
// returns true if the DNS client is configured, false if not.
bool IsClientConfigured();
// returns true if the Microsoft DNS server is installed on this computer,
// false if not.
bool IsServiceInstalled();
// returns true if the Microsoft DNS server is currently running on this
// computer, false if not.
bool IsServiceRunning();
enum ValidateResult { VALID, INVALID, NON_RFC, TOO_LONG, NUMERIC, BAD_CHARS };
// Validates a single DNS label for proper length (in the UTF-8
// character set) and syntax.
//
// candidateDNSLabel - the label to be validated
ValidateResult ValidateDnsLabelSyntax(const String& candidateDNSLabel);
// Validates the format, not the existence, of a DNS name. Checks for
// proper length in the UTF-8 character set, and proper syntax.
//
// candidateDNSName - in, the DNS name to verify.
//
// maxUnicodeCharacters - in, maximum number of uncode characters to
// allow in the name. If the name contains more characters than this,
// TOO_LONG is returned.
//
// maxUTF8Bytes - in, maximum number of bytes allowed to represent the name
// in the UTF-8 character set. Since a unicode character requires at
// least one byte in UTF-8, this value must be >= maxUnicodeCharacters.
ValidateResult ValidateDnsNameSyntax( const String& candidateDNSName, size_t maxUnicodeCharacters = Dns::MAX_NAME_LENGTH, size_t maxUTF8Bytes = Dns::MAX_NAME_LENGTH); }
DNS_STATUS MyDnsValidateName(const String& name, DNS_NAME_FORMAT format);
String MyDnsStatusString(DNS_STATUS status);
// caller must free the result with MyDnsRecordListFree
DNS_STATUS MyDnsQuery( const String& name, WORD type, DWORD options, DNS_RECORD*& result);
void MyDnsRecordListFree(DNS_RECORD* rl);
#endif // DNS_HPP_INCLUDED
|