/*++
    Copyright (c)  1994 Microsoft Corp.
    Module:

        gd.idl
    
    Abstract:
        IDL file for Gopher server.
        Declares the Gopher Server RPC APIs.
        It also declares the types required for the RPC interface.
    
    Author:
        Murali R. Krishnan  ( MuraliK)      11-Nov-1994
    
    History:

        MuraliK         17-Feb-1995   Integrated with inetasrv.h
--*/

/*
        Unique user ID for RPC interface ( generated using uuidgen)
*/
[
    uuid(04fcb220-fcfd-11cd-bec8-00aa0047ae4e),
    version(1.0),
    pointer_default( unique)
]

//
//  the interface keyword
//

interface gopherd

//
//  Definitions of Interface functions which are RPCable
// 
{

//
//  include the pre-defined constants and types required
//
 
import "infoimp.idl";

# include <lmcons.h>

/************************************************************
 *  Type Definitions
 ************************************************************/

typedef  [handle]   LPWSTR  GOPHERD_IMPERSONATE_HANDLE;

typedef  struct   _GOPHERD_USER_ENUM_STRUCT {

    // 
    //  Represents a flex array of items returned
    //

    DWORD  dwEntriesRead;
    [size_is( dwEntriesRead)]  LPGOPHERD_USER_INFO  lpUsers;

} GOPHERD_USER_ENUM_STRUCT,  * LPGOPHERD_USER_ENUM_STRUCT;

/************************************************************
 *  Function Prototypes 
 ************************************************************/

//
//  Admin API
//

//
// in, out is required for lpbInfo, otherwise unique can't be used to pass 
//  NULL pointer
//

DWORD
NET_API_FUNCTION
R_GdGetAdminInformation(
    [ in, string, unique]       GOPHERD_IMPERSONATE_HANDLE pszServer,
    [ out]                      LPGOPHERD_CONFIG_INFO * ppConfigInfo
    );

DWORD
NET_API_FUNCTION
R_GdSetAdminInformation(
    [ in, string, unique]       GOPHERD_IMPERSONATE_HANDLE pszServer,
    [ in, ref]                  LPGOPHERD_CONFIG_INFO pConfigInfo
    );

//
//      User enumeration
//

DWORD 
NET_API_FUNCTION
R_GdEnumerateUsers(
    [ in, string,  unique]      GOPHERD_IMPERSONATE_HANDLE pszServer,
    [ out]                      LPGOPHERD_USER_ENUM_STRUCT lpUserBuffer
    );

DWORD
NET_API_FUNCTION
R_GdDisconnectUser(
    [ in, string, unique]       GOPHERD_IMPERSONATE_HANDLE pszServer,
    [ in]                       DWORD idUser
    );

//
//  Information about statistics
//


DWORD
NET_API_FUNCTION
R_GdGetStatistics(
    [ in, string, unique]       GOPHERD_IMPERSONATE_HANDLE pszServer,
    [ out]                      LPGOPHERD_STATISTICS_INFO  lpStat 
    );

DWORD
NET_API_FUNCTION
R_GdClearStatistics(
    [ in, string, unique]       GOPHERD_IMPERSONATE_HANDLE pszServer
    );


}


/********************* End of File ***************************/