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); }
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); }
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)); }