diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-01-09 08:34:05 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:08:34 -0500 |
commit | 6836f5d0b167027908da9a08b9b219520997b563 (patch) | |
tree | be9fcc45bd4cb753a7be128a4b9fed39666ed010 /source4/librpc/rpc/dcerpc.h | |
parent | 3feb4423f3ec35dd3dfa2c358797a4f6a86b2fb5 (diff) | |
download | samba-6836f5d0b167027908da9a08b9b219520997b563.tar.gz samba-6836f5d0b167027908da9a08b9b219520997b563.tar.bz2 samba-6836f5d0b167027908da9a08b9b219520997b563.zip |
r4616: the first phase in the addition of proper support for
dcerpc_alter_context and multiple context_ids in the dcerpc client
library.
This stage does the following:
- split "struct dcerpc_pipe" into two parts, the main part being "struct dcerpc_connection", which
contains all the parts not dependent on the context, and "struct dcerpc_pipe" which has
the context dependent part. This is similar to the layering in libcli_*() for SMB
- disable the current dcerpc_alter code. I've used a #warning until i
get the 2nd phase finished. I don't know how portable #warning is, but
it won't be long before I add full alter context support anyway, so it won't last long
- cleanup the allocation of dcerpc_pipe structures. The previous code
was quite awkward.
(This used to be commit 4004c69937be7e5dae56f9567ca607f982d395d3)
Diffstat (limited to 'source4/librpc/rpc/dcerpc.h')
-rw-r--r-- | source4/librpc/rpc/dcerpc.h | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h index 1b2feeadb2..00f1fb6488 100644 --- a/source4/librpc/rpc/dcerpc.h +++ b/source4/librpc/rpc/dcerpc.h @@ -1,9 +1,10 @@ /* Unix SMB/CIFS implementation. - DCERPC interface structures + + DCERPC client side interface structures Copyright (C) Tim Potter 2003 - Copyright (C) Andrew Tridgell 2003 + Copyright (C) Andrew Tridgell 2003-2005 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -28,17 +29,19 @@ enum dcerpc_transport_t { /* this defines a generic security context for signed/sealed dcerpc pipes. */ -struct dcerpc_pipe; +struct dcerpc_connection; struct dcerpc_security { struct dcerpc_auth *auth_info; struct gensec_security *generic_state; /* get the session key */ - NTSTATUS (*session_key)(struct dcerpc_pipe *, DATA_BLOB *); + NTSTATUS (*session_key)(struct dcerpc_connection *, DATA_BLOB *); }; -struct dcerpc_pipe { - int reference_count; +/* + this holds the information that is not specific to a particular rpc context_id +*/ +struct dcerpc_connection { uint32_t call_id; uint32_t srv_max_xmit_frag; uint32_t srv_max_recv_frag; @@ -46,35 +49,28 @@ struct dcerpc_pipe { struct dcerpc_security security_state; const char *binding_string; - struct dcerpc_syntax_id syntax; - struct dcerpc_syntax_id transfer_syntax; - struct dcerpc_transport { enum dcerpc_transport_t transport; void *private; - NTSTATUS (*shutdown_pipe)(struct dcerpc_pipe *); + NTSTATUS (*shutdown_pipe)(struct dcerpc_connection *); - const char *(*peer_name)(struct dcerpc_pipe *); + const char *(*peer_name)(struct dcerpc_connection *); /* send a request to the server */ - NTSTATUS (*send_request)(struct dcerpc_pipe *, DATA_BLOB *, BOOL trigger_read); + NTSTATUS (*send_request)(struct dcerpc_connection *, DATA_BLOB *, BOOL trigger_read); /* send a read request to the server */ - NTSTATUS (*send_read)(struct dcerpc_pipe *); + NTSTATUS (*send_read)(struct dcerpc_connection *); /* get an event context for the connection */ - struct event_context *(*event_context)(struct dcerpc_pipe *); + struct event_context *(*event_context)(struct dcerpc_connection *); /* a callback to the dcerpc code when a full fragment has been received */ - void (*recv_data)(struct dcerpc_pipe *, DATA_BLOB *, NTSTATUS status); - + void (*recv_data)(struct dcerpc_connection *, DATA_BLOB *, NTSTATUS status); } transport; - /* the last fault code from a DCERPC fault */ - uint32_t last_fault_code; - /* pending requests */ struct rpc_request *pending; @@ -82,6 +78,22 @@ struct dcerpc_pipe { void *full_request_private; }; +/* + this encapsulates a full dcerpc client side pipe +*/ +struct dcerpc_pipe { + uint32_t context_id; + + struct dcerpc_syntax_id syntax; + struct dcerpc_syntax_id transfer_syntax; + + struct dcerpc_connection *conn; + + /* the last fault code from a DCERPC fault */ + uint32_t last_fault_code; +}; + + /* dcerpc pipe flags */ #define DCERPC_DEBUG_PRINT_IN (1<<0) #define DCERPC_DEBUG_PRINT_OUT (1<<1) @@ -141,8 +153,7 @@ struct dcerpc_interface_table { const struct dcerpc_endpoint_list *endpoints; }; -struct dcerpc_interface_list -{ +struct dcerpc_interface_list { struct dcerpc_interface_list *prev, *next; const struct dcerpc_interface_table *table; }; |