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
- AutoScrollExpandMessageFilter.cs
- CorrelationToken.cs
- NativeMethods.cs
- wgx_commands.cs
- ServiceDebugElement.cs
- SecurityPermission.cs
- TypeConverterValueSerializer.cs
- DebuggerService.cs
- GenerateHelper.cs
- StatusBarDesigner.cs
- FontDifferentiator.cs
- PartialCachingControl.cs
- ChannelServices.cs
- IProducerConsumerCollection.cs
- JsonClassDataContract.cs
- SettingsPropertyWrongTypeException.cs
- ProfileServiceManager.cs
- ParallelTimeline.cs
- XmlBinaryReader.cs
- FreezableCollection.cs
- WebPartCollection.cs
- TCPListener.cs
- DeploymentSectionCache.cs
- AudioException.cs
- CustomAssemblyResolver.cs
- Vertex.cs
- Decoder.cs
- EventRoute.cs
- SiteMapProvider.cs
- DisplayNameAttribute.cs
- QilChoice.cs
- WindowsUpDown.cs
- FontSizeConverter.cs
- RadioButtonList.cs
- LineVisual.cs
- StickyNoteHelper.cs
- PageBuildProvider.cs
- MetadataItemCollectionFactory.cs
- GeneralTransform.cs
- SqlDataReaderSmi.cs
- XmlObjectSerializerWriteContextComplex.cs
- ManifestResourceInfo.cs
- Location.cs
- XNodeValidator.cs
- TemplateControlParser.cs
- Internal.cs
- CompensableActivity.cs
- StringUtil.cs
- DeploymentExceptionMapper.cs
- SmtpFailedRecipientsException.cs
- ItemsPresenter.cs
- SortDescriptionCollection.cs
- BuildProvidersCompiler.cs
- SqlRemoveConstantOrderBy.cs
- KeysConverter.cs
- ObfuscationAttribute.cs
- XmlSubtreeReader.cs
- TypeElementCollection.cs
- SapiGrammar.cs
- Tuple.cs
- DoubleIndependentAnimationStorage.cs
- BaseInfoTable.cs
- OracleConnectionString.cs
- TextBoxBase.cs
- XmlSchemaElement.cs
- MonitoringDescriptionAttribute.cs
- ITextView.cs
- XmlSchemaInclude.cs
- ServerIdentity.cs
- BitVec.cs
- PageCodeDomTreeGenerator.cs
- Nullable.cs
- PersonalizationProviderCollection.cs
- MetaModel.cs
- HandleCollector.cs
- XmlWriter.cs
- BitmapEffectGeneralTransform.cs
- ServiceInfoCollection.cs
- AssociationSetEnd.cs
- COM2ICategorizePropertiesHandler.cs
- DocumentViewerHelper.cs
- Enum.cs
- CompilationUnit.cs
- AnnotationAuthorChangedEventArgs.cs
- UriWriter.cs
- LinqDataSourceHelper.cs
- SqlHelper.cs
- TypeDefinition.cs
- DtrList.cs
- XmlTypeAttribute.cs
- CompiledQuery.cs
- CodeDirectiveCollection.cs
- DesignerHost.cs
- PeerCollaborationPermission.cs
- CellParagraph.cs
- ObjectListTitleAttribute.cs
- InvocationExpression.cs
- SourceItem.cs
- WebPartActionVerb.cs
- RoleBoolean.cs