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
- OrderedEnumerableRowCollection.cs
- VarInfo.cs
- ManagementInstaller.cs
- HttpWriter.cs
- RequiredFieldValidator.cs
- ProvidePropertyAttribute.cs
- ClientRolePrincipal.cs
- XmlConvert.cs
- WebPartMovingEventArgs.cs
- RowParagraph.cs
- XmlElementCollection.cs
- SafeReadContext.cs
- StringConverter.cs
- NameValuePermission.cs
- ColorAnimationUsingKeyFrames.cs
- EditorPartChrome.cs
- EnumMemberAttribute.cs
- PeerEndPoint.cs
- SQLInt16.cs
- MSAAWinEventWrap.cs
- Avt.cs
- CapiNative.cs
- HtmlInputSubmit.cs
- ComPlusDiagnosticTraceSchemas.cs
- ToolStripLocationCancelEventArgs.cs
- ConfigViewGenerator.cs
- WebServiceFaultDesigner.cs
- CounterSetInstanceCounterDataSet.cs
- RealProxy.cs
- SecurityCapabilities.cs
- CapabilitiesUse.cs
- HashSetDebugView.cs
- CompareValidator.cs
- ActivityInfo.cs
- ListBoxItemWrapperAutomationPeer.cs
- SqlDelegatedTransaction.cs
- ObjectAnimationBase.cs
- BinaryCommonClasses.cs
- RangeBase.cs
- ListViewAutomationPeer.cs
- Selector.cs
- NameSpaceEvent.cs
- CallContext.cs
- SiteOfOriginContainer.cs
- Style.cs
- RadioButton.cs
- input.cs
- GcSettings.cs
- ComponentEvent.cs
- SqlNotificationEventArgs.cs
- Internal.cs
- MaterialGroup.cs
- LineSegment.cs
- BitmapPalette.cs
- HashUtility.cs
- ConvertEvent.cs
- ListViewCancelEventArgs.cs
- _BufferOffsetSize.cs
- SqlUtil.cs
- SerializableAttribute.cs
- Rotation3DAnimation.cs
- remotingproxy.cs
- Substitution.cs
- ReadWriteSpinLock.cs
- NoClickablePointException.cs
- MostlySingletonList.cs
- DirectoryInfo.cs
- CommandConverter.cs
- StringTraceRecord.cs
- HatchBrush.cs
- CodeSubDirectoriesCollection.cs
- TimelineGroup.cs
- SmtpDigestAuthenticationModule.cs
- LocalizableResourceBuilder.cs
- Calendar.cs
- ReadWriteSpinLock.cs
- ActivationArguments.cs
- AssemblyHelper.cs
- DataRowComparer.cs
- ConcurrentDictionary.cs
- SqlBuffer.cs
- TagPrefixCollection.cs
- TextTreeTextBlock.cs
- BrushConverter.cs
- Attributes.cs
- XmlUtf8RawTextWriter.cs
- DataColumnMapping.cs
- SynchronizingStream.cs
- WebFaultException.cs
- VariantWrapper.cs
- FixedLineResult.cs
- RtType.cs
- XmlSchemaAttributeGroup.cs
- BitmapData.cs
- PeerDuplexChannel.cs
- Control.cs
- File.cs
- HttpErrorTraceRecord.cs
- EventLogTraceListener.cs
- PersonalizationProviderHelper.cs