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
- EntityClassGenerator.cs
- UrlAuthorizationModule.cs
- ViewCellRelation.cs
- Encoder.cs
- ThreadPool.cs
- Condition.cs
- Control.cs
- ValueExpressions.cs
- StreamInfo.cs
- EnumConverter.cs
- EntityContainerRelationshipSetEnd.cs
- Mapping.cs
- ToolStripGripRenderEventArgs.cs
- BypassElementCollection.cs
- RNGCryptoServiceProvider.cs
- ToggleButton.cs
- OleDbDataAdapter.cs
- Journaling.cs
- MobileUITypeEditor.cs
- DataSourceCache.cs
- DataRelationCollection.cs
- DefaultEventAttribute.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- ZipIOExtraField.cs
- HitTestParameters.cs
- LocalizationComments.cs
- SubstitutionResponseElement.cs
- SoundPlayer.cs
- _NegoStream.cs
- SerializationUtilities.cs
- Literal.cs
- QueryLifecycle.cs
- UpdateCommandGenerator.cs
- SqlDataSourceConfigureFilterForm.cs
- WmlLinkAdapter.cs
- TextEncodedRawTextWriter.cs
- ConnectionProviderAttribute.cs
- ExceptionRoutedEventArgs.cs
- Buffer.cs
- SettingsContext.cs
- WebMessageEncoderFactory.cs
- DbBuffer.cs
- DesignerDataSchemaClass.cs
- OrderByBuilder.cs
- MessageQueueEnumerator.cs
- ContentPresenter.cs
- TypeElement.cs
- XmlLanguage.cs
- SByte.cs
- EdgeProfileValidation.cs
- NetWebProxyFinder.cs
- ScaleTransform.cs
- RightsManagementEncryptedStream.cs
- DynamicFilter.cs
- SerializationBinder.cs
- MonthCalendar.cs
- QueueProcessor.cs
- ClusterRegistryConfigurationProvider.cs
- NativeMethods.cs
- CompositeDataBoundControl.cs
- ConfigurationManagerHelper.cs
- CustomWebEventKey.cs
- DefaultPropertiesToSend.cs
- CodeLabeledStatement.cs
- WebPartMovingEventArgs.cs
- AlphabeticalEnumConverter.cs
- GlyphElement.cs
- CachedTypeface.cs
- RepeaterItem.cs
- PerformanceCounterManager.cs
- LinkTarget.cs
- EntityDataSourceStatementEditorForm.cs
- SettingsAttributes.cs
- RawStylusSystemGestureInputReport.cs
- StateRuntime.cs
- WebPartAddingEventArgs.cs
- AccessibleObject.cs
- StylusTouchDevice.cs
- SiteOfOriginPart.cs
- CultureSpecificStringDictionary.cs
- ReadOnlyDictionary.cs
- CategoryValueConverter.cs
- CacheSection.cs
- DesignRelation.cs
- EntityDesignerBuildProvider.cs
- DataGridBoolColumn.cs
- ItemsPresenter.cs
- MemberDomainMap.cs
- FlowLayout.cs
- XmlCharType.cs
- BufferedGraphicsContext.cs
- ConfigurationProperty.cs
- Rules.cs
- DocumentPaginator.cs
- CharacterShapingProperties.cs
- DaylightTime.cs
- WindowsBrush.cs
- ContentOperations.cs
- XmlLanguage.cs
- EFColumnProvider.cs