/// <summary> /// to decode the smb parameters: from the general SmbParameters to the concrete Smb Parameters. /// </summary> protected override void DecodeParameters() { if (this.smbParametersBlock.WordCount > 0) { this.smbParameters = TypeMarshal.ToStruct <SMB_COM_WRITE_ANDX_Response_SMB_Parameters>( TypeMarshal.ToBytes(this.smbParametersBlock)); } }
/// <summary> /// server response the write request from client. /// </summary> /// <param name="open">the file open between server and client</param> /// <param name="writtenCount">number of bytes in Write request</param> public override void SendWriteResponse(IFileServiceServerOpen open, int writtenCount) { CifsServerPerConnection connection = open.TreeConnect.Session.Connection as CifsServerPerConnection; foreach (SmbWriteAndxRequestPacket request in connection.PendingRequestTable) { if (request != null && request.SmbHeader.Uid == open.TreeConnect.Session.SessionId && request.SmbHeader.Tid == open.TreeConnect.TreeConnectId && request.SmbParameters.FID == open.FileId) { SmbWriteAndxResponsePacket response = this.cifsServer.CreateWriteAndxResponse( connection, request, 0, null); SMB_COM_WRITE_ANDX_Response_SMB_Parameters smbParameters = response.SmbParameters; smbParameters.Count = (ushort)writtenCount; response.SmbParameters = smbParameters; this.cifsServer.SendPacket(response, connection); return; } } }