/********************************************************************/
/**               Copyright(c) 1991 Microsoft Corporation.	   **/
/********************************************************************/

//***
//
// Filename:	dimsvc.idl
//
// Description: Contains the RDimAdmir (DIM Remote) RPC interface
//		        specification for the API associated with the DIM Service.
//              Also contains the RPC specific data structures for
//		        these APIs.
//
// History:     June 11,1995.	NarenG		Created original version.
//


//
// Interface Attributes
//

[
    uuid(8f09f000-b7ed-11ce-bbd2-00001a181cad),
    version(0.0),
    pointer_default(unique)
]


interface dimsvc
{

import   "import.idl";

typedef handle_t DIM_HANDLE;

//
// Generic information container
//

typedef struct _DIM_INFORMATION_CONTAINER
{
    DWORD   dwBufferSize;
    [size_is(dwBufferSize)] LPBYTE pBuffer;

} DIM_INFORMATION_CONTAINER, *PDIM_INFORMATION_CONTAINER;

DWORD
RMprAdminServerGetInfo (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [out] 		        PDIM_INFORMATION_CONTAINER  pInfoStruct
    );

//
// Connection management APIs
//


DWORD
RRasAdminConnectionEnum (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in,out] 		    PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in]                DWORD                       dwPreferedMaximumLength,
    [out]               LPDWORD                     lpdwEntriesRead,
    [out]               LPDWORD                     lpdwTotalEntries,
    [in,out,unique]     LPDWORD                     lpdwResumeHandle
    );

DWORD
RRasAdminConnectionGetInfo (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in]                DWORD                       hDimConnection,
    [out] 		        PDIM_INFORMATION_CONTAINER  pInfoStruct
    );

DWORD
RRasAdminConnectionClearStats (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hDimConnection
    );

//
// Port management APIs
//

DWORD
RRasAdminPortEnum (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in]                DWORD                       hRasConnection,
    [in,out] 		    PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in]                DWORD                       dwPreferedMaximumLength,
    [out]               LPDWORD                     lpdwEntriesRead,
    [out]               LPDWORD                     lpdwTotalEntries,
    [in,out,unique]     LPDWORD                     lpdwResumeHandle
    );

DWORD
RRasAdminPortGetInfo (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in]                DWORD                       hPort,
    [out] 		        PDIM_INFORMATION_CONTAINER  pInfoStruct
    );

DWORD
RRasAdminPortClearStats (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hPort
    );

DWORD
RRasAdminPortReset (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hPort
    );

DWORD
RRasAdminPortDisconnect (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hPort
    );

//
// Interface management APIs
//

typedef struct _DIM_INTERFACE_CONTAINER
{
    DWORD   fGetInterfaceInfo;
    DWORD   dwInterfaceInfoSize;
    [size_is(dwInterfaceInfoSize)]  LPBYTE pInterfaceInfo;

    DWORD   fGetGlobalInfo;
    DWORD  dwGlobalInfoSize;
    [size_is(dwGlobalInfoSize)]     LPBYTE pGlobalInfo;

} DIM_INTERFACE_CONTAINER, *PDIM_INTERFACE_CONTAINER;

DWORD
RRouterInterfaceTransportSetGlobalInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwTransportId,
    [in]                PDIM_INTERFACE_CONTAINER    pInfoStruct
    );

DWORD
RRouterInterfaceTransportGetGlobalInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwTransportId,
    [in,out]            PDIM_INTERFACE_CONTAINER    pInfoStruct
    );

DWORD
RRouterInterfaceGetHandle(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in,string]         LPWSTR                      lpwsInterfaceName,
    [in,out]            LPDWORD                     phInterface,
    [in]                DWORD                       fIncludeClientInterfaces
    );

DWORD
RRouterInterfaceCreate(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in] 		        PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in,out]            LPDWORD                     phInterface
    );

DWORD
RRouterInterfaceGetInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in,out] 	        PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in]                DWORD                       hInterface
    );

DWORD
RRouterInterfaceSetInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in] 		        PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in]                DWORD                       hInterface
    );

DWORD
RRouterInterfaceDelete(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface
    );

DWORD
RRouterInterfaceTransportRemove(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface,
    [in]                DWORD                       dwTransportId
    );


DWORD
RRouterInterfaceTransportAdd(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface,
    [in]                DWORD                       dwTransportId,
    [in]                PDIM_INTERFACE_CONTAINER    pInfoStruct
    );

DWORD
RRouterInterfaceTransportGetInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface,
    [in]                DWORD                       dwTransportId,
    [in,out]            PDIM_INTERFACE_CONTAINER    pInfoStruct
    );

DWORD
RRouterInterfaceTransportSetInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface,
    [in]                DWORD                       dwTransportId,
    [in]                PDIM_INTERFACE_CONTAINER    pInfoStruct
    );

DWORD
RRouterInterfaceEnum (
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in,out] 		    PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in]                DWORD                       dwPreferedMaximumLength,
    [out]               LPDWORD                     lpdwEntriesRead,
    [out]               LPDWORD                     lpdwTotalEntries,
    [in,out,unique]     LPDWORD                     lpdwResumeHandle
    );

DWORD
RRouterInterfaceConnect(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface,
    [in]                ULONG_PTR                   hEvent,
    [in]                DWORD                       fBlocking,
    [in]                DWORD                       dwCallersProcessId
    );

DWORD
RRouterInterfaceDisconnect(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface
    );

DWORD
RRouterInterfaceUpdateRoutes(
    [in]                DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface,
    [in]                DWORD                       dwTransportId,
    [in]                ULONG_PTR                   hEvent,
    [in]                DWORD                       dwClientProcessId
);

DWORD
RRouterInterfaceQueryUpdateResult(
    [in]                DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface,
    [in]                DWORD                       dwTransportId,
    [out]               LPDWORD                     pUpdateResult
);

DWORD
RRouterInterfaceUpdatePhonebookInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hInterface
    );

//
// MIB APIs
//

typedef struct _DIM_MIB_ENTRY_CONTAINER
{
    DWORD  dwMibInEntrySize;
    [size_is(dwMibInEntrySize)] LPBYTE pMibInEntry;

    DWORD  dwMibOutEntrySize;
    [size_is(dwMibOutEntrySize)] LPBYTE pMibOutEntry;

} DIM_MIB_ENTRY_CONTAINER, *PDIM_MIB_ENTRY_CONTAINER;

DWORD
RMIBEntryCreate(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwPid,
    [in]                DWORD                       dwRoutingPid,
    [in]                PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
);

DWORD
RMIBEntryDelete(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwPid,
    [in]                DWORD                       dwRoutingPid,
    [in]                PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
);

DWORD
RMIBEntrySet(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwPid,
    [in]                DWORD                       dwRoutingPid,
    [in]                PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
);

DWORD
RMIBEntryGet(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwPid,
    [in]                DWORD                       dwRoutingPid,
    [in,out]            PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
);

DWORD
RMIBEntryGetFirst(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwPid,
    [in]                DWORD                       dwRoutingPid,
    [in,out]            PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
);

DWORD
RMIBEntryGetNext(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwPid,
    [in]                DWORD                       dwRoutingPid,
    [in,out]            PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
);

DWORD
RMIBGetTrapInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwPid,
    [in]                DWORD                       dwRoutingPid,
    [in,out]            PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
);

DWORD
RMIBSetTrapInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwPid,
    [in]                DWORD                       dwRoutingPid,
    [in]                ULONG_PTR                   hEvent,
    [in]                DWORD                       dwCurrentProcessId,
    [in,out]            PDIM_MIB_ENTRY_CONTAINER    pInfoStuct
);

DWORD
RRasAdminConnectionNotification(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       fRegister,
    [in]                DWORD                       dwClientProcessId,
    [in]                ULONG_PTR                   hEventNotification
);

DWORD
RRasAdminSendUserMessage(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       hDimConnection,
    [in,string]         LPWSTR                      lpwszMessage
    );

DWORD
RRouterDeviceEnum(
    [in]                DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in,out]            PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in,out]            LPDWORD                     lpdwTotalEntries
    );

DWORD
RRouterInterfaceTransportCreate(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwTransportId,
    [in,string]         LPWSTR                      lpwsTransportName,
    [in]                PDIM_INTERFACE_CONTAINER    pInfoStruct,
    [in,string]         LPWSTR                      lpwsDLLPath
    );

DWORD 
RRouterInterfaceDeviceGetInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in,out] 	        PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in]                DWORD                       dwIndex,
    [in]                DWORD                       hInterface
    );

DWORD
RRouterInterfaceDeviceSetInfo(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in] 		        PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in]                DWORD                       dwIndex,
    [in]                DWORD                       hInterface
    );

DWORD
RRouterInterfaceSetCredentialsEx(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in] 		        PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in]                DWORD                       hInterface
    );

DWORD
RRouterInterfaceGetCredentialsEx(
    [in] 	            DIM_HANDLE                  hDimServer,
    [in]                DWORD                       dwLevel,
    [in,out] 	        PDIM_INFORMATION_CONTAINER  pInfoStruct,
    [in]                DWORD                       hInterface
    );

}


