//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1994 - 1999
//
//  File:       rpcrt.idl
//
//--------------------------------------------------------------------------

// fool the preprocessor about the async attribute until the public headers are fixed
cpp_quote("#ifdef WIN98")
cpp_quote("#ifdef TARGET_IS_NT50_OR_LATER")
cpp_quote("#undef TARGET_IS_NT50_OR_LATER")
cpp_quote("#define TARGET_IS_NT50_OR_LATER 1")
cpp_quote("#endif")
cpp_quote("#endif")

[
uuid(19bb5060-2e68-101b-b4d9-00000b65c782),
version(2.0)
]
interface RpcRuntimePerf
{

//
// Test cases.
//

[v1_enum]
typedef enum {
       NULL_CALL,
       NI_CALL,
       WRITE_1K,
       READ_1K,
       WRITE_4K,
       READ_4K,
       WRITE32K,
       READ32K,
       CONTEXT_CALL,
       FIXED_BIND,
       REBIND,
       DYNAMIC_BIND,
	   ASYNC_NULL_CALL,
	   ASYNC_STA_NULL_CALL
       } TEST_TYPE;

const unsigned long TEST_MAX = 14;

//
// Client test case control functions follow
//

const unsigned long PERF_TOO_MANY_CLIENTS = 20001;
const unsigned long PERF_TESTS_DONE       = 20002;

	// non-blocking
error_status_t
     BeginTest([in] handle_t      Binding,
               [out] long      *ClientId
              );

	// blocking
error_status_t
     NextTest(     [in] handle_t    Binding,
                   [out] TEST_TYPE *Test,
                   [out] long      *Iterations
             );

	// blocking
error_status_t
     EndTest( [in] handle_t      Binding,
              [in] unsigned long mseconds
            );

//
// Test APis
//

typedef [context_handle] void *PERF_CONTEXT;

[idempotent] void NullCall([in] handle_t Binding);
             void NICall  ([in] handle_t Binding);
[idempotent] void Write1K ([in] handle_t Binding, [in]  byte buffer[1024]);
[idempotent] void Read1K  ([in] handle_t Binding, [out] byte buffer[1024]);
[idempotent] void Write4K ([in] handle_t Binding, [in]  byte buffer[4096-4*24]);
[idempotent] void Read4K  ([in] handle_t Binding, [out] byte buffer[4069-4*24]);
[idempotent] void Write32K([in] handle_t Binding, [in]  byte buffer[32*1024]);
[idempotent] void Read32K ([in] handle_t Binding, [out] byte buffer[32*1024]);
             void ContextNullCall([in] PERF_CONTEXT pContext);
			 void AsyncNullCall([in] handle_t Binding);
			 void AsyncSTANullCall([in] handle_t Binding);

//
// Used for setting up the context handle test(s)
//

PERF_CONTEXT OpenContext(handle_t Binding);
void CloseContext([in,out] PERF_CONTEXT *ppContext);

//
// Used for fixed binding test.
//

[string]
char * GetFixedEp(handle_t Binding);

}

