s4:ldap_server: rewrite to socket layer to use tstream
[mat/samba.git] / source4 / ldap_server / ldap_server.h
index 65b355514cad0fa5bf60d2ddfb5dcc3e758cad2c..4d5cae49fc74fc36c996a959fbe089e2dff722fd 100644 (file)
@@ -6,7 +6,7 @@
    
    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
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    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.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-struct rw_buffer {
-       uint8_t *data;
-       size_t ofs, length;
-};
-
-enum ldapsrv_call_state {
-       LDAPSRV_CALL_STATE_NEW = 0,
-       LDAPSRV_CALL_STATE_BUSY,
-       LDAPSRV_CALL_STATE_ASYNC,
-       LDAPSRV_CALL_STATE_ABORT,
-       LDAPSRV_CALL_STATE_COMPLETE
-};
+#include "libcli/ldap/libcli_ldap.h"
+#include "lib/socket/socket.h"
+#include "lib/stream/packet.h"
+#include "system/network.h"
 
-enum ldapsrv_reply_state {
-       LDAPSRV_REPLY_STATE_NEW = 0,
-       LDAPSRV_REPLY_STATE_SEND
-};
+struct ldapsrv_connection {
+       struct loadparm_context *lp_ctx;
+       struct stream_connection *connection;
+       struct gensec_security *gensec;
+       struct auth_session_info *session_info;
+       struct ldapsrv_service *service;
+       struct cli_credentials *server_credentials;
+       struct ldb_context *ldb;
 
-struct ldapsrv_connection;
+       struct {
+               struct tevent_queue *send_queue;
+               struct tstream_context *raw;
+               struct tstream_context *tls;
+               struct tstream_context *sasl;
+               struct tstream_context *active;
+       } sockets;
 
-struct ldapsrv_call {
-       struct ldapsrv_call *prev,*next;
-       enum ldapsrv_call_state state;
+       bool global_catalog;
 
-       struct ldapsrv_connection *conn;
+       struct {
+               int initial_timeout;
+               int conn_idle_time;
+               int max_page_size;
+               int search_timeout;
+               struct timeval endtime;
+               const char *reason;
+       } limits;
 
-       struct ldap_message request;
+       struct tevent_req *active_call;
+};
 
+struct ldapsrv_call {
+       struct ldapsrv_connection *conn;
+       struct ldap_message *request;
        struct ldapsrv_reply {
-               struct ldapsrv_reply *prev,*next;
-               enum ldapsrv_reply_state state;
-               struct ldap_message msg;
+               struct ldapsrv_reply *prev, *next;
+               struct ldap_message *msg;
        } *replies;
-};
-
-struct ldapsrv_connection {
-       struct server_connection *connection;
+       struct iovec out_iov;
 
-       struct gensec_security *gensec_ctx;
-       struct auth_session_info *session_info;
-
-       struct rw_buffer in_buffer;
-       struct rw_buffer out_buffer;
+       struct tevent_req *(*postprocess_send)(TALLOC_CTX *mem_ctx,
+                                              struct tevent_context *ev,
+                                              void *private_data);
+       NTSTATUS (*postprocess_recv)(struct tevent_req *req);
+       void *postprocess_private;
+};
 
-       struct ldapsrv_call *calls;
+struct ldapsrv_service {
+       struct tstream_tls_params *tls_params;
+       struct task_server *task;
+       struct tevent_queue *call_queue;
 };
+
+#include "ldap_server/proto.h"