s4:libcli/smb2: add smb2_transport_credits_set_charge() to change the CreditsCharge...
authorStefan Metzmacher <metze@samba.org>
Mon, 13 Jul 2009 10:25:40 +0000 (12:25 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 15 Jul 2009 08:57:32 +0000 (10:57 +0200)
metze

source4/libcli/smb2/request.c
source4/libcli/smb2/smb2.h
source4/libcli/smb2/transport.c

index f3684ed280aa8dcabc34bd9eed9a1676e40129b2..5d09a5083a4ebbf2ff044f0c3ea4244aa1216e7f 100644 (file)
@@ -78,9 +78,11 @@ struct smb2_request *smb2_request_init(struct smb2_transport *transport, uint16_
        req = talloc(transport, struct smb2_request);
        if (req == NULL) return NULL;
 
-       seqnum = transport->seqnum++;
-       if (seqnum == UINT64_MAX) {
-               seqnum = transport->seqnum++;
+       seqnum = transport->seqnum;
+       if (transport->credits.charge > 0) {
+               transport->seqnum += transport->credits.charge;
+       } else {
+               transport->seqnum += 1;
        }
 
        req->state     = SMB2_REQUEST_INIT;
@@ -131,7 +133,7 @@ struct smb2_request *smb2_request_init(struct smb2_transport *transport, uint16_
 
        SIVAL(req->out.hdr, 0,                          SMB2_MAGIC);
        SSVAL(req->out.hdr, SMB2_HDR_LENGTH,            SMB2_HDR_BODY);
-       SSVAL(req->out.hdr, SMB2_HDR_EPOCH,             0);
+       SSVAL(req->out.hdr, SMB2_HDR_EPOCH,             transport->credits.charge);
        SIVAL(req->out.hdr, SMB2_HDR_STATUS,            0);
        SSVAL(req->out.hdr, SMB2_HDR_OPCODE,            opcode);
        SSVAL(req->out.hdr, SMB2_HDR_CREDIT,            transport->credits.ask_num);
index eb231984dfa516e4d2d726fc45d6678f1f02a19a..6372cd805b4bd391f731a2639a777e4214ac2171 100644 (file)
@@ -87,6 +87,7 @@ struct smb2_transport {
        } compound;
 
        struct {
+               uint16_t charge;
                uint16_t ask_num;
        } credits;
 
index 60522370b7ab3ec5edf35c201fbd48c5d8baf53a..dffd1acd2b503ec5a0d85ea091909618ba70f759 100644 (file)
@@ -84,6 +84,7 @@ struct smb2_transport *smb2_transport_init(struct smbcli_socket *sock,
 
        transport->socket = talloc_steal(transport, sock);
        transport->options = *options;
+       transport->credits.charge = 0;
        transport->credits.ask_num = 1;
 
        /* setup the stream -> packet parser */
@@ -552,6 +553,12 @@ void smb2_transport_credits_ask_num(struct smb2_transport *transport,
        transport->credits.ask_num = ask_num;
 }
 
+void smb2_transport_credits_set_charge(struct smb2_transport *transport,
+                                      uint16_t charge)
+{
+       transport->credits.charge = charge;
+}
+
 static void idle_handler(struct tevent_context *ev, 
                         struct tevent_timer *te, struct timeval t, void *private_data)
 {