Beispiel #1
0
        public Task <EncodedFileResult> AppendStream(Stream stream, bool checksum)
        {
            // TODO: validate relative filename (in particular the directory separator and checking for invalid components like drives, '..' and '.')

            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            if (checksum)
            {
                stream = new ChecksumStream(stream);
            }

            return(Task.Run(delegate {
                lock (mLockObject)
                {
                    if (mPendingStream != null)
                    {
                        throw new InvalidOperationException();
                    }

                    mPendingStream = stream;
                    mResultLength = 0;

                    Monitor.PulseAll(mLockObject);

                    while (mPendingStream != null)
                    {
                        Monitor.Wait(mLockObject);
                    }

                    var resultChecksum = checksum ? ((ChecksumStream)stream).GetChecksum() : default(Checksum?);
                    mContent.Add(new DecodedStreamMetadata(mResultLength, resultChecksum));
                    return new EncodedFileResult(mResultLength, resultChecksum);
                }
            }));
        }
Beispiel #2
0
        public Task<EncodedFileResult> AppendStream(Stream stream, bool checksum)
        {
            // TODO: validate relative filename (in particular the directory separator and checking for invalid components like drives, '..' and '.')

            if (stream == null)
                throw new ArgumentNullException(nameof(stream));

            if (checksum)
                stream = new ChecksumStream(stream);

            return Task.Run(delegate {
                lock (mLockObject)
                {
                    if (mPendingStream != null)
                        throw new InvalidOperationException();

                    mPendingStream = stream;
                    mResultLength = 0;

                    Monitor.PulseAll(mLockObject);

                    while (mPendingStream != null)
                        Monitor.Wait(mLockObject);

                    var resultChecksum = checksum ? ((ChecksumStream)stream).GetChecksum() : default(Checksum?);
                    mContent.Add(new DecodedStreamMetadata(mResultLength, resultChecksum));
                    return new EncodedFileResult(mResultLength, resultChecksum);
                }
            });
        }