#define DCERPC_REQUEST_TIMEOUT 60
+/* dcerpc pipe flags */
+#define DCERPC_DEBUG_PRINT_IN (1<<0)
+#define DCERPC_DEBUG_PRINT_OUT (1<<1)
+#define DCERPC_DEBUG_PRINT_BOTH (DCERPC_DEBUG_PRINT_IN | DCERPC_DEBUG_PRINT_OUT)
+
+#define DCERPC_DEBUG_VALIDATE_IN (1<<2)
+#define DCERPC_DEBUG_VALIDATE_OUT (1<<3)
+#define DCERPC_DEBUG_VALIDATE_BOTH (DCERPC_DEBUG_VALIDATE_IN | DCERPC_DEBUG_VALIDATE_OUT)
+
+#define DCERPC_CONNECT (1<<4)
+#define DCERPC_SIGN (1<<5)
+#define DCERPC_SEAL (1<<6)
+
+#define DCERPC_PUSH_BIGENDIAN (1<<7)
+#define DCERPC_PULL_BIGENDIAN (1<<8)
+
+#define DCERPC_SCHANNEL (1<<9)
+
+#define DCERPC_ANON_FALLBACK (1<<10)
+
+/* use a 128 bit session key */
+#define DCERPC_SCHANNEL_128 (1<<12)
+
+/* check incoming pad bytes */
+#define DCERPC_DEBUG_PAD_CHECK (1<<13)
+
+/* set LIBNDR_FLAG_REF_ALLOC flag when decoding NDR */
+#define DCERPC_NDR_REF_ALLOC (1<<14)
+
+#define DCERPC_AUTH_OPTIONS (DCERPC_SEAL|DCERPC_SIGN|DCERPC_SCHANNEL|DCERPC_AUTH_SPNEGO|DCERPC_AUTH_KRB5|DCERPC_AUTH_NTLM)
+
+/* select spnego auth */
+#define DCERPC_AUTH_SPNEGO (1<<15)
+
+/* select krb5 auth */
+#define DCERPC_AUTH_KRB5 (1<<16)
+
+#define DCERPC_SMB2 (1<<17)
+
+/* select NTLM auth */
+#define DCERPC_AUTH_NTLM (1<<18)
+
+/* this triggers the DCERPC_PFC_FLAG_CONC_MPX flag in the bind request */
+#define DCERPC_CONCURRENT_MULTIPLEX (1<<19)
+
+/* this triggers the DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGN flag in the bind request */
+#define DCERPC_HEADER_SIGNING (1<<20)
+
+/* use NDR64 transport */
+#define DCERPC_NDR64 (1<<21)
+
+/* this describes a binding to a particular transport/pipe */
+struct dcerpc_binding {
+ enum dcerpc_transport_t transport;
+ struct ndr_syntax_id object;
+ const char *host;
+ const char *target_hostname;
+ const char *endpoint;
+ const char **options;
+ uint32_t flags;
+ uint32_t assoc_group_id;
+};
+#if 0
+struct dcerpc_pdu {
+ void *bla;
+};
+
+struct dcerpc_transport_connection {
+ enum dcerpc_transport_t transport;
+ struct tstream_context *stream;
+ uint32_t call_id;
+ uint32_t srv_max_xmit_frag;
+ uint32_t srv_max_recv_frag;
+ uint32_t flags;
+ struct smb_iconv_convenience *iconv_convenience;
+ struct tevent_queue *send_queue;
+};
+
+struct dcerpc_auth_context {
+ uint32_t context_id;
+ uint8_t auth_level;
+ struct gensec_context *gensec;
+};
+
+struct dcerpc_syntax_context {
+ uint32_t context_id;
+ struct ndr_syntax_id object;
+ struct ndr_syntax_id interface_id;
+ uint32_t ndr_flags;
+ struct ndr_table *table;
+};
+
+struct dcerpc_established_binding {
+ struct dcerpc_transport_connection *transport;
+ struct dcerpc_auth_context *auth;
+ struct dcerpc_syntax_context *syntax;
+};
+
+struct tevent_req *dcerpc_request_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct dcerpc_transport_connection *conn,
+ struct dcerpc_auth_context *auth,
+ struct dcerpc_syntax_context *syntax,
+ uint32_t opnum;
+ void *r);
+NTSTATUS dcerpc_request_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx);
+
+NTSTATUS dcerpc_foo(struct dcerpc_established_binding *binding,
+ int param1, /* in */
+ int *val, /* ref, out */
+ WERROR *result);
+#endif
+
struct dcerpc_pipe_connect {
struct dcerpc_pipe *pipe;
struct dcerpc_binding *binding;