Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / _WinHttpWebProxyDataBuilder.cs / 1305376 / _WinHttpWebProxyDataBuilder.cs
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; namespace System.Net { internal sealed class WinHttpWebProxyBuilder : WebProxyDataBuilder { protected override void BuildInternal() { GlobalLog.Enter("WinHttpWebProxyBuilder#" + ValidationHelper.HashString(this) + "::BuildInternal()"); UnsafeNclNativeMethods.WinHttp.WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ieProxyConfig = new UnsafeNclNativeMethods.WinHttp.WINHTTP_CURRENT_USER_IE_PROXY_CONFIG(); // Make sure the native strings get freed, even if some unexpected exception occurs. RuntimeHelpers.PrepareConstrainedRegions(); try { if (UnsafeNclNativeMethods.WinHttp.WinHttpGetIEProxyConfigForCurrentUser(ref ieProxyConfig)) { string proxy = null; string proxyByPass = null; string autoConfigUrl = null; proxy = Marshal.PtrToStringUni(ieProxyConfig.Proxy); proxyByPass = Marshal.PtrToStringUni(ieProxyConfig.ProxyBypass); autoConfigUrl = Marshal.PtrToStringUni(ieProxyConfig.AutoConfigUrl); // note that ieProxyConfig.Proxy will be null if "use a proxy server" flag is turned off, even if // the user specified a proxy address. When we read directly from the Registry we need to check // for ProxyTypeFlags.PROXY_TYPE_PROXY. WinHttp does this for us and if the flag is not set, // ieProxyConfig.Proxy will be null. SetProxyAndBypassList(proxy, proxyByPass); SetAutoDetectSettings(ieProxyConfig.AutoDetect); // similar to comment above: ieProxyConfig.AutoConfigUrl will only be set if "automatically detect // settings" flag is set. We don't need to check ProxyTypeFlags.PROXY_TYPE_AUTO_PROXY_URL; WinHttp // takes care of it and sets AutoConfigUrl to null if the flag is not set, regardless of the actual // config script string. SetAutoProxyUrl(autoConfigUrl); } else { int errorCode = Marshal.GetLastWin32Error(); if (errorCode == Microsoft.Win32.NativeMethods.ERROR_NOT_ENOUGH_MEMORY) { throw new OutOfMemoryException(); } // if API call fails, rely on automatic detection SetAutoDetectSettings(true); } } finally { Marshal.FreeHGlobal(ieProxyConfig.Proxy); Marshal.FreeHGlobal(ieProxyConfig.ProxyBypass); Marshal.FreeHGlobal(ieProxyConfig.AutoConfigUrl); } GlobalLog.Leave("WinHttpWebProxyBuilder#" + ValidationHelper.HashString(this) + "::BuildInternal()"); } } } // 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.Text; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; namespace System.Net { internal sealed class WinHttpWebProxyBuilder : WebProxyDataBuilder { protected override void BuildInternal() { GlobalLog.Enter("WinHttpWebProxyBuilder#" + ValidationHelper.HashString(this) + "::BuildInternal()"); UnsafeNclNativeMethods.WinHttp.WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ieProxyConfig = new UnsafeNclNativeMethods.WinHttp.WINHTTP_CURRENT_USER_IE_PROXY_CONFIG(); // Make sure the native strings get freed, even if some unexpected exception occurs. RuntimeHelpers.PrepareConstrainedRegions(); try { if (UnsafeNclNativeMethods.WinHttp.WinHttpGetIEProxyConfigForCurrentUser(ref ieProxyConfig)) { string proxy = null; string proxyByPass = null; string autoConfigUrl = null; proxy = Marshal.PtrToStringUni(ieProxyConfig.Proxy); proxyByPass = Marshal.PtrToStringUni(ieProxyConfig.ProxyBypass); autoConfigUrl = Marshal.PtrToStringUni(ieProxyConfig.AutoConfigUrl); // note that ieProxyConfig.Proxy will be null if "use a proxy server" flag is turned off, even if // the user specified a proxy address. When we read directly from the Registry we need to check // for ProxyTypeFlags.PROXY_TYPE_PROXY. WinHttp does this for us and if the flag is not set, // ieProxyConfig.Proxy will be null. SetProxyAndBypassList(proxy, proxyByPass); SetAutoDetectSettings(ieProxyConfig.AutoDetect); // similar to comment above: ieProxyConfig.AutoConfigUrl will only be set if "automatically detect // settings" flag is set. We don't need to check ProxyTypeFlags.PROXY_TYPE_AUTO_PROXY_URL; WinHttp // takes care of it and sets AutoConfigUrl to null if the flag is not set, regardless of the actual // config script string. SetAutoProxyUrl(autoConfigUrl); } else { int errorCode = Marshal.GetLastWin32Error(); if (errorCode == Microsoft.Win32.NativeMethods.ERROR_NOT_ENOUGH_MEMORY) { throw new OutOfMemoryException(); } // if API call fails, rely on automatic detection SetAutoDetectSettings(true); } } finally { Marshal.FreeHGlobal(ieProxyConfig.Proxy); Marshal.FreeHGlobal(ieProxyConfig.ProxyBypass); Marshal.FreeHGlobal(ieProxyConfig.AutoConfigUrl); } GlobalLog.Leave("WinHttpWebProxyBuilder#" + ValidationHelper.HashString(this) + "::BuildInternal()"); } } } // 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
- HtmlElement.cs
- PowerStatus.cs
- FileDialog.cs
- ISAPIRuntime.cs
- SessionEndedEventArgs.cs
- GridViewItemAutomationPeer.cs
- HttpInputStream.cs
- CalendarTable.cs
- DataTableTypeConverter.cs
- XmlSchemaNotation.cs
- SiteMapNode.cs
- WorkflowDefinitionContext.cs
- peernodestatemanager.cs
- WorkflowInstance.cs
- CannotUnloadAppDomainException.cs
- IResourceProvider.cs
- ProfilePropertySettings.cs
- CatalogPartCollection.cs
- TableCell.cs
- BevelBitmapEffect.cs
- SHA384.cs
- HyperLink.cs
- TextTreeDeleteContentUndoUnit.cs
- PathGeometry.cs
- OracleRowUpdatingEventArgs.cs
- InvalidPrinterException.cs
- TypeSystem.cs
- RoleManagerEventArgs.cs
- ColorConvertedBitmapExtension.cs
- ExtensionQuery.cs
- MessagePropertyFilter.cs
- GroupStyle.cs
- PermissionToken.cs
- ExceptionRoutedEventArgs.cs
- SettingsProperty.cs
- EmptyEnumerator.cs
- CodeNamespaceImportCollection.cs
- PageHandlerFactory.cs
- XpsImage.cs
- CriticalFinalizerObject.cs
- HttpClientProtocol.cs
- TemplateBindingExtensionConverter.cs
- AliasGenerator.cs
- SerializationSectionGroup.cs
- Intellisense.cs
- GeometryDrawing.cs
- OleStrCAMarshaler.cs
- sqlnorm.cs
- AlternationConverter.cs
- XmlWrappingWriter.cs
- FtpWebRequest.cs
- dsa.cs
- SubqueryRules.cs
- MachinePropertyVariants.cs
- AdornerLayer.cs
- FunctionDefinition.cs
- DrawingVisualDrawingContext.cs
- TraceSwitch.cs
- ConversionValidationRule.cs
- WebHttpElement.cs
- DataRecordInternal.cs
- EntityDataSourceChangingEventArgs.cs
- TcpConnectionPoolSettings.cs
- DmlSqlGenerator.cs
- ArrayElementGridEntry.cs
- CommonDialog.cs
- StorageModelBuildProvider.cs
- CaseInsensitiveOrdinalStringComparer.cs
- DesignerActionItem.cs
- Schema.cs
- HtmlInputFile.cs
- SqlCacheDependencyDatabaseCollection.cs
- SqlInternalConnectionSmi.cs
- Utils.cs
- DbProviderManifest.cs
- SafeHandle.cs
- LocatorManager.cs
- MimeWriter.cs
- StatusBar.cs
- SoapDocumentServiceAttribute.cs
- BitmapEffectGeneralTransform.cs
- EntityDataSourceView.cs
- TextRangeEdit.cs
- Overlapped.cs
- FormView.cs
- xdrvalidator.cs
- ADConnectionHelper.cs
- QueryCacheManager.cs
- ConnectionProviderAttribute.cs
- HuffModule.cs
- SynchronizingStream.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- HiddenFieldPageStatePersister.cs
- ThicknessConverter.cs
- InputDevice.cs
- SequenceRange.cs
- TemplatedAdorner.cs
- PageThemeParser.cs
- HashUtility.cs
- ForwardPositionQuery.cs