r26654: libcli/smb_composite: Rather than specifying each of the gazillion options...
[jelmer/samba4-debian.git] / source / libcli / raw / libcliraw.h
index 4047a5d36957ffdffb369968af9c111185f5d809..0032eb4e948a7412f7bde5cf17221b93d5ff034e 100644 (file)
@@ -7,7 +7,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/>.
 */
 
-#include "request.h"
+#ifndef __LIBCLI_RAW_H__
+#define __LIBCLI_RAW_H__
+
+#include "libcli/raw/request.h"
+#include "librpc/gen_ndr/nbt.h"
 
 struct smbcli_tree;  /* forward declare */
 struct smbcli_request;  /* forward declare */
 struct smbcli_session;  /* forward declare */
 struct smbcli_transport;  /* forward declare */
 
+struct resolve_context;
+struct cli_credentials;
+
+/* default timeout for all smb requests */
+#define SMB_REQUEST_TIMEOUT 60
+
 /* context that will be and has been negotiated between the client and server */
 struct smbcli_negotiate {
        /* 
@@ -85,8 +94,13 @@ struct smbcli_options {
        uint_t use_oplocks:1;
        uint_t use_level2_oplocks:1;
        uint_t use_spnego:1;
+       uint_t unicode:1;
+       uint_t ntstatus_support:1;
+       int max_protocol;
        uint32_t max_xmit;
        uint16_t max_mux;
+       int request_timeout;
+       enum smb_signing_state signing;
 };
 
 /* this is the context for the client transport layer */
@@ -119,12 +133,8 @@ struct smbcli_transport {
 
        /* the error fields from the last message */
        struct {
-               enum {ETYPE_NONE, ETYPE_DOS, ETYPE_NT, ETYPE_SOCKET, ETYPE_NBT} etype;
+               enum {ETYPE_NONE, ETYPE_SMB, ETYPE_SOCKET, ETYPE_NBT} etype;
                union {
-                       struct {
-                               uint8_t eclass;
-                               uint16_t ecode;
-                       } dos;
                        NTSTATUS nt_status;
                        enum {SOCKET_READ_TIMEOUT,
                              SOCKET_READ_EOF,
@@ -137,29 +147,21 @@ struct smbcli_transport {
 
        struct {
                /* a oplock break request handler */
-               BOOL (*handler)(struct smbcli_transport *transport, 
+               bool (*handler)(struct smbcli_transport *transport, 
                                uint16_t tid, uint16_t fnum, uint8_t level, void *private);
                /* private data passed to the oplock handler */
                void *private;
        } oplock;
 
-       /* a list of async requests that are pending for send on this connection */
-       struct smbcli_request *pending_send;
-
        /* a list of async requests that are pending for receive on this connection */
        struct smbcli_request *pending_recv;
 
        /* remember the called name - some sub-protocols require us to
           know the server name */
-       struct nmb_name called;
+       struct nbt_name called;
 
-       /* a buffer for partially received SMB packets. */
-       struct {
-               uint8_t header[NBT_HDR_SIZE];
-               size_t req_size;
-               size_t received;
-               uint8_t *buffer;
-       } recv_buffer;
+       /* context of the stream -> packet parser */
+       struct packet_context *packet;
 };
 
 /* this is the context for the user */
@@ -203,7 +205,6 @@ struct smbcli_tree {
   a client request moves between the following 4 states.
 */
 enum smbcli_request_state {SMBCLI_REQUEST_INIT, /* we are creating the request */
-                       SMBCLI_REQUEST_SEND, /* the request is in the outgoing socket Q */
                        SMBCLI_REQUEST_RECV, /* we are waiting for a matching reply */
                        SMBCLI_REQUEST_DONE, /* the request is finished */
                        SMBCLI_REQUEST_ERROR}; /* a packet or transport level error has occurred */
@@ -235,6 +236,9 @@ struct smbcli_request {
        /* the sequence number of this packet - used for signing */
        uint_t seq_num;
 
+       /* list of ntcancel request for this requests */
+       struct smbcli_request *ntcancel;
+
        /* set if this is a one-way request, meaning we are not
           expecting a reply from the server. */
        uint_t one_way_request:1;
@@ -274,3 +278,8 @@ struct smbcli_request {
       req->status = NT_STATUS_INVALID_PARAMETER; \
       goto failed; \
 }
+
+#include "libcli/raw/interfaces.h" 
+#include "libcli/raw/raw_proto.h"
+
+#endif /* __LIBCLI_RAW__H__ */