/*++

Copyright (c) 1997-2000  Microsoft Corporation

Module Name:

    dnsrsvlr.idl

Abstract:

    This is the IDL file that describes the RPC interface for the
    DNS Caching Resolver Service internal APIs.

Author:

    Glenn Curtis (glennc)     25-Feb-1997

Environment:

    User Mode -Win32

Revision History:

    Jim Gilroy (jamesg)         June 2000       -- start cleaning the mess

--*/


//
// Interface Attributes
//

[
    uuid(45776b01-5956-4485-9f80-f428f7d60129),
    version(2.0),
    pointer_default(unique)
]

//
// Interface Keyword
//

interface DnsResolver

//
// Interface Body
//
{

import "imports.idl";

//
// Handle types
//

typedef [handle] wchar_t * DNS_RPC_HANDLE;


//
// Function prototypes
//

DNS_STATUS
CRrReadCache(
    [in,string,unique] DNS_RPC_HANDLE           Reserved,
    [out]              PDNS_RPC_CACHE_TABLE *   ppCacheTable
    );

DNS_STATUS
CRrReadCacheEntry(
    [in,string,unique] DNS_RPC_HANDLE   Reserved,
    [in,string]        wchar_t *        Name,
    [in]               WORD             Type,
    [out]              PDNS_RECORD *    ppRRSet
    );

DNS_STATUS
CRrGetHashTableStats(
    [in,string,unique] DNS_RPC_HANDLE     Reserved,
    [out]              LPDWORD            pdwCacheHashTableSize,
    [out]              LPDWORD            pdwCacheHashTableBucketSize,
    [out]              LPDWORD            pdwNumberOfCacheEntries,
    [out]              LPDWORD            pdwNumberOfRecords,
    [out]              LPDWORD            pdwNumberOfExpiredRecords,
    [out]              PDNS_STATS_TABLE * ppStatsTable
    );

#if 0
BOOL
CRrRegisterParamChange(
    [in,string,unique] DNS_RPC_HANDLE   Reserved,
    [in,string]        wchar_t *        ServiceName,
    [in]               DWORD            Control
    );

BOOL
CRrDeregisterParamChange(
    [in,string,unique] DNS_RPC_HANDLE   Reserved,
    [in,string]        wchar_t *        ServiceName
    );
#endif

DNS_STATUS
CRrUpdateTest(
    [in,string,unique] DNS_RPC_HANDLE   Reserved,
    [in,string]        wchar_t *        Name,
    [in]               DWORD            fOptions,
    [in]               IP_ADDRESS       Server
    );


//
//  New functions
//
//  Most of the above is either useless or poorly designed.
//  Instead of separate IDL, build the new functions here
//  one by one.
//

void
R_ResolverGetConfig(
    [in,string,unique]  DNS_RPC_HANDLE          Handle,
    [in]                DWORD                   Cookie,
    [out]               PRPC_DNS_NETINFO *      ppNetInfo,
    [out]               PDNS_GLOBALS_BLOB *     ppGlobals
    );

DNS_STATUS
R_ResolverFlushCache(
    [in,string,unique]  DNS_RPC_HANDLE          Handle
    );

DNS_STATUS
R_ResolverFlushCacheEntry(
    [in,string,unique]  DNS_RPC_HANDLE          Handle,
    [in,string,unique]  LPWSTR                  pwsName,
    [in]                WORD                    wType
    );

DNS_STATUS
R_ResolverRegisterCluster(
    [in,string,unique]  DNS_RPC_HANDLE          Handle,
    [in]                DWORD                   Tag,
    [in,string,unique]  PWSTR                   pwsName,
    [in]                PRPC_IP_UNION           pIpUnion,
    [in]                DWORD                   Flag
    );

void
R_ResolverGetLocalAddrInfoArray(
    [in,string,unique]  DNS_RPC_HANDLE          Handle,
    [out]               PDNS_ADDR_ARRAY *       ppAddrArray,
    [in]                ENVAR_DWORD_INFO        FilterInfo
    );

DNS_STATUS
R_ResolverQuery(
    [in,string,unique]  DNS_RPC_HANDLE          Handle,
    [in,string,unique]  LPWSTR                  pwsName,
    [in]                WORD                    wType,
    [in]                DWORD                   Flags,
    [out]               PDNS_RECORD *           ppResultRecords
    );

DNS_STATUS
R_ResolverEnumCache(
    [in,string,unique]  DNS_RPC_HANDLE          Handle,
    [in]                PDNS_CACHE_ENUM_REQUEST pRequest,
    [out]               PDNS_CACHE_ENUM *       ppEnum
    );

void
R_ResolverPoke(
    [in,string,unique]  DNS_RPC_HANDLE          Handle,
    [in]                DWORD                   Tag,
    [in]                DWORD                   Id
    );

}

