/* header auto-generated by pidl */

#include <stdint.h>

#ifndef _HEADER_rpcecho
#define _HEADER_rpcecho

struct echo_info1 {
	uint8_t v;
};

struct echo_info2 {
	uint16_t v;
};

struct echo_info3 {
	uint32_t v;
};

struct echo_info4 {
	uint64_t v;
};

struct echo_info5 {
	uint8_t v1;
	uint64_t v2;
};

struct echo_info6 {
	uint8_t v1;
	struct echo_info1 info1;
};

struct echo_info7 {
	uint8_t v1;
	struct echo_info4 info4;
};

union echo_Info {
	struct echo_info1 info1;/* [case] */
	struct echo_info2 info2;/* [case(2)] */
	struct echo_info3 info3;/* [case(3)] */
	struct echo_info4 info4;/* [case(4)] */
	struct echo_info5 info5;/* [case(5)] */
	struct echo_info6 info6;/* [case(6)] */
	struct echo_info7 info7;/* [case(7)] */
}/* [switch_type(uint16)] */;

#ifndef USE_UINT_ENUMS
enum echo_Enum1 {
	ECHO_ENUM1=1,
	ECHO_ENUM2=2
}
#else
enum echo_Enum1 { __donnot_use_enum_echo_Enum1=0x7FFFFFFF}
#define ECHO_ENUM1 ( 1 )
#define ECHO_ENUM2 ( 2 )
#endif
;

#ifndef USE_UINT_ENUMS
enum echo_Enum1_32 {
	ECHO_ENUM1_32=1,
	ECHO_ENUM2_32=2
}
#else
enum echo_Enum1_32 { __donnot_use_enum_echo_Enum1_32=0x7FFFFFFF}
#define ECHO_ENUM1_32 ( 1 )
#define ECHO_ENUM2_32 ( 2 )
#endif
;

struct echo_Enum2 {
	enum echo_Enum1 e1;
	enum echo_Enum1_32 e2;
};

union echo_Enum3 {
	enum echo_Enum1 e1;/* [case(ECHO_ENUM1)] */
	struct echo_Enum2 e2;/* [case(ECHO_ENUM2)] */
}/* [switch_type(uint16)] */;

struct echo_Surrounding {
	uint32_t x;
	uint16_t *surrounding;/* [size_is(x)] */
};


struct echo_AddOne {
	struct {
		uint32_t in_data;
	} in;

	struct {
		uint32_t *out_data;/* [ref] */
	} out;

};


struct echo_EchoData {
	struct {
		uint32_t len;
		uint8_t *in_data;/* [size_is(len)] */
	} in;

	struct {
		uint8_t *out_data;/* [size_is(len)] */
	} out;

};


struct echo_SinkData {
	struct {
		uint32_t len;
		uint8_t *data;/* [size_is(len)] */
	} in;

};


struct echo_SourceData {
	struct {
		uint32_t len;
	} in;

	struct {
		uint8_t *data;/* [size_is(len)] */
	} out;

};


struct echo_TestCall {
	struct {
		const char *s1;/* [ref,charset(UTF16)] */
	} in;

	struct {
		const char **s2;/* [ref,charset(UTF16)] */
	} out;

};


struct echo_TestCall2 {
	struct {
		uint16_t level;
	} in;

	struct {
		union echo_Info *info;/* [ref,switch_is(level)] */
		NTSTATUS result;
	} out;

};


struct echo_TestSleep {
	struct {
		uint32_t seconds;
	} in;

	struct {
		uint32_t result;
	} out;

};


struct echo_TestEnum {
	struct {
		enum echo_Enum1 *foo1;/* [ref] */
		struct echo_Enum2 *foo2;/* [ref] */
		union echo_Enum3 *foo3;/* [ref,switch_is(*foo1)] */
	} in;

	struct {
		enum echo_Enum1 *foo1;/* [ref] */
		struct echo_Enum2 *foo2;/* [ref] */
		union echo_Enum3 *foo3;/* [ref,switch_is(*foo1)] */
	} out;

};


struct echo_TestSurrounding {
	struct {
		struct echo_Surrounding *data;/* [ref] */
	} in;

	struct {
		struct echo_Surrounding *data;/* [ref] */
	} out;

};


struct echo_TestDoublePointer {
	struct {
		uint16_t ***data;/* [ref] */
	} in;

	struct {
		uint16_t result;
	} out;

};

#endif /* _HEADER_rpcecho */