2 * RPC Server helper headers
3 * Almost completely rewritten by (C) Jeremy Allison 2005 - 2010
4 * Copyright (C) Simo Sorce <idra@samba.org> - 2010
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
20 #ifndef _RPC_SERVER_H_
21 #define _RPC_SERVER_H_
23 #include "librpc/rpc/rpc_common.h" /* For enum dcerpc_transport_t */
27 typedef bool (*dcerpc_ncacn_disconnect_fn)(struct pipes_struct *p);
28 typedef void (named_pipe_termination_fn)(void *private_data);
30 struct named_pipe_client {
31 const char *pipe_name;
33 struct tevent_context *ev;
34 struct messaging_context *msg_ctx;
37 uint16_t device_state;
38 uint64_t allocation_size;
40 struct tstream_context *tstream;
42 struct tsocket_address *remote_client_addr;
43 char *remote_client_name;
44 struct tsocket_address *local_server_addr;
45 char *local_server_name;
47 struct auth_session_info *session_info;
49 struct pipes_struct *p;
51 struct tevent_queue *write_queue;
56 named_pipe_termination_fn *term_fn;
60 struct named_pipe_client *named_pipe_client_init(TALLOC_CTX *mem_ctx,
61 struct tevent_context *ev_ctx,
62 struct messaging_context *msg_ctx,
63 const char *pipe_name,
64 named_pipe_termination_fn *term_fn,
66 uint16_t device_state,
67 uint64_t allocation_size,
70 int make_server_pipes_struct(TALLOC_CTX *mem_ctx,
71 struct messaging_context *msg_ctx,
72 const char *pipe_name,
73 enum dcerpc_transport_t transport,
74 const struct tsocket_address *remote_address,
75 const struct tsocket_address *local_address,
76 struct auth_session_info **session_info,
77 struct pipes_struct **_p,
80 void set_incoming_fault(struct pipes_struct *p);
81 void process_complete_pdu(struct pipes_struct *p, struct ncacn_packet *pkt);
82 NTSTATUS dcesrv_create_ncacn_np_socket(const char *pipe_name, int *out_fd);
83 NTSTATUS dcesrv_setup_ncacn_np_socket(const char *pipe_name,
84 struct tevent_context *ev_ctx,
85 struct messaging_context *msg_ctx);
86 void named_pipe_accept_function(struct tevent_context *ev_ctx,
87 struct messaging_context *msg_ctx,
88 const char *pipe_name, int fd,
89 named_pipe_termination_fn *term_fn,
91 void named_pipe_packet_process(struct tevent_req *subreq);
93 uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx,
94 struct messaging_context *msg_ctx,
95 const struct sockaddr_storage *ifss,
98 NTSTATUS dcesrv_create_ncalrpc_socket(const char *name, int *out_fd);
99 bool setup_dcerpc_ncalrpc_socket(struct tevent_context *ev_ctx,
100 struct messaging_context *msg_ctx,
102 dcerpc_ncacn_disconnect_fn fn);
104 void dcerpc_ncacn_accept(struct tevent_context *ev_ctx,
105 struct messaging_context *msg_ctx,
106 enum dcerpc_transport_t transport,
108 struct tsocket_address *cli_addr,
109 struct tsocket_address *srv_addr,
111 dcerpc_ncacn_disconnect_fn fn);
113 #endif /* _PRC_SERVER_H_ */