Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PointLightBase.cs
- RequestBringIntoViewEventArgs.cs
- Renderer.cs
- Ops.cs
- CodeIterationStatement.cs
- TableParaClient.cs
- FileLevelControlBuilderAttribute.cs
- TypeDescriptionProviderAttribute.cs
- ProgressBarAutomationPeer.cs
- ButtonChrome.cs
- GridViewUpdateEventArgs.cs
- Cast.cs
- WebPartZoneBase.cs
- CheckBoxRenderer.cs
- CatalogPartChrome.cs
- CompilerCollection.cs
- Rect.cs
- DataGridViewColumnCollection.cs
- SecurityElement.cs
- StrokeNodeOperations.cs
- DocComment.cs
- ConfigXmlCDataSection.cs
- Figure.cs
- CodeIndexerExpression.cs
- RIPEMD160Managed.cs
- AssemblyInfo.cs
- EventLogPermissionEntry.cs
- TextSyndicationContentKindHelper.cs
- DisplayNameAttribute.cs
- GeneratedContractType.cs
- DrawingGroup.cs
- PartialArray.cs
- StyleSheet.cs
- Configuration.cs
- FlowDocumentPage.cs
- SessionEndedEventArgs.cs
- EdmRelationshipRoleAttribute.cs
- MetadataCollection.cs
- FrameworkContentElement.cs
- EventLogPermissionEntryCollection.cs
- StorageRoot.cs
- EntityType.cs
- SqlUtils.cs
- ToolStripDropDown.cs
- IteratorDescriptor.cs
- HostingPreferredMapPath.cs
- SqlClientWrapperSmiStream.cs
- DrawingServices.cs
- IPAddressCollection.cs
- BaseTemplateCodeDomTreeGenerator.cs
- ApplicationManager.cs
- RoleGroupCollection.cs
- ProcessHostServerConfig.cs
- DataGridPageChangedEventArgs.cs
- WpfKnownTypeInvoker.cs
- XmlToDatasetMap.cs
- RadioButtonFlatAdapter.cs
- WeakEventTable.cs
- StrongNameMembershipCondition.cs
- FontNamesConverter.cs
- ButtonColumn.cs
- UrlAuthFailureHandler.cs
- TabControlAutomationPeer.cs
- StateDesigner.CommentLayoutGlyph.cs
- QuerySetOp.cs
- PreProcessInputEventArgs.cs
- KnownBoxes.cs
- PassportAuthenticationModule.cs
- TdsRecordBufferSetter.cs
- ExecutionContext.cs
- CharStorage.cs
- OleDbReferenceCollection.cs
- TokenizerHelper.cs
- ToolStripRenderer.cs
- RectangleF.cs
- AQNBuilder.cs
- IncrementalReadDecoders.cs
- Decoder.cs
- DataGridViewCellStyleBuilderDialog.cs
- NetworkInformationException.cs
- PropertyEntry.cs
- PropertyGeneratedEventArgs.cs
- WorkflowInstanceSuspendedRecord.cs
- DesignerCategoryAttribute.cs
- coordinatorscratchpad.cs
- PathSegmentCollection.cs
- AuthenticationManager.cs
- Win32MouseDevice.cs
- Win32.cs
- ListControl.cs
- DataGrid.cs
- RemoteWebConfigurationHostServer.cs
- AsyncResult.cs
- RenderTargetBitmap.cs
- PhotoPrintingIntent.cs
- ObsoleteAttribute.cs
- ExistsInCollection.cs
- Accessible.cs
- ExpressionContext.cs
- BufferModesCollection.cs