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
- IdentityHolder.cs
- Rules.cs
- EventLogEntry.cs
- TdsValueSetter.cs
- XmlObjectSerializerWriteContextComplex.cs
- TagMapCollection.cs
- GuidelineSet.cs
- Localizer.cs
- ObjectDisposedException.cs
- EncryptedXml.cs
- CreateParams.cs
- TransformProviderWrapper.cs
- IPPacketInformation.cs
- AnimationStorage.cs
- FileUpload.cs
- InstalledFontCollection.cs
- ExpressionEditorAttribute.cs
- CoTaskMemHandle.cs
- MenuEventArgs.cs
- FastEncoderWindow.cs
- ExpressionStringBuilder.cs
- _AutoWebProxyScriptWrapper.cs
- ClientUtils.cs
- ControlAdapter.cs
- ManagementClass.cs
- MonthChangedEventArgs.cs
- SerializationException.cs
- hresults.cs
- EntityDataSourceContextCreatingEventArgs.cs
- MulticastOption.cs
- ReachDocumentReferenceSerializer.cs
- CodeDomSerializationProvider.cs
- TreeViewItemAutomationPeer.cs
- CodeArrayIndexerExpression.cs
- PropertiesTab.cs
- DataGridAutoFormatDialog.cs
- ResourcePermissionBase.cs
- ProfileSettings.cs
- XmlSchemaSimpleTypeUnion.cs
- Vector3DAnimation.cs
- ISAPIWorkerRequest.cs
- Codec.cs
- EntityCommandExecutionException.cs
- RegularExpressionValidator.cs
- DataKey.cs
- XmlSchemaInferenceException.cs
- BehaviorService.cs
- DataGridViewDataErrorEventArgs.cs
- DragEvent.cs
- TextContainerChangedEventArgs.cs
- XmlSchemaObjectCollection.cs
- MenuBindingsEditor.cs
- Path.cs
- LogFlushAsyncResult.cs
- UpDownBase.cs
- ObjectNotFoundException.cs
- DictionarySectionHandler.cs
- FontFaceLayoutInfo.cs
- TableDetailsCollection.cs
- SymLanguageType.cs
- UpdatePanel.cs
- Transform.cs
- Setter.cs
- ToolstripProfessionalRenderer.cs
- HttpInputStream.cs
- ToolStripSeparator.cs
- WebPartMenu.cs
- MemberDomainMap.cs
- EventDescriptorCollection.cs
- NameObjectCollectionBase.cs
- RayMeshGeometry3DHitTestResult.cs
- QilXmlWriter.cs
- XPathNodeList.cs
- oledbmetadatacolumnnames.cs
- DeviceFiltersSection.cs
- XmlNavigatorFilter.cs
- TransformPatternIdentifiers.cs
- ResXDataNode.cs
- TableHeaderCell.cs
- WebPartConnectionsCancelEventArgs.cs
- WebGetAttribute.cs
- Message.cs
- ComponentEvent.cs
- QilReplaceVisitor.cs
- MulticastIPAddressInformationCollection.cs
- NullableLongMinMaxAggregationOperator.cs
- ColorContextHelper.cs
- CapabilitiesSection.cs
- Util.cs
- NetTcpSectionData.cs
- Html32TextWriter.cs
- ObfuscationAttribute.cs
- Preprocessor.cs
- XamlVector3DCollectionSerializer.cs
- ZipPackagePart.cs
- EventLogStatus.cs
- login.cs
- FrameworkPropertyMetadata.cs
- SelfIssuedAuthRSAPKCS1SignatureFormatter.cs
- StructureChangedEventArgs.cs