rpc_server: Move socket creation to rpc_sock_helper.[ch]
[samba.git] / source3 / rpc_server / rpc_server.h
index 2b2bd253629a2d7569bacd048d0e277a0e8077bb..f735c394e8322d1ca5763243f2f4f82fda9fd60a 100644 (file)
 
 #include "librpc/rpc/rpc_common.h" /* For enum dcerpc_transport_t */
 
+#include "librpc/rpc/dcesrv_core.h"
+
 struct pipes_struct;
 struct auth_session_info;
+struct cli_credentials;
 
-typedef bool (*dcerpc_ncacn_disconnect_fn)(struct pipes_struct *p);
-typedef void (*named_pipe_termination_fn)(void *private_data);
+typedef void (*dcerpc_ncacn_termination_fn)(struct dcesrv_connection *,
+                                           void *);
 
 struct dcerpc_ncacn_conn {
-       enum dcerpc_transport_t transport;
-
        int sock;
 
        struct pipes_struct *p;
-       dcerpc_ncacn_disconnect_fn disconnect_fn;
+       dcerpc_ncacn_termination_fn termination_fn;
+       void *termination_data;
 
        struct tevent_context *ev_ctx;
        struct messaging_context *msg_ctx;
+       struct dcesrv_context *dce_ctx;
+       struct dcesrv_endpoint *endpoint;
 
        struct tstream_context *tstream;
        struct tevent_queue *send_queue;
@@ -52,90 +56,53 @@ struct dcerpc_ncacn_conn {
        size_t count;
 };
 
-struct named_pipe_client {
-       const char *pipe_name;
-
-       struct tevent_context *ev;
-       struct messaging_context *msg_ctx;
-
-       uint16_t file_type;
-       uint16_t device_state;
-       uint64_t allocation_size;
-
-       struct tstream_context *tstream;
-
-       struct tsocket_address *remote_client_addr;
-       char *remote_client_name;
-       struct tsocket_address *local_server_addr;
-       char *local_server_name;
-
-       struct auth_session_info *session_info;
-
-       struct pipes_struct *p;
-
-       struct tevent_queue *write_queue;
-
-       struct iovec *iov;
-       size_t count;
-
-       named_pipe_termination_fn term_fn;
-       void *private_data;
-};
-
-struct named_pipe_client *named_pipe_client_init(TALLOC_CTX *mem_ctx,
-                                                struct tevent_context *ev_ctx,
-                                                struct messaging_context *msg_ctx,
-                                                const char *pipe_name,
-                                                named_pipe_termination_fn term_fn,
-                                                uint16_t file_type,
-                                                uint16_t device_state,
-                                                uint64_t allocation_size,
-                                                void *private_data);
-
-int make_server_pipes_struct(TALLOC_CTX *mem_ctx,
-                            struct messaging_context *msg_ctx,
-                            const char *pipe_name,
-                            enum dcerpc_transport_t transport,
-                            const struct tsocket_address *remote_address,
-                            const struct tsocket_address *local_address,
-                            struct auth_session_info **session_info,
-                            struct pipes_struct **_p,
-                            int *perrno);
+NTSTATUS dcerpc_ncacn_conn_init(TALLOC_CTX *mem_ctx,
+                               struct tevent_context *ev_ctx,
+                               struct messaging_context *msg_ctx,
+                               struct dcesrv_context *dce_ctx,
+                               struct dcesrv_endpoint *endpoint,
+                               dcerpc_ncacn_termination_fn term_fn,
+                               void *termination_data,
+                               struct dcerpc_ncacn_conn **out);
 
 void set_incoming_fault(struct pipes_struct *p);
 void process_complete_pdu(struct pipes_struct *p, struct ncacn_packet *pkt);
-NTSTATUS dcesrv_create_ncacn_np_socket(const char *pipe_name, int *out_fd);
-NTSTATUS dcesrv_setup_ncacn_np_socket(const char *pipe_name,
-                                     struct tevent_context *ev_ctx,
-                                     struct messaging_context *msg_ctx);
-void named_pipe_accept_function(struct tevent_context *ev_ctx,
-                               struct messaging_context *msg_ctx,
-                               const char *pipe_name, int fd,
-                               named_pipe_termination_fn term_fn,
-                               void *private_data);
-void named_pipe_packet_process(struct tevent_req *subreq);
-
-NTSTATUS dcesrv_create_ncacn_ip_tcp_socket(const struct sockaddr_storage *ifss,
-                                          uint16_t *port,
-                                          int *out_fd);
-NTSTATUS dcesrv_setup_ncacn_ip_tcp_socket(struct tevent_context *ev_ctx,
-                                         struct messaging_context *msg_ctx,
-                                         const struct sockaddr_storage *ifss,
-                                         uint16_t *port);
-
-NTSTATUS dcesrv_create_ncalrpc_socket(const char *name, int *out_fd);
-NTSTATUS dcesrv_setup_ncalrpc_socket(struct tevent_context *ev_ctx,
-                                    struct messaging_context *msg_ctx,
-                                    const char *name,
-                                    dcerpc_ncacn_disconnect_fn fn);
+
+struct dcerpc_ncacn_listen_state;
+int dcesrv_setup_ncacn_listener(
+       TALLOC_CTX *mem_ctx,
+       struct dcesrv_context *dce_ctx,
+       struct tevent_context *ev_ctx,
+       struct messaging_context *msg_ctx,
+       struct dcesrv_endpoint *e,
+       int *fd,
+       dcerpc_ncacn_termination_fn term_fn,
+       void *termination_data,
+       struct dcerpc_ncacn_listen_state **listen_state);
 
 void dcerpc_ncacn_accept(struct tevent_context *ev_ctx,
                         struct messaging_context *msg_ctx,
-                        enum dcerpc_transport_t transport,
-                        const char *name,
-                        struct tsocket_address *cli_addr,
-                        struct tsocket_address *srv_addr,
+                        struct dcesrv_context *dce_ctx,
+                        struct dcesrv_endpoint *e,
+                        struct tsocket_address **cli_addr,
+                        struct tsocket_address **srv_addr,
                         int s,
-                        dcerpc_ncacn_disconnect_fn fn);
+                        dcerpc_ncacn_termination_fn termination_fn,
+                        void *termination_data);
+
+NTSTATUS dcesrv_auth_gensec_prepare(TALLOC_CTX *mem_ctx,
+                                   struct dcesrv_call_state *call,
+                                   struct gensec_security **out);
+void dcesrv_log_successful_authz(struct dcesrv_call_state *call);
+NTSTATUS dcesrv_assoc_group_find(struct dcesrv_call_state *call);
+
+NTSTATUS dcesrv_endpoint_by_ncacn_np_name(struct dcesrv_context *dce_ctx,
+                                         const char *endpoint,
+                                         struct dcesrv_endpoint **out);
+
+struct pipes_struct *dcesrv_get_pipes_struct(struct dcesrv_connection *conn);
+
+void dcesrv_transport_terminate_connection(struct dcesrv_connection *dce_conn,
+                                          const char *reason);
 
 #endif /* _PRC_SERVER_H_ */