diff options
Diffstat (limited to 'source4/rpc_server/dcerpc_server.h')
-rw-r--r-- | source4/rpc_server/dcerpc_server.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h new file mode 100644 index 0000000000..b28f40768a --- /dev/null +++ b/source4/rpc_server/dcerpc_server.h @@ -0,0 +1,72 @@ +/* + Unix SMB/CIFS implementation. + + server side dcerpc defines + + Copyright (C) Andrew Tridgell 2003 + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + +enum endpoint_type {ENDPOINT_SMB, ENDPOINT_TCP}; + +/* a description of a single dcerpc endpoint */ +struct dcesrv_endpoint { + enum endpoint_type type; + union { + const char *smb_pipe; + uint32 tcp_port; + } info; +}; + + +/* the state associated with a dcerpc server connection */ +struct dcesrv_state { + TALLOC_CTX *mem_ctx; + + /* the endpoint that was opened */ + struct dcesrv_endpoint endpoint; + + /* endpoint operations provided by the endpoint server */ + const struct dcesrv_endpoint_ops *ops; + + /* private data for the endpoint server */ + void *private; +}; + + +struct dcesrv_endpoint_ops { + /* the query function is used to ask an endpoint server if it + handles a particular endpoint */ + BOOL (*query)(const struct dcesrv_endpoint *); + + /* connect() is called when a connection is made to an endpoint */ + NTSTATUS (*connect)(struct dcesrv_state *); + + /* disconnect() is called when the endpoint is disconnected */ + void (*disconnect)(struct dcesrv_state *); +}; + + +/* server-wide context information for the dcerpc server */ +struct dcesrv_context { + + /* the list of endpoints servers that have registered */ + struct dce_endpoint { + struct dce_endpoint *next, *prev; + const struct dcesrv_endpoint_ops *endpoint_ops; + } *endpoint_list; +}; |