s3:libsmb: move cli->max_xmit to cli->conn.smb1.max_xmit
authorStefan Metzmacher <metze@samba.org>
Tue, 13 Sep 2011 13:00:59 +0000 (15:00 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 15 Sep 2011 10:12:24 +0000 (12:12 +0200)
And keep cli->conn.smb1.client.max_xmit and
cli->conn.smb1.server.max_xmit.

metze

source3/include/client.h
source3/libsmb/cliconnect.c
source3/libsmb/clientgen.c

index 77e124004647bd7036396e1dc61d4e255e8a83ea..3701aec554f50defcf8839572b88bb8ab67e4ccf 100644 (file)
@@ -70,7 +70,6 @@ struct cli_state {
        int readbraw_supported;
        int writebraw_supported;
        int timeout; /* in milliseconds. */
-       size_t max_xmit;
        size_t max_mux;
        int initialised;
        int win95;
@@ -130,13 +129,16 @@ struct cli_state {
                struct {
                        struct {
                                uint32_t capabilities;
+                               uint32_t max_xmit;
                        } client;
 
                        struct {
                                uint32_t capabilities;
+                               uint32_t max_xmit;
                        } server;
 
                        uint32_t capabilities;
+                       uint32_t max_xmit;
 
                        uint16_t mid;
                } smb1;
index 6e34c3d6223130c2af2551620cd9ddd4df9742c7..1abd76018a5942d001f186d6610ae7f6b5cd0226 100644 (file)
@@ -2611,6 +2611,9 @@ static void cli_negprot_done(struct tevent_req *subreq)
        uint32_t both_capabilities;
        uint32_t server_capabilities = 0;
        uint32_t capabilities;
+       uint32_t client_max_xmit = cli->conn.smb1.client.max_xmit;
+       uint32_t server_max_xmit = 0;
+       uint32_t max_xmit;
        enum protocol_types protocol;
 
        status = cli_smb_recv(subreq, state, &inbuf, 1, &wct, &vwv,
@@ -2654,7 +2657,7 @@ static void cli_negprot_done(struct tevent_req *subreq)
                /* NT protocol */
                cli->sec_mode = CVAL(vwv + 1, 0);
                cli->max_mux = SVAL(vwv + 1, 1);
-               cli->max_xmit = IVAL(vwv + 3, 1);
+               server_max_xmit = IVAL(vwv + 3, 1);
                cli->sesskey = IVAL(vwv + 7, 1);
                cli->serverzone = SVALS(vwv + 15, 1);
                cli->serverzone *= 60;
@@ -2715,7 +2718,7 @@ static void cli_negprot_done(struct tevent_req *subreq)
                }
 
                cli->sec_mode = SVAL(vwv + 1, 0);
-               cli->max_xmit = SVAL(vwv + 2, 0);
+               server_max_xmit = SVAL(vwv + 2, 0);
                cli->max_mux = SVAL(vwv + 3, 0);
                cli->sesskey = IVAL(vwv + 6, 0);
                cli->serverzone = SVALS(vwv + 10, 0);
@@ -2730,11 +2733,11 @@ static void cli_negprot_done(struct tevent_req *subreq)
                /* the old core protocol */
                cli->sec_mode = 0;
                cli->serverzone = get_time_zone(time(NULL));
-               cli->max_xmit = 1024;
+               server_max_xmit = 1024;
                cli->max_mux = 1;
        }
 
-       if (cli->max_xmit < 1024) {
+       if (server_max_xmit < 1024) {
                tevent_req_nterror(req, NT_STATUS_INVALID_NETWORK_RESPONSE);
                return;
        }
@@ -2744,8 +2747,6 @@ static void cli_negprot_done(struct tevent_req *subreq)
                return;
        }
 
-       cli->max_xmit = MIN(cli->max_xmit, CLI_BUFFER_SIZE);
-
        /*
         * Now calculate the negotiated capabilities
         * based on the mask for:
@@ -2758,11 +2759,16 @@ static void cli_negprot_done(struct tevent_req *subreq)
        capabilities |= both_capabilities & SMB_CAP_BOTH_MASK;
        capabilities |= server_capabilities & SMB_CAP_SERVER_MASK;
 
+       max_xmit = MIN(client_max_xmit, server_max_xmit);
+
        cli->conn.protocol = protocol;
 
        cli->conn.smb1.server.capabilities = server_capabilities;
        cli->conn.smb1.capabilities = capabilities;
 
+       cli->conn.smb1.server.max_xmit = server_max_xmit;
+       cli->conn.smb1.max_xmit = max_xmit;
+
        tevent_req_done(req);
 }
 
index 720a118559da44e1164f4e693171a6b31cf50d38..9091ad38d8f330a00d259dd7847ec088d75d1276 100644 (file)
@@ -195,7 +195,6 @@ struct cli_state *cli_state_create(TALLOC_CTX *mem_ctx,
        }
        cli->raw_status = NT_STATUS_INTERNAL_ERROR;
        cli->timeout = 20000; /* Timeout is in milliseconds. */
-       cli->max_xmit = CLI_BUFFER_SIZE+4;
        cli->case_sensitive = false;
 
        /* Set the CLI_FORCE_DOSERR environment variable to test
@@ -302,7 +301,10 @@ struct cli_state *cli_state_create(TALLOC_CTX *mem_ctx,
                cli->conn.smb1.client.capabilities |= CAP_LEVEL_II_OPLOCKS;
        }
 
+       cli->conn.smb1.client.max_xmit = CLI_BUFFER_SIZE;
+
        cli->conn.smb1.capabilities = cli->conn.smb1.client.capabilities;
+       cli->conn.smb1.max_xmit = 1024;
 
        cli->conn.smb1.mid = 1;
 
@@ -548,7 +550,7 @@ uint32_t cli_state_capabilities(struct cli_state *cli)
 
 uint32_t cli_state_available_size(struct cli_state *cli, uint32_t ofs)
 {
-       uint32_t ret = cli->max_xmit;
+       uint32_t ret = cli->conn.smb1.max_xmit;
 
        if (ofs >= ret) {
                return 0;