public static CFProxy[] GetProxiesForURL(CFUrl url, CFProxySettings proxySettings) { if (url == null || url.Handle == IntPtr.Zero) { throw new ArgumentNullException("url"); } if (proxySettings == null) { proxySettings = GetSystemProxySettings(); } CFArray array = CopyProxiesForURL(url, proxySettings.Dictionary); if (array == null) { return(null); } CFProxy[] proxies = new CFProxy[array.Count]; for (int i = 0; i < proxies.Length; i++) { CFDictionary dict = new CFDictionary(array[i], false); proxies[i] = new CFProxy(dict); } array.Dispose(); return(proxies); }
static CFArray CopyProxiesForURL(CFUrl url, CFDictionary proxySettings) { IntPtr native = CFNetworkCopyProxiesForURL(url.Handle, proxySettings != null ? proxySettings.Handle : IntPtr.Zero); if (native == IntPtr.Zero) { return(null); } return(new CFArray(native, true)); }
public static CFProxy[] GetProxiesForUri(Uri uri, CFProxySettings proxySettings) { if (uri == null) { throw new ArgumentNullException("uri"); } CFUrl url = CFUrl.Create(uri.AbsoluteUri); if (url == null) { return(null); } CFProxy[] proxies = GetProxiesForURL(url, proxySettings); url.Dispose(); return(proxies); }
public static CFProxy[] GetProxiesForAutoConfigurationScript(IntPtr proxyAutoConfigurationScript, Uri targetUri) { if (proxyAutoConfigurationScript == IntPtr.Zero) { throw new ArgumentNullException("proxyAutoConfigurationScript"); } if (targetUri == null) { throw new ArgumentNullException("targetUri"); } CFUrl targetURL = CFUrl.Create(targetUri.AbsoluteUri); CFProxy[] proxies = GetProxiesForAutoConfigurationScript(proxyAutoConfigurationScript, targetURL); targetURL.Dispose(); return(proxies); }
public static CFProxy[] ExecuteProxyAutoConfigurationURL(IntPtr proxyAutoConfigURL, Uri targetURL) { CFUrl url = CFUrl.Create(targetURL.AbsoluteUri); if (url == null) { return(null); } CFProxy[] proxies = null; var runLoop = CFRunLoop.CurrentRunLoop; // Callback that will be called after executing the configuration script CFProxyAutoConfigurationResultCallback cb = delegate(IntPtr client, IntPtr proxyList, IntPtr error) { if (proxyList != IntPtr.Zero) { var array = new CFArray(proxyList, false); proxies = new CFProxy[array.Count]; for (int i = 0; i < proxies.Length; i++) { CFDictionary dict = new CFDictionary(array[i], false); proxies[i] = new CFProxy(dict); } array.Dispose(); } runLoop.Stop(); }; var clientContext = new CFStreamClientContext(); var loopSource = CFNetworkExecuteProxyAutoConfigurationURL(proxyAutoConfigURL, url.Handle, cb, ref clientContext); // Create a private mode var mode = CFString.Create("Mono.MacProxy"); runLoop.AddSource(loopSource, mode); runLoop.RunInMode(mode, double.MaxValue, false); runLoop.RemoveSource(loopSource, mode); return(proxies); }
public static CFProxy[] GetProxiesForAutoConfigurationScript(IntPtr proxyAutoConfigurationScript, CFUrl targetURL) { if (proxyAutoConfigurationScript == IntPtr.Zero) { throw new ArgumentNullException("proxyAutoConfigurationScript"); } if (targetURL == null) { throw new ArgumentNullException("targetURL"); } CFArray array = CopyProxiesForAutoConfigurationScript(proxyAutoConfigurationScript, targetURL); if (array == null) { return(null); } CFProxy[] proxies = new CFProxy[array.Count]; for (int i = 0; i < proxies.Length; i++) { CFDictionary dict = new CFDictionary(array[i], false); proxies[i] = new CFProxy(dict); } array.Dispose(); return(proxies); }
static CFArray CopyProxiesForAutoConfigurationScript(IntPtr proxyAutoConfigurationScript, CFUrl targetURL) { IntPtr err = IntPtr.Zero; IntPtr native = CFNetworkCopyProxiesForAutoConfigurationScript(proxyAutoConfigurationScript, targetURL.Handle, out err); if (native == IntPtr.Zero) { return(null); } return(new CFArray(native, true)); }