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
- DesignerActionList.cs
- WebPartsPersonalization.cs
- WindowsFormsLinkLabel.cs
- MessageQueueEnumerator.cs
- ADMembershipProvider.cs
- BitmapData.cs
- XmlDataSourceView.cs
- ArrayConverter.cs
- SecurityTokenAuthenticator.cs
- PropertyCollection.cs
- ProxyWebPartManager.cs
- MachineSettingsSection.cs
- ProviderUtil.cs
- adornercollection.cs
- FloaterBaseParaClient.cs
- StructuredTypeInfo.cs
- FileLoadException.cs
- BoundField.cs
- CacheOutputQuery.cs
- StreamedWorkflowDefinitionContext.cs
- ChtmlTextWriter.cs
- TextTreeRootTextBlock.cs
- SmtpFailedRecipientException.cs
- C14NUtil.cs
- BCLDebug.cs
- DataObjectCopyingEventArgs.cs
- arabicshape.cs
- HtmlElementEventArgs.cs
- WindowsPrincipal.cs
- ToolStripProgressBar.cs
- TrackingValidationObjectDictionary.cs
- TypeDescriptionProviderAttribute.cs
- AsyncResult.cs
- WebBrowserBase.cs
- Matrix.cs
- UniformGrid.cs
- linebase.cs
- RSACryptoServiceProvider.cs
- ToolboxItemAttribute.cs
- NonParentingControl.cs
- _LocalDataStore.cs
- MessagePropertyDescriptionCollection.cs
- controlskin.cs
- ObjectViewQueryResultData.cs
- GlyphTypeface.cs
- DataGridViewRow.cs
- BuildProvider.cs
- SqlColumnizer.cs
- filewebrequest.cs
- SiteMapNodeItem.cs
- HandleRef.cs
- BuildProvider.cs
- TransactionState.cs
- ToolStripControlHost.cs
- DbCommandDefinition.cs
- ComponentResourceKey.cs
- SqlBulkCopy.cs
- ProtocolsConfigurationHandler.cs
- RSAOAEPKeyExchangeDeformatter.cs
- SqlServer2KCompatibilityAnnotation.cs
- StatusBarItem.cs
- InstancePersistenceEvent.cs
- RSAPKCS1KeyExchangeFormatter.cs
- SecurityVersion.cs
- WebResponse.cs
- MaskedTextBoxTextEditorDropDown.cs
- SerializationFieldInfo.cs
- FolderBrowserDialog.cs
- CanExecuteRoutedEventArgs.cs
- ObjectDataSourceView.cs
- AuthenticatingEventArgs.cs
- Lookup.cs
- BStrWrapper.cs
- RtType.cs
- sqlnorm.cs
- DateTimeFormat.cs
- ReferenceSchema.cs
- IntAverageAggregationOperator.cs
- ProviderConnectionPointCollection.cs
- DateTimeStorage.cs
- TabControl.cs
- HostedHttpTransportManager.cs
- TreeNode.cs
- RuleAction.cs
- QilTypeChecker.cs
- ResourceIDHelper.cs
- StorageComplexPropertyMapping.cs
- FilterException.cs
- ConfigPathUtility.cs
- GreenMethods.cs
- SqlProcedureAttribute.cs
- Visitor.cs
- CodeTypeReferenceCollection.cs
- PagesSection.cs
- HashHelper.cs
- InternalConfirm.cs
- ElasticEase.cs
- WebBrowserHelper.cs
- XmlDataImplementation.cs
- MissingManifestResourceException.cs