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
- SocketElement.cs
- SessionEndingEventArgs.cs
- EpmAttributeNameBuilder.cs
- SchemaCreator.cs
- GeometryGroup.cs
- ActivityCodeDomSerializer.cs
- DateTimeFormatInfo.cs
- TextDecoration.cs
- StrokeCollection.cs
- BevelBitmapEffect.cs
- XmlSchemaExternal.cs
- PopupRoot.cs
- FixedStringLookup.cs
- XmlNamespaceMapping.cs
- codemethodreferenceexpression.cs
- StylusTip.cs
- BridgeDataRecord.cs
- FormsAuthentication.cs
- CookieHandler.cs
- AlternateViewCollection.cs
- MatrixAnimationUsingPath.cs
- ToolStripPanelRow.cs
- EntityDataSourceMemberPath.cs
- TypeForwardedToAttribute.cs
- OneOfScalarConst.cs
- Pens.cs
- SystemUnicastIPAddressInformation.cs
- Evidence.cs
- UrlMappingsSection.cs
- TdsValueSetter.cs
- SplineKeyFrames.cs
- IdentitySection.cs
- xmlfixedPageInfo.cs
- SynchronizationContext.cs
- ResizeGrip.cs
- TextRunCache.cs
- Lease.cs
- ServiceDurableInstanceContextProvider.cs
- GetBrowserTokenRequest.cs
- SyntaxCheck.cs
- HtmlTableCellCollection.cs
- NavigationEventArgs.cs
- DetailsViewInsertEventArgs.cs
- DispatcherObject.cs
- DataGridCellEditEndingEventArgs.cs
- SimpleBitVector32.cs
- GlyphRunDrawing.cs
- ProfileInfo.cs
- XMLSchema.cs
- _LazyAsyncResult.cs
- FrameworkElementFactory.cs
- SatelliteContractVersionAttribute.cs
- WeakReferenceKey.cs
- XsltLibrary.cs
- MatrixStack.cs
- __FastResourceComparer.cs
- GC.cs
- DesignerDataConnection.cs
- IsolatedStorage.cs
- AuthenticationModulesSection.cs
- XmlSchemaSubstitutionGroup.cs
- HwndSourceParameters.cs
- LayoutEditorPart.cs
- MiniModule.cs
- PropertyPathWorker.cs
- GlobalizationSection.cs
- JournalNavigationScope.cs
- UnsafeNativeMethodsCLR.cs
- SyndicationFeedFormatter.cs
- DataReceivedEventArgs.cs
- LayoutManager.cs
- PackagePart.cs
- WebAdminConfigurationHelper.cs
- TimerElapsedEvenArgs.cs
- TextWriter.cs
- LogicalTreeHelper.cs
- ObjectNavigationPropertyMapping.cs
- ActiveXHelper.cs
- ClientFormsAuthenticationCredentials.cs
- DoubleCollectionConverter.cs
- PenContext.cs
- XslNumber.cs
- UserControlAutomationPeer.cs
- CodeNamespaceCollection.cs
- LogEntryHeaderv1Deserializer.cs
- ArraySortHelper.cs
- RewritingSimplifier.cs
- CorrelationService.cs
- MemberRestriction.cs
- Preprocessor.cs
- cookiecollection.cs
- FreezableCollection.cs
- SqlDeflator.cs
- HttpListenerElement.cs
- _NTAuthentication.cs
- Wildcard.cs
- Tablet.cs
- JavaScriptSerializer.cs
- PackageProperties.cs
- LogPolicy.cs