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
- DbProviderSpecificTypePropertyAttribute.cs
- TdsParameterSetter.cs
- ConnectivityStatus.cs
- DataException.cs
- SqlProviderManifest.cs
- DataGridViewMethods.cs
- _BasicClient.cs
- OutputCacheModule.cs
- IndexOutOfRangeException.cs
- MouseBinding.cs
- HashCodeCombiner.cs
- FilteredDataSetHelper.cs
- EventSourceCreationData.cs
- EdgeModeValidation.cs
- LoginViewDesigner.cs
- ScopelessEnumAttribute.cs
- SqlDataSourceConfigureSortForm.cs
- ListViewItem.cs
- filewebresponse.cs
- ContentPlaceHolderDesigner.cs
- ControlBuilderAttribute.cs
- MetadataArtifactLoaderFile.cs
- AuthorizationSection.cs
- PropertyConverter.cs
- ExtenderProviderService.cs
- LeftCellWrapper.cs
- PolyLineSegment.cs
- SchemaTypeEmitter.cs
- StorageAssociationTypeMapping.cs
- InvalidProgramException.cs
- recordstatefactory.cs
- CryptoApi.cs
- SecurityManager.cs
- MatrixCamera.cs
- OpenCollectionAsyncResult.cs
- ListViewDeleteEventArgs.cs
- DataColumnMapping.cs
- FuncTypeConverter.cs
- DragDeltaEventArgs.cs
- ConnectionConsumerAttribute.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- ConfigPathUtility.cs
- NetSectionGroup.cs
- CatalogPart.cs
- NativeRightsManagementAPIsStructures.cs
- ProtocolsConfigurationHandler.cs
- NetworkCredential.cs
- DependencyPropertyDescriptor.cs
- ChangePassword.cs
- ChildrenQuery.cs
- CompModHelpers.cs
- Span.cs
- MSAAWinEventWrap.cs
- SafeFindHandle.cs
- GPStream.cs
- FormsAuthenticationUserCollection.cs
- ResourceContainerWrapper.cs
- TableItemStyle.cs
- FormViewDeleteEventArgs.cs
- ListParagraph.cs
- StreamHelper.cs
- BaseTemplateParser.cs
- Exceptions.cs
- WebPageTraceListener.cs
- HitTestParameters3D.cs
- SQLGuidStorage.cs
- Configuration.cs
- __FastResourceComparer.cs
- DisplayMemberTemplateSelector.cs
- DeferredElementTreeState.cs
- VisualStyleInformation.cs
- CompilerParameters.cs
- TableRowCollection.cs
- ContentElement.cs
- UriTemplatePathSegment.cs
- NonParentingControl.cs
- DataGridHeaderBorder.cs
- ZipIOLocalFileBlock.cs
- XhtmlBasicTextBoxAdapter.cs
- DbProviderSpecificTypePropertyAttribute.cs
- XamlInt32CollectionSerializer.cs
- InternalDuplexChannelFactory.cs
- Symbol.cs
- SqlEnums.cs
- ButtonBaseAutomationPeer.cs
- DataControlField.cs
- Input.cs
- FixedTextContainer.cs
- StateMachineWorkflowInstance.cs
- AsyncCompletedEventArgs.cs
- ToolStripCodeDomSerializer.cs
- RuntimeArgumentHandle.cs
- ParallelDesigner.xaml.cs
- SoapObjectWriter.cs
- CommandID.cs
- UpdateRecord.cs
- XmlImplementation.cs
- SocketElement.cs
- BindingOperations.cs
- StrongName.cs