summaryrefslogtreecommitdiff
path: root/source4/rpc_server/dcerpc_server.h
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2004-12-20 14:37:54 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:07:32 -0500
commitbb072199b14c0e877360475eefb89021e7ec0bcf (patch)
tree58be480b14d6340d9a758a5613f7c878e34aa3cd /source4/rpc_server/dcerpc_server.h
parent545c190d2a655a3d96ea6cd19f8fecb4b63555db (diff)
downloadsamba-bb072199b14c0e877360475eefb89021e7ec0bcf.tar.gz
samba-bb072199b14c0e877360475eefb89021e7ec0bcf.tar.bz2
samba-bb072199b14c0e877360475eefb89021e7ec0bcf.zip
r4288: don't use struct dcerpc_interface_table anymore in the
main rpc server code. let the backends specify a ndr_push/ndr_pull function like we already do with the dispatch() function. this allows an interface implmentation to work as real proxy without needing to know the idl for an interface that means just the plain decrypted payload can be forwarded If someone want to write such a backend, patches are wellcome metze (This used to be commit a150bdf140d9165a05cbc7cac40b6e3c03a7bd3c)
Diffstat (limited to 'source4/rpc_server/dcerpc_server.h')
-rw-r--r--source4/rpc_server/dcerpc_server.h24
1 files changed, 17 insertions, 7 deletions
diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h
index 12c93140ec..c919476d1b 100644
--- a/source4/rpc_server/dcerpc_server.h
+++ b/source4/rpc_server/dcerpc_server.h
@@ -35,12 +35,10 @@ struct dcesrv_connection;
struct dcesrv_call_state;
struct dcesrv_auth;
-/* the dispatch functions for an interface take this form */
-typedef NTSTATUS (*dcesrv_dispatch_fn_t)(struct dcesrv_call_state *, TALLOC_CTX *, void *);
-
struct dcesrv_interface {
- /* the ndr function table for the chosen interface */
- const struct dcerpc_interface_table *ndr;
+ const char *name;
+ const char *uuid;
+ uint32_t if_version;
/* this function is called when the client binds to this interface */
NTSTATUS (*bind)(struct dcesrv_call_state *, const struct dcesrv_interface *);
@@ -48,10 +46,22 @@ struct dcesrv_interface {
/* this function is called when the client disconnects the endpoint */
void (*unbind)(struct dcesrv_connection *, const struct dcesrv_interface *);
+
+ /* the ndr_pull function for the chosen interface.
+ */
+ NTSTATUS (*ndr_pull)(struct dcesrv_call_state *, TALLOC_CTX *, struct ndr_pull *, void **);;
+
/* the dispatch function for the chosen interface.
*/
- dcesrv_dispatch_fn_t dispatch;
-};
+ NTSTATUS (*dispatch)(struct dcesrv_call_state *, TALLOC_CTX *, void *);
+
+ /* the ndr_push function for the chosen interface.
+ */
+ NTSTATUS (*ndr_push)(struct dcesrv_call_state *, TALLOC_CTX *, struct ndr_push *,void *);
+
+ /* for any private use by the interface code */
+ const void *private;
+};
/* the state of an ongoing dcerpc call */
struct dcesrv_call_state {