Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Net / System / Net / _WinHttpWebProxyDataBuilder.cs / 1 / _WinHttpWebProxyDataBuilder.cs
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; 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(); if (UnsafeNclNativeMethods.WinHttp.WinHttpGetIEProxyConfigForCurrentUser(ref ieProxyConfig)) { string proxy = null; string proxyByPass = null; string autoConfigUrl = null; try { 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); } finally { FreeStr(ieProxyConfig.Proxy); FreeStr(ieProxyConfig.ProxyBypass); FreeStr(ieProxyConfig.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); } GlobalLog.Leave("WinHttpWebProxyBuilder#" + ValidationHelper.HashString(this) + "::BuildInternal()"); } private void FreeStr(IntPtr intPtr) { if (intPtr != IntPtr.Zero) { Marshal.FreeHGlobal(intPtr); } } } } // 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; 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(); if (UnsafeNclNativeMethods.WinHttp.WinHttpGetIEProxyConfigForCurrentUser(ref ieProxyConfig)) { string proxy = null; string proxyByPass = null; string autoConfigUrl = null; try { 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); } finally { FreeStr(ieProxyConfig.Proxy); FreeStr(ieProxyConfig.ProxyBypass); FreeStr(ieProxyConfig.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); } GlobalLog.Leave("WinHttpWebProxyBuilder#" + ValidationHelper.HashString(this) + "::BuildInternal()"); } private void FreeStr(IntPtr intPtr) { if (intPtr != IntPtr.Zero) { Marshal.FreeHGlobal(intPtr); } } } } // 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
- PartBasedPackageProperties.cs
- ShaderEffect.cs
- PositiveTimeSpanValidatorAttribute.cs
- TextSegment.cs
- Timeline.cs
- CollectionViewGroupInternal.cs
- TextSearch.cs
- SqlStream.cs
- SubMenuStyle.cs
- CLRBindingWorker.cs
- MatrixValueSerializer.cs
- DataControlButton.cs
- SoapRpcMethodAttribute.cs
- DataBoundLiteralControl.cs
- FocusTracker.cs
- QueryExecutionOption.cs
- IDictionary.cs
- XhtmlBasicLabelAdapter.cs
- ShaderEffect.cs
- ListBoxChrome.cs
- GeneralTransformGroup.cs
- TaskForm.cs
- TextParagraph.cs
- ICollection.cs
- BackoffTimeoutHelper.cs
- QueryStringParameter.cs
- PrimitiveXmlSerializers.cs
- WinEventQueueItem.cs
- IsolatedStorageFilePermission.cs
- ListDictionaryInternal.cs
- FullTextLine.cs
- HScrollProperties.cs
- SoapMessage.cs
- wgx_render.cs
- WebPartDisplayModeCancelEventArgs.cs
- PropertyEmitterBase.cs
- Context.cs
- FontUnitConverter.cs
- PropertyTabChangedEvent.cs
- ContentIterators.cs
- ListDictionary.cs
- LabelAutomationPeer.cs
- Array.cs
- CompoundFileDeflateTransform.cs
- NativeMethods.cs
- Nodes.cs
- ResourceCategoryAttribute.cs
- DispatcherFrame.cs
- PathSegment.cs
- ClockController.cs
- UrlMappingsSection.cs
- ListBoxChrome.cs
- TextCharacters.cs
- DataSourceNameHandler.cs
- DPCustomTypeDescriptor.cs
- ImageListUtils.cs
- EntityParameterCollection.cs
- ActionMessageFilterTable.cs
- ReferentialConstraint.cs
- ReflectionUtil.cs
- DataServiceHost.cs
- HttpApplicationFactory.cs
- ResetableIterator.cs
- IndexerNameAttribute.cs
- DataServiceProviderMethods.cs
- figurelengthconverter.cs
- NeutralResourcesLanguageAttribute.cs
- MethodRental.cs
- RootBuilder.cs
- CommentEmitter.cs
- SqlFormatter.cs
- Pens.cs
- XmlCodeExporter.cs
- OrderedDictionary.cs
- CheckBoxRenderer.cs
- HttpApplication.cs
- DocumentXPathNavigator.cs
- SecurityImpersonationBehavior.cs
- mediaclock.cs
- DataViewManager.cs
- CodeDefaultValueExpression.cs
- StructuralCache.cs
- EffectiveValueEntry.cs
- LowerCaseStringConverter.cs
- ConnectionsZoneAutoFormat.cs
- SystemFonts.cs
- PropertyGridCommands.cs
- HttpCapabilitiesBase.cs
- Converter.cs
- OrderedDictionary.cs
- DataGridViewRowCollection.cs
- BindStream.cs
- Label.cs
- PrintDialog.cs
- ModelItemDictionary.cs
- Preprocessor.cs
- DirectoryLocalQuery.cs
- ParameterCollection.cs
- TextDecoration.cs
- ServiceEndpointCollection.cs