Example #1
0
        private void EnsureDownloader()
        {
            if (_byteRangeDownloader == null)
            {
                _byteRangeDownloader = new ByteRangeDownloader(_uri,
                                                               _tempFileStream,
                                                               _readEventHandles[(int)ReadEvent.ByteRangeReadEvent].SafeWaitHandle,
                                                               _tempFileMutex);

                // Local assert to allow Proxy get/set under partial trust
                new WebPermission(PermissionState.Unrestricted).Assert();   // Blessed
                try
                {
                    _byteRangeDownloader.Proxy = _originalRequest.Proxy;
                }
                finally
                {
                    WebPermission.RevertAssert();
                }

                _byteRangeDownloader.Credentials = _originalRequest.Credentials;
                _byteRangeDownloader.CachePolicy = _originalRequest.CachePolicy;

                _byteRangesAvailable = new ArrayList(); // byte ranges that are downloaded
            }
        }
Example #2
0
        void IByteRangeDownloaderService.InitializeByteRangeDownloader(
            String url, 
            String tempFile,
            SafeWaitHandle eventHandle)
        {
            if (url == null) 
            {
                throw new ArgumentNullException("url"); 
            } 

            if(tempFile == null) 
            {
                throw new ArgumentNullException("tempFile");
            }
 
            if(eventHandle == null)
            { 
                throw new ArgumentNullException("eventHandle"); 
            }
 
            if (eventHandle.IsInvalid || eventHandle.IsClosed)
            {
                throw new ArgumentException(SR.Get(SRID.InvalidEventHandle), "eventHandle");
            } 

            Uri requestedUri = new Uri(url, UriKind.Absolute); 
 
            if(tempFile.Length <= 0)
            { 
                throw new ArgumentException(SR.Get(SRID.InvalidTempFileName), "tempFile");
            }

            ByteRangeDownloader loader = new ByteRangeDownloader(requestedUri, tempFile, eventHandle); 

            // We defined _downloader as Object for performance reasons. If we define it as ByteRangeDownloader the whole 
            // class will be loaded although it might not be used at all. By declaring it as Object we can prevent it 
            // from being loaded. This technique is used in other areas.
            _downloader = (Object) loader; 
        }