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
- CodeDirectoryCompiler.cs
- ListBoxItemAutomationPeer.cs
- WizardDesigner.cs
- SchemaCollectionPreprocessor.cs
- BufferAllocator.cs
- ImageListImage.cs
- RC2CryptoServiceProvider.cs
- ModelFactory.cs
- BuildProvider.cs
- ObjectConverter.cs
- DataGridSortCommandEventArgs.cs
- CharEntityEncoderFallback.cs
- ContainerAction.cs
- LinkDesigner.cs
- SystemWebSectionGroup.cs
- TimeSpanHelper.cs
- TextEditorCharacters.cs
- ValuePattern.cs
- ReadOnlyHierarchicalDataSource.cs
- ErrorTableItemStyle.cs
- UpdateManifestForBrowserApplication.cs
- TemplateBindingExtension.cs
- WorkflowView.cs
- TraceSource.cs
- ImmComposition.cs
- XmlAnyAttributeAttribute.cs
- _RequestCacheProtocol.cs
- AttributeData.cs
- PrintEvent.cs
- CommandPlan.cs
- MultilineStringEditor.cs
- DataControlExtensions.cs
- ImageMap.cs
- EraserBehavior.cs
- BamlCollectionHolder.cs
- JsonWriter.cs
- PathTooLongException.cs
- DLinqColumnProvider.cs
- HtmlTextBoxAdapter.cs
- Splitter.cs
- HitTestDrawingContextWalker.cs
- __FastResourceComparer.cs
- WebServiceResponseDesigner.cs
- SqlColumnizer.cs
- XPathDocumentNavigator.cs
- infer.cs
- SafeHGlobalHandleCritical.cs
- WebPartVerb.cs
- shaperfactoryquerycachekey.cs
- CngKey.cs
- ListViewDeleteEventArgs.cs
- URIFormatException.cs
- SafeNativeMethods.cs
- WebPartConnection.cs
- JsonDataContract.cs
- Rules.cs
- AuthenticateEventArgs.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- OutOfMemoryException.cs
- SpecialFolderEnumConverter.cs
- RefreshEventArgs.cs
- InkPresenter.cs
- DefaultExpressionVisitor.cs
- ExpandSegment.cs
- Journal.cs
- XmlChildNodes.cs
- BasicExpandProvider.cs
- XmlAttributeOverrides.cs
- HttpFileCollection.cs
- IIS7WorkerRequest.cs
- CollectionType.cs
- XmlDocument.cs
- ActiveXContainer.cs
- RequestQueue.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- DBSqlParserColumnCollection.cs
- MetadataCollection.cs
- Margins.cs
- SerializationStore.cs
- CompositeScriptReferenceEventArgs.cs
- BrowserTree.cs
- ExpressionCopier.cs
- TdsParserStaticMethods.cs
- wmiprovider.cs
- PageAsyncTask.cs
- PKCS1MaskGenerationMethod.cs
- IMembershipProvider.cs
- SolidColorBrush.cs
- FastPropertyAccessor.cs
- SchemaImporterExtension.cs
- ZipIOLocalFileHeader.cs
- SchemaTableColumn.cs
- FileLoadException.cs
- FastPropertyAccessor.cs
- DocumentPage.cs
- TypeConverterHelper.cs
- webbrowsersite.cs
- GPStream.cs
- TableColumn.cs
- CodePageUtils.cs