Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Net / System / Net / _WinHttpWebProxyDataBuilder.cs / 1 / _WinHttpWebProxyDataBuilder.cs
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; 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(); if (UnsafeNclNativeMethods.WinHttp.WinHttpGetIEProxyConfigForCurrentUser(ref ieProxyConfig)) { string proxy = null; string proxyByPass = null; string autoConfigUrl = null; try { 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); } finally { FreeStr(ieProxyConfig.Proxy); FreeStr(ieProxyConfig.ProxyBypass); FreeStr(ieProxyConfig.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); } GlobalLog.Leave("WinHttpWebProxyBuilder#" + ValidationHelper.HashString(this) + "::BuildInternal()"); } private void FreeStr(IntPtr intPtr) { if (intPtr != IntPtr.Zero) { Marshal.FreeHGlobal(intPtr); } } } } // 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; 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(); if (UnsafeNclNativeMethods.WinHttp.WinHttpGetIEProxyConfigForCurrentUser(ref ieProxyConfig)) { string proxy = null; string proxyByPass = null; string autoConfigUrl = null; try { 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); } finally { FreeStr(ieProxyConfig.Proxy); FreeStr(ieProxyConfig.ProxyBypass); FreeStr(ieProxyConfig.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); } GlobalLog.Leave("WinHttpWebProxyBuilder#" + ValidationHelper.HashString(this) + "::BuildInternal()"); } private void FreeStr(IntPtr intPtr) { if (intPtr != IntPtr.Zero) { Marshal.FreeHGlobal(intPtr); } } } } // 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
- LogWriteRestartAreaState.cs
- MulticastNotSupportedException.cs
- CoreSwitches.cs
- ComponentEditorForm.cs
- DataGridColumnCollection.cs
- InProcStateClientManager.cs
- MeshGeometry3D.cs
- FixUpCollection.cs
- ListControl.cs
- TaskFileService.cs
- WebPartManagerInternals.cs
- ProfileEventArgs.cs
- TraceSection.cs
- JsonClassDataContract.cs
- WriteableBitmap.cs
- FormViewInsertedEventArgs.cs
- Rect.cs
- CharacterMetrics.cs
- DelegateArgument.cs
- SymDocumentType.cs
- XmlDomTextWriter.cs
- MessageQueue.cs
- SetState.cs
- NameTable.cs
- PermissionListSet.cs
- DiscreteKeyFrames.cs
- TripleDES.cs
- TriggerActionCollection.cs
- Expressions.cs
- BitmapEffectGeneralTransform.cs
- MenuRenderer.cs
- SubMenuStyle.cs
- OrthographicCamera.cs
- SmiEventStream.cs
- IdentitySection.cs
- MouseDevice.cs
- ExpressionBuilder.cs
- AssemblySettingAttributes.cs
- ExceptionValidationRule.cs
- ObjectNavigationPropertyMapping.cs
- Assert.cs
- ListBoxItem.cs
- CompilerParameters.cs
- ContextDataSourceView.cs
- Viewport3DVisual.cs
- SoapElementAttribute.cs
- CodePropertyReferenceExpression.cs
- ImageList.cs
- FieldValue.cs
- XsdBuildProvider.cs
- ScaleTransform3D.cs
- RegexBoyerMoore.cs
- IFlowDocumentViewer.cs
- IISMapPath.cs
- CircleHotSpot.cs
- SparseMemoryStream.cs
- InputProcessorProfiles.cs
- FileDialogCustomPlace.cs
- CharStorage.cs
- HtmlInputReset.cs
- translator.cs
- FlowLayoutPanel.cs
- ObjectDataSourceMethodEventArgs.cs
- XmlSchemaComplexContent.cs
- ScrollEvent.cs
- TextWriterEngine.cs
- Rectangle.cs
- Ppl.cs
- DecimalKeyFrameCollection.cs
- RSATokenProvider.cs
- DataListItem.cs
- ReferenceConverter.cs
- ClientTargetCollection.cs
- ProxyAssemblyNotLoadedException.cs
- CollectionViewGroupInternal.cs
- ScriptReferenceBase.cs
- DataObjectCopyingEventArgs.cs
- BitmapEffectCollection.cs
- PasswordTextNavigator.cs
- _TransmitFileOverlappedAsyncResult.cs
- XmlElementList.cs
- RelationshipEndMember.cs
- Vector3DAnimation.cs
- OrderedDictionary.cs
- Point3DIndependentAnimationStorage.cs
- UnsupportedPolicyOptionsException.cs
- CellConstantDomain.cs
- XamlRtfConverter.cs
- FtpCachePolicyElement.cs
- Math.cs
- JsonObjectDataContract.cs
- TreeBuilder.cs
- TextRunTypographyProperties.cs
- TemplateBindingExtension.cs
- SystemPens.cs
- PrivilegedConfigurationManager.cs
- TextEditorContextMenu.cs
- ComplexObject.cs
- ReliableRequestSessionChannel.cs
- MaterialGroup.cs