コード例 #1
0
 /// <inheritdoc cref="FileListEntryStream" />
 /// <summary>
 /// Initializes a new instance of the <see cref="SharedMemoryFileListEntryStream"/> class.
 /// </summary>
 /// <param name="javascriptRuntime">The JavaScript runtime.</param>
 /// <param name="inputFileElement">The input file reference.</param>
 /// <param name="file">The <see cref="FileListEntry"/>.</param>
 /// <seealso cref="FileListEntryStream" />
 public SharedMemoryFileListEntryStream(IJSRuntime javascriptRuntime, ElementReference inputFileElement, FileListEntry file)
     : base(javascriptRuntime, inputFileElement, file)
 {
 }
コード例 #2
0
 /// <inheritdoc cref="FileListEntryStream" />
 /// <summary>
 ///     Initializes a new instance of the <see cref="RemoteFileListEntryStream" /> class.
 /// </summary>
 /// <param name="javascriptRuntime">The JavaScript runtime.</param>
 /// <param name="inputFileElement">The input file reference.</param>
 /// <param name="file">The <see cref="FileListEntry" />.</param>
 /// <param name="maximumMessageSize">The maximum message size.</param>
 /// <param name="maxBufferSize">The maximum buffer size.</param>
 /// <seealso cref="FileListEntryStream" />
 public RemoteFileListEntryStream(IJSRuntime javascriptRuntime, ElementReference inputFileElement, FileListEntry file, int maximumMessageSize, int maxBufferSize)
     : base(javascriptRuntime, inputFileElement, file)
 {
     this.maximumMessageSize         = maximumMessageSize;
     this.blockSequence              = new PreFetchingSequence <Block>(this.FetchBase64Block, (file.Size + this.maximumMessageSize - 1) / this.maximumMessageSize, Math.Max(1, maxBufferSize / this.maximumMessageSize)); // Degree of parallelism on fetch
     this.currentBlockDecodingBuffer = new byte[this.maximumMessageSize];
 }
コード例 #3
0
ファイル: FileIndexer.cs プロジェクト: Qorpent/qorpent.sys
	    private bool IsMatchSearchMask(FileListEntry entry, string fileMask)
	    {
	        return fileMask.SmartSplit(false, true, ' ')
                .All(mask => IsMatchMask(entry.LocalPath, mask));
	    }
コード例 #4
0
ファイル: FileSplitter.cs プロジェクト: CodeAsm/open-sauce
		public static List<FileListEntry> SaveStream(Stream input_stream,
			int max_part_size,
			string output_folder,
			string file_name,
			bool encrypt,
			string password)
		{
			List<FileListEntry> file_list = new List<FileListEntry>();

			// set the stream data read position to the beginning
			input_stream.Seek(0, SeekOrigin.Begin);

			int index = 0;
			int stream_size = (int)input_stream.Length;
			int stream_offset = 0;

			byte[] part_data = new byte[max_part_size];

			do
			{
				FileListEntry file_list_entry = new FileListEntry();
				Directory.CreateDirectory(output_folder);
				file_list_entry.Location = String.Format("{0}\\{1}.{2}", output_folder, file_name, (index + 1).ToString("D03"));
				file_list_entry.Index = index;

				// create a part file
				using (FileStream part_file = File.Open(file_list_entry.Location, FileMode.Create))
				{
					// calculate the part size
					int difference = stream_size - stream_offset;
					int part_size = (int)(difference < max_part_size ? difference : max_part_size);

					// if the last part is going to be less than the minimum encryption block size
					// reduce the size of the one before to make the last part the minimum size
					if ((part_size == max_part_size) && ((stream_size - stream_offset - max_part_size) < 256))
						part_size -= 256 - (stream_size - stream_offset - max_part_size);

					// read the data to an intermediary buffer and write the buffer to disc
					input_stream.Read(part_data, 0, part_size);
					part_file.Write(part_data, 0, part_size);

					if (encrypt)
					{
						// the password key is an MD5 hash of the password string
						int[] key = new int[4];
						BlamLib.Cryptography.XXTEA.BuildPasswordKey(key, password);

						// get the unencrypted md5 for per part decryption comparisons on the client
						file_list_entry.Encrypted = true;
						file_list_entry.UnencryptedMD5 = BlamLib.Cryptography.MD5.GenerateMD5String(part_file);

						// encrypt the file stream
						BlamLib.Cryptography.XXTEA.EncryptStream256(part_file, key);
					}
					else
					{
						file_list_entry.Encrypted = false;
						file_list_entry.UnencryptedMD5 = "";
					}

					part_file.Flush();

					// get the final files MD5 for download validation on the client
					file_list_entry.MD5 = BlamLib.Cryptography.MD5.GenerateMD5String(part_file);
					file_list_entry.Size = (uint)part_file.Length;

					file_list.Add(file_list_entry);
				}
				index++;

				stream_offset += max_part_size;
			}
			while (stream_offset < stream_size);

			return file_list;
		}
コード例 #5
0
ファイル: FileSplitter.cs プロジェクト: yumiris/OpenSauce
        public static List <FileListEntry> SaveStream(Stream input_stream,
                                                      int max_part_size,
                                                      string output_folder,
                                                      string file_name,
                                                      bool encrypt,
                                                      string password)
        {
            List <FileListEntry> file_list = new List <FileListEntry>();

            // set the stream data read position to the beginning
            input_stream.Seek(0, SeekOrigin.Begin);

            int index         = 0;
            int stream_size   = (int)input_stream.Length;
            int stream_offset = 0;

            byte[] part_data = new byte[max_part_size];

            do
            {
                FileListEntry file_list_entry = new FileListEntry();
                Directory.CreateDirectory(output_folder);
                file_list_entry.Location = String.Format("{0}\\{1}.{2}", output_folder, file_name, (index + 1).ToString("D03"));
                file_list_entry.Index    = index;

                // create a part file
                using (FileStream part_file = File.Open(file_list_entry.Location, FileMode.Create))
                {
                    // calculate the part size
                    int difference = stream_size - stream_offset;
                    int part_size  = (int)(difference < max_part_size ? difference : max_part_size);

                    // if the last part is going to be less than the minimum encryption block size
                    // reduce the size of the one before to make the last part the minimum size
                    if ((part_size == max_part_size) && ((stream_size - stream_offset - max_part_size) < 256))
                    {
                        part_size -= 256 - (stream_size - stream_offset - max_part_size);
                    }

                    // read the data to an intermediary buffer and write the buffer to disc
                    input_stream.Read(part_data, 0, part_size);
                    part_file.Write(part_data, 0, part_size);

                    if (encrypt)
                    {
                        // the password key is an MD5 hash of the password string
                        int[] key = new int[4];
                        BlamLib.Cryptography.XXTEA.BuildPasswordKey(key, password);

                        // get the unencrypted md5 for per part decryption comparisons on the client
                        file_list_entry.Encrypted      = true;
                        file_list_entry.UnencryptedMD5 = BlamLib.Cryptography.MD5.GenerateMD5String(part_file);

                        // encrypt the file stream
                        BlamLib.Cryptography.XXTEA.EncryptStream256(part_file, key);
                    }
                    else
                    {
                        file_list_entry.Encrypted      = false;
                        file_list_entry.UnencryptedMD5 = "";
                    }

                    part_file.Flush();

                    // get the final files MD5 for download validation on the client
                    file_list_entry.MD5  = BlamLib.Cryptography.MD5.GenerateMD5String(part_file);
                    file_list_entry.Size = (uint)part_file.Length;

                    file_list.Add(file_list_entry);
                }
                index++;

                stream_offset += max_part_size;
            }while (stream_offset < stream_size);

            return(file_list);
        }
コード例 #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FileListEntryStream"/> class.
 /// </summary>
 /// <param name="javascriptRuntime">The JavaScript runtime.</param>
 /// <param name="inputFileElement">The input file reference.</param>
 /// <param name="file">The <see cref="FileListEntry"/>.</param>
 protected FileListEntryStream(IJSRuntime javascriptRuntime, ElementReference inputFileElement, FileListEntry file)
 {
     this.JavascriptRuntime = javascriptRuntime;
     this.InputFileElement  = inputFileElement;
     this.File = file;
 }