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
- SimpleColumnProvider.cs
- WasAdminWrapper.cs
- CodeDOMUtility.cs
- FormatterServices.cs
- LayoutTable.cs
- Bookmark.cs
- ConfigurationPermission.cs
- NetSectionGroup.cs
- GenericUriParser.cs
- FormsAuthenticationUser.cs
- SimpleTypeResolver.cs
- DataTable.cs
- Operators.cs
- DataSourceView.cs
- RelatedPropertyManager.cs
- FileAuthorizationModule.cs
- TextRangeBase.cs
- Padding.cs
- ExtentCqlBlock.cs
- DrawingAttributesDefaultValueFactory.cs
- LinearQuaternionKeyFrame.cs
- UrlEncodedParameterWriter.cs
- TextEncodedRawTextWriter.cs
- MachineKeySection.cs
- KeyManager.cs
- InvokeHandlers.cs
- ConfigurationManagerInternalFactory.cs
- AttributeUsageAttribute.cs
- DeferredElementTreeState.cs
- Documentation.cs
- ExpressionList.cs
- BackgroundFormatInfo.cs
- SchemaMapping.cs
- HijriCalendar.cs
- ToolStripDropDownClosedEventArgs.cs
- NavigatorOutput.cs
- RuleRefElement.cs
- TextProperties.cs
- PrintingPermissionAttribute.cs
- AppliedDeviceFiltersEditor.cs
- BaseTemplatedMobileComponentEditor.cs
- WebMessageEncoderFactory.cs
- ScriptingProfileServiceSection.cs
- SessionIDManager.cs
- ParserContext.cs
- ArrangedElement.cs
- LocalizationComments.cs
- PackUriHelper.cs
- PropertyEmitterBase.cs
- PluralizationService.cs
- ConstructorExpr.cs
- XmlSerializerSection.cs
- Sentence.cs
- ChannelTokenTypeConverter.cs
- SkewTransform.cs
- CallbackDebugBehavior.cs
- UnionExpr.cs
- PersonalizationState.cs
- UIElement3D.cs
- ScrollViewerAutomationPeer.cs
- SymbolMethod.cs
- RecipientInfo.cs
- DataRelationPropertyDescriptor.cs
- SqlConnectionFactory.cs
- ProtocolViolationException.cs
- DataServiceQuery.cs
- FileDataSourceCache.cs
- RSAOAEPKeyExchangeFormatter.cs
- Mouse.cs
- IisTraceWebEventProvider.cs
- SecurityState.cs
- EndpointAddressAugust2004.cs
- UpdateTracker.cs
- NullToBooleanConverter.cs
- DateTimeOffset.cs
- Rotation3DAnimation.cs
- DodSequenceMerge.cs
- ProgressiveCrcCalculatingStream.cs
- DataRowChangeEvent.cs
- DrawToolTipEventArgs.cs
- QueryPageSettingsEventArgs.cs
- ToolStripDropDownItem.cs
- RelatedEnd.cs
- uribuilder.cs
- NamedElement.cs
- XmlSequenceWriter.cs
- FormViewInsertedEventArgs.cs
- AudioException.cs
- ImpersonationOption.cs
- TemplateGroupCollection.cs
- StateChangeEvent.cs
- SafeFileHandle.cs
- ImpersonateTokenRef.cs
- OrderedEnumerableRowCollection.cs
- CompositeDesignerAccessibleObject.cs
- XMLSchema.cs
- DocumentOrderComparer.cs
- DragStartedEventArgs.cs
- KeyNotFoundException.cs
- FilteredDataSetHelper.cs