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
- Typography.cs
- SortKey.cs
- SortedDictionary.cs
- EditCommandColumn.cs
- EnterpriseServicesHelper.cs
- Animatable.cs
- FilterQueryOptionExpression.cs
- JsonCollectionDataContract.cs
- bindurihelper.cs
- Soap.cs
- CqlGenerator.cs
- TextTreeFixupNode.cs
- NoResizeHandleGlyph.cs
- TextPenaltyModule.cs
- TableCellAutomationPeer.cs
- AuthenticationConfig.cs
- ComponentChangingEvent.cs
- MouseBinding.cs
- ToolStripSystemRenderer.cs
- PropertyPath.cs
- RepeaterItem.cs
- ExpressionCopier.cs
- ListDataHelper.cs
- AssignDesigner.xaml.cs
- Interlocked.cs
- ParagraphResult.cs
- KeyTime.cs
- ClockController.cs
- PeerCustomResolverSettings.cs
- ClrPerspective.cs
- RepeaterItemEventArgs.cs
- WebAdminConfigurationHelper.cs
- AssociationSetMetadata.cs
- CategoryGridEntry.cs
- ContextMenuStripGroup.cs
- ScriptHandlerFactory.cs
- XmlHierarchicalEnumerable.cs
- COM2FontConverter.cs
- PropertyEmitter.cs
- SourceElementsCollection.cs
- FileBasedResourceGroveler.cs
- DataViewSetting.cs
- NoResizeHandleGlyph.cs
- ProxyManager.cs
- AliasedExpr.cs
- XamlGridLengthSerializer.cs
- RuleRefElement.cs
- MediaContext.cs
- WebExceptionStatus.cs
- MimeObjectFactory.cs
- SqlDataSourceStatusEventArgs.cs
- PlainXmlSerializer.cs
- FusionWrap.cs
- XmlWriterSettings.cs
- RenderDataDrawingContext.cs
- PipelineModuleStepContainer.cs
- EffectiveValueEntry.cs
- TreeWalkHelper.cs
- VectorAnimation.cs
- InkCanvasSelection.cs
- RuntimeConfig.cs
- HttpRequestCacheValidator.cs
- TextBoxBase.cs
- HighlightVisual.cs
- DocobjHost.cs
- DataGridRowsPresenter.cs
- SiteMapProvider.cs
- Crypto.cs
- LinkDesigner.cs
- BasePropertyDescriptor.cs
- DateTimeParse.cs
- OutputCacheSettingsSection.cs
- GridViewPageEventArgs.cs
- LinkUtilities.cs
- TriggerAction.cs
- View.cs
- _FixedSizeReader.cs
- GridLength.cs
- ImageKeyConverter.cs
- XPathQilFactory.cs
- XmlCodeExporter.cs
- MenuItemBindingCollection.cs
- ThicknessKeyFrameCollection.cs
- TextProperties.cs
- BaseCodeDomTreeGenerator.cs
- DeviceSpecific.cs
- CompletionBookmark.cs
- KeyboardEventArgs.cs
- TaskScheduler.cs
- COM2ExtendedUITypeEditor.cs
- CommandValueSerializer.cs
- FrameDimension.cs
- ConfigurationElementCollection.cs
- ApplicationInfo.cs
- _ChunkParse.cs
- AsyncOperation.cs
- LayoutSettings.cs
- RequestQueue.cs
- Tokenizer.cs
- EventManager.cs