Esempio n. 1
0
        public uint Smb2WriteOverRdmaChannel(
            UInt64 offset,
            byte[] writeChannelInfo,
            uint length,
            out WRITE_Response responsePayload,
            Channel_Values channel = Channel_Values.CHANNEL_RDMA_V1
            )
        {
            ushort creditCharge = CalculateCreditCharge(length);

            RequestCreditsFromSmb2Server(creditCharge);

            uint status = this.Smb2WriteOverRdmaChannel(
                creditCharge,
                64,
                offset,
                writeChannelInfo,
                length,
                out responsePayload,
                channel
                );

            CalculateSmb2AvailableCredits(creditCharge, packetHeader.CreditRequestResponse);
            return(status);
        }
Esempio n. 2
0
        public uint Smb2Write(
            UInt64 offset,
            byte[] writeData,
            out WRITE_Response writeResponse)
        {
            ushort creditCharge = (ushort)(1 + ((writeData.Length - 1) / 65535));

            RequestCreditsFromSmb2Server(creditCharge);
            uint status = Write(
                (ushort)creditCharge,
                64,
                Packet_Header_Flags_Values.FLAGS_SIGNED,
                this.messageId,
                this.sessionId,
                this.TreeId,
                offset,
                this.FileId,
                Channel_Values.CHANNEL_NONE,
                WRITE_Request_Flags_Values.None,
                new byte[0],
                writeData,
                out packetHeader,
                out writeResponse);

            CalculateSmb2AvailableCredits(creditCharge, packetHeader.CreditRequestResponse);

            return(status);
        }
Esempio n. 3
0
        private uint Smb2WriteOverRdmaChannel(
            ushort creditCharge,
            ushort creditRequest,
            UInt64 offset,
            byte[] writeChannelInfo,
            uint length,
            out WRITE_Response responsePayload,
            Channel_Values channel = Channel_Values.CHANNEL_RDMA_V1
            )
        {
            WriteRequest(
                creditCharge,
                creditRequest,
                Packet_Header_Flags_Values.FLAGS_SIGNED,
                messageId,
                sessionId,
                TreeId,
                offset,
                FileId,
                channel,
                WRITE_Request_Flags_Values.None,
                writeChannelInfo,
                new byte[length]
                );

            return(WriteResponse(messageId, out this.packetHeader, out responsePayload));
        }
        private uint Smb2WriteOverRdmaChannel(
            ushort creditCharge,
            ushort creditRequest,
            UInt64 offset,
            byte[] writeChannelInfo,
            uint length,
            out WRITE_Response responsePayload,
            Channel_Values channel = Channel_Values.CHANNEL_RDMA_V1
            )
        {
            var request = new Smb2WriteRequestPacket();

            request.Header.CreditCharge          = creditCharge;
            request.Header.Command               = Smb2Command.WRITE;
            request.Header.CreditRequestResponse = creditRequest;
            request.Header.Flags     = Packet_Header_Flags_Values.FLAGS_SIGNED;
            request.Header.MessageId = messageId;
            request.Header.TreeId    = TreeId;
            request.Header.SessionId = sessionId;

            request.PayLoad.Length                 = 0;
            request.PayLoad.Offset                 = offset;
            request.PayLoad.FileId                 = FileId;
            request.PayLoad.Channel                = channel;
            request.PayLoad.RemainingBytes         = length; // not described in TD. Get from capture package
            request.PayLoad.WriteChannelInfoOffset = request.BufferOffset;
            request.PayLoad.WriteChannelInfoLength = (ushort)writeChannelInfo.Length;
            request.PayLoad.DataOffset             = 0;
            request.PayLoad.Flags = WRITE_Request_Flags_Values.None;

            request.Buffer = writeChannelInfo;

            SendPacket(request);

            return(WriteResponse(messageId, out this.packetHeader, out responsePayload));
        }