Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / HybridWebProxyFinder.cs / 1305376 / HybridWebProxyFinder.cs
using System; using System.Collections.Generic; using System.Diagnostics; namespace System.Net { // This class behaves the same as WinHttpWebProxyFinder. The only difference is that in cases where // the script location has a scheme != HTTP, it falls back to NetWebProxyFinder which supports // also other schemes like FILE and FTP. // The mid-term goal for WinHttp is to support at least FILE scheme since it was already requested // by customers. The long term goal for System.Net is to use WinHttp only and remove this class // as well as NetWebProxyFinder. internal sealed class HybridWebProxyFinder : IWebProxyFinder { private NetWebProxyFinder netFinder; private WinHttpWebProxyFinder winHttpFinder; private BaseWebProxyFinder currentFinder; private AutoWebProxyScriptEngine engine; public HybridWebProxyFinder(AutoWebProxyScriptEngine engine) { this.engine = engine; this.winHttpFinder = new WinHttpWebProxyFinder(engine); this.currentFinder = winHttpFinder; } public bool IsValid { get { return currentFinder.IsValid; } } public bool GetProxies(Uri destination, out IListproxyList) { if (currentFinder.GetProxies(destination, out proxyList)) { return true; } if (currentFinder.IsUnrecognizedScheme && (currentFinder == winHttpFinder)) { // If WinHttpWebProxyFinder failed because the script location has a != HTTP scheme, // fall back to NetWebProxyFinder which supports also other schemes. if (netFinder == null) { netFinder = new NetWebProxyFinder(engine); } currentFinder = netFinder; return currentFinder.GetProxies(destination, out proxyList); } // Something else went wrong. Falling back to NetWebProxyFinder wouldn't help. return false; } public void Abort() { // Abort only the current finder. There is no need to abort the other one (which is either // uninitialized, i.e. not used yet, or we have an unrecognized-scheme state, which should // not be changed). currentFinder.Abort(); } public void Reset() { winHttpFinder.Reset(); if (netFinder != null) { netFinder.Reset(); } // Some settings changed, so let's reset the current finder to WinHttpWebProxyFinder, since // now it may work (if it didn't already before). currentFinder = winHttpFinder; } public void Dispose() { Dispose(true); } private void Dispose(bool disposing) { if (disposing) { winHttpFinder.Dispose(); if (netFinder != null) { netFinder.Dispose(); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Collections.Generic; using System.Diagnostics; namespace System.Net { // This class behaves the same as WinHttpWebProxyFinder. The only difference is that in cases where // the script location has a scheme != HTTP, it falls back to NetWebProxyFinder which supports // also other schemes like FILE and FTP. // The mid-term goal for WinHttp is to support at least FILE scheme since it was already requested // by customers. The long term goal for System.Net is to use WinHttp only and remove this class // as well as NetWebProxyFinder. internal sealed class HybridWebProxyFinder : IWebProxyFinder { private NetWebProxyFinder netFinder; private WinHttpWebProxyFinder winHttpFinder; private BaseWebProxyFinder currentFinder; private AutoWebProxyScriptEngine engine; public HybridWebProxyFinder(AutoWebProxyScriptEngine engine) { this.engine = engine; this.winHttpFinder = new WinHttpWebProxyFinder(engine); this.currentFinder = winHttpFinder; } public bool IsValid { get { return currentFinder.IsValid; } } public bool GetProxies(Uri destination, out IList proxyList) { if (currentFinder.GetProxies(destination, out proxyList)) { return true; } if (currentFinder.IsUnrecognizedScheme && (currentFinder == winHttpFinder)) { // If WinHttpWebProxyFinder failed because the script location has a != HTTP scheme, // fall back to NetWebProxyFinder which supports also other schemes. if (netFinder == null) { netFinder = new NetWebProxyFinder(engine); } currentFinder = netFinder; return currentFinder.GetProxies(destination, out proxyList); } // Something else went wrong. Falling back to NetWebProxyFinder wouldn't help. return false; } public void Abort() { // Abort only the current finder. There is no need to abort the other one (which is either // uninitialized, i.e. not used yet, or we have an unrecognized-scheme state, which should // not be changed). currentFinder.Abort(); } public void Reset() { winHttpFinder.Reset(); if (netFinder != null) { netFinder.Reset(); } // Some settings changed, so let's reset the current finder to WinHttpWebProxyFinder, since // now it may work (if it didn't already before). currentFinder = winHttpFinder; } public void Dispose() { Dispose(true); } private void Dispose(bool disposing) { if (disposing) { winHttpFinder.Dispose(); if (netFinder != null) { netFinder.Dispose(); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InternalBase.cs
- XmlRawWriterWrapper.cs
- StreamDocument.cs
- BatchStream.cs
- EmbeddedMailObject.cs
- SqlBooleanizer.cs
- DataObjectPastingEventArgs.cs
- CipherData.cs
- diagnosticsswitches.cs
- Table.cs
- MSHTMLHost.cs
- NotifyCollectionChangedEventArgs.cs
- FrameworkReadOnlyPropertyMetadata.cs
- SQLByteStorage.cs
- Stack.cs
- ClientApiGenerator.cs
- MemberDomainMap.cs
- StringWriter.cs
- OperationDescriptionCollection.cs
- HtmlContainerControl.cs
- XmlDictionaryString.cs
- altserialization.cs
- ServiceModelConfiguration.cs
- AssemblyNameProxy.cs
- UnsafeNativeMethodsCLR.cs
- SmtpNetworkElement.cs
- IfJoinedCondition.cs
- AssemblyName.cs
- XmlSchemaComplexType.cs
- WebRequestModuleElement.cs
- SettingsAttributeDictionary.cs
- DragAssistanceManager.cs
- BlurEffect.cs
- ScriptBehaviorDescriptor.cs
- FtpCachePolicyElement.cs
- AddingNewEventArgs.cs
- TypeConverterMarkupExtension.cs
- ModifyActivitiesPropertyDescriptor.cs
- AuthenticationModeHelper.cs
- ErrorHandler.cs
- ListViewInsertEventArgs.cs
- MetadataStore.cs
- MTConfigUtil.cs
- SmiMetaDataProperty.cs
- ParseHttpDate.cs
- Assign.cs
- CheckoutException.cs
- SystemIPInterfaceStatistics.cs
- OptimalTextSource.cs
- MessageEncodingBindingElement.cs
- QueryCacheManager.cs
- WebPartDescription.cs
- ExtensionCollection.cs
- ProgressBarBrushConverter.cs
- _FtpControlStream.cs
- DomainUpDown.cs
- WmlMobileTextWriter.cs
- ProcessHostConfigUtils.cs
- NativeMethods.cs
- ProcessProtocolHandler.cs
- ContractCodeDomInfo.cs
- ModuleElement.cs
- RecognizedAudio.cs
- SqlRetyper.cs
- PartialClassGenerationTask.cs
- ScriptingJsonSerializationSection.cs
- ByteRangeDownloader.cs
- PropVariant.cs
- Oid.cs
- XmlSchemaIdentityConstraint.cs
- MetadataPropertyCollection.cs
- SessionSwitchEventArgs.cs
- SliderAutomationPeer.cs
- XmlILAnnotation.cs
- TablePattern.cs
- EventMappingSettingsCollection.cs
- IndentedWriter.cs
- FontFamily.cs
- WorkflowInlining.cs
- BitmapEffectOutputConnector.cs
- InputBinding.cs
- SequenceFullException.cs
- JavaScriptSerializer.cs
- URIFormatException.cs
- IgnoreFileBuildProvider.cs
- Section.cs
- Rules.cs
- InvalidPropValue.cs
- TextProperties.cs
- Bidi.cs
- SafeWaitHandle.cs
- WindowsListViewSubItem.cs
- UnknownMessageReceivedEventArgs.cs
- __Filters.cs
- EntityException.cs
- TableLayoutPanelCellPosition.cs
- FtpCachePolicyElement.cs
- StringValidator.cs
- CommandLineParser.cs
- RefExpr.cs