private static Uri GetProxyUri(string scheme, CFProxy proxy) { var uriBuilder = new UriBuilder( scheme, proxy.HostName, proxy.PortNumber); // TODO https://github.com/dotnet/runtime/issues/24799 - Credentials are not propagated return(uriBuilder.Uri); }
public Uri?ExecuteProxyAutoConfiguration(SafeCreateHandle cfurl, CFProxy proxy) { Uri? result = null; CFRunLoopRef runLoop = CFRunLoopGetCurrent(); // Callback that will be called after executing the configuration script CFProxyAutoConfigurationResultCallback cb = (IntPtr client, IntPtr proxyListHandle, IntPtr error) => { if (proxyListHandle != IntPtr.Zero) { using (var proxyList = new SafeCFArrayHandle(proxyListHandle, false)) { long proxyCount = CFArrayGetCount(proxyList); for (int i = 0; i < proxyCount; i++) { IntPtr proxyValue = CFArrayGetValueAtIndex(proxyList, i); using (SafeCFDictionaryHandle proxyDict = new SafeCFDictionaryHandle(proxyValue, false)) { CFProxy proxy = new CFProxy(proxyDict); if (proxy.ProxyType == CFProxy.kCFProxyTypeHTTP || proxy.ProxyType == CFProxy.kCFProxyTypeHTTPS) { result = GetProxyUri("http", proxy); break; } } } } } CFRunLoopStop(runLoop); }; CFStreamClientContext clientContext = default; CFRunLoopSourceRef loopSource = proxy.ProxyType == CFProxy.kCFProxyTypeAutoConfigurationURL ? CFNetworkExecuteProxyAutoConfigurationURL(proxy.AutoConfigurationURL, cfurl, cb, ref clientContext) : CFNetworkExecuteProxyAutoConfigurationScript(proxy.AutoConfigurationJavaScript, cfurl, cb, ref clientContext); using (var mode = CFStringCreateWithCString(typeof(MacProxy).FullName !)) { IntPtr modeHandle = mode.DangerousGetHandle(); CFRunLoopAddSource(runLoop, loopSource, modeHandle); CFRunLoopRunInMode(modeHandle, double.MaxValue, 0); CFRunLoopSourceInvalidate(loopSource); } GC.KeepAlive(cb); return(result); }
public string CFUpdate() { StringBuilder sb = new StringBuilder(); var dt = CF; var request = new CFProxy(); string rs = ""; // Unchanged disindakileri gonder, deleted disindakileri reply ile guncelle, hata yoksa her rec icin AcceptChanges for (int i = 0; i < dt.Rows.Count; i++) { // States: Added, Modified, Deletede, Unchanged rs = dt.Rows[i].RowState.ToString().Substring(0, 1); if (rs == "A" || rs == "M" || rs == "D") { dt.Rows[i].ClearErrors(); request.RowSte = rs; //request.RowUsr = Program.ObjUsr; if (rs == "D") { request.RowKey = (ulong)dt.Rows[i]["RowKey", DataRowVersion.Original]; } else { ProxyHelper.RowToProxy(dt, dt.Rows[i], request); } var reply = grpcService.ClientCRUDs.CFUpdate(request); // ---------> if (string.IsNullOrEmpty(reply.RowErr)) { if (rs != "D") { ProxyHelper.ProxyToRow(dt, dt.Rows[i], reply); } dt.Rows[i].AcceptChanges(); } else { dt.Rows[i].RowError = reply.RowErr; sb.AppendLine(reply.RowErr); dt.Rows[i].RejectChanges(); } } } return(sb.ToString()); }
static Uri GetProxyUri(CFProxy proxy, out NetworkCredential credentials) { string protocol; switch (proxy.ProxyType) { case CFProxyType.FTP: protocol = "ftp://"; break; case CFProxyType.HTTP: case CFProxyType.HTTPS: protocol = "http://"; break; default: credentials = null; return(null); } string username = proxy.Username; string password = proxy.Password; string hostname = proxy.HostName; int port = proxy.Port; string uri; if (username != null) { credentials = new NetworkCredential(username, password); } else { credentials = null; } uri = protocol + hostname + (port != 0 ? ':' + port.ToString() : string.Empty); return(new Uri(uri, UriKind.Absolute)); }
public override Task <CFProxy> CFUpdate(CFProxy request, ServerCallContext context) { Scheduling.RunTask(() => { // RowSte: Added, Modified, Deletede, Unchanged Db.Transact(() => { if (request.RowSte == "A" || request.RowSte == "M") { if (request.RowErr == string.Empty) { CF row = CRUDsHelper.FromProxy <CFProxy, CF>(request); //XUT.Append(request.RowUsr, row, request.RowSte); request = CRUDsHelper.ToProxy <CFProxy, CF>(row); } } else if (request.RowSte == "D") { var row = (CF)Db.FromId(request.RowKey); if (row == null) { request.RowErr = "CF Rec not found"; } else { request.RowErr = $"Silemezsiniz"; } } }); }).Wait(); Session.RunTaskForAll((s, id) => { s.CalculatePatchAndPushOnWebSocket(); }); return(Task.FromResult(request)); }
public static CFProxy[] GetProxiesForAutoConfigurationScript(NSString proxyAutoConfigurationScript, NSUrl targetURL) { if (proxyAutoConfigurationScript == null) throw new ArgumentNullException ("proxyAutoConfigurationScript"); if (targetURL == null) throw new ArgumentNullException ("targetURL"); using (var array = CopyProxiesForAutoConfigurationScript (proxyAutoConfigurationScript, targetURL)) { if (array == null) return null; NSDictionary[] dictionaries = NSArray.ArrayFromHandle<NSDictionary> (array.Handle); if (dictionaries == null) return null; CFProxy[] proxies = new CFProxy [dictionaries.Length]; for (int i = 0; i < dictionaries.Length; i++) proxies [i] = new CFProxy (dictionaries [i]); return proxies; } }
static Uri GetProxyUri (CFProxy proxy, out NetworkCredential credentials) { string protocol; switch (proxy.ProxyType) { case CFProxyType.FTP: protocol = "ftp://"; break; case CFProxyType.HTTP: case CFProxyType.HTTPS: protocol = "http://"; break; default: credentials = null; return null; } string username = proxy.Username; string password = proxy.Password; string hostname = proxy.HostName; int port = proxy.Port; string uri; if (username != null) credentials = new NetworkCredential (username, password); else credentials = null; uri = protocol + hostname + (port != 0 ? ':' + port.ToString () : string.Empty); return new Uri (uri, UriKind.Absolute); }
public static CFProxy[] GetProxiesForURL (NSUrl url, CFProxySettings proxySettings) { if (url == null || (url.Handle == IntPtr.Zero)) throw new ArgumentNullException ("url"); if (proxySettings == null) proxySettings = GetSystemProxySettings (); NSArray array = CopyProxiesForURL (url, proxySettings.Dictionary); if (array == null) return null; NSDictionary[] dictionaries = NSArray.ArrayFromHandle<NSDictionary> (array.Handle); array.Dispose (); if (dictionaries == null) return null; CFProxy[] proxies = new CFProxy [dictionaries.Length]; for (int i = 0; i < dictionaries.Length; i++) proxies[i] = new CFProxy (dictionaries[i]); return proxies; }
static Uri GetProxyUri(CFProxy proxy) { string protocol; switch (proxy.ProxyType) { case CFProxyType.FTP: protocol = "ftp://"; break; case CFProxyType.HTTP: protocol = "http://"; break; case CFProxyType.HTTPS: protocol = "https://"; break; default: return null; } string username = proxy.Username; string password = proxy.Password; string hostname = proxy.HostName; int port = proxy.Port; string userinfo; string uri; if (username != null) { if (password != null) userinfo = Uri.EscapeDataString (username) + ':' + Uri.EscapeDataString (password) + '@'; else userinfo = Uri.EscapeDataString (username) + '@'; } else { userinfo = string.Empty; } uri = protocol + userinfo + hostname + (port != 0 ? ':' + port.ToString () : string.Empty); return new Uri (uri, UriKind.Absolute); }
public ProxyInfo(CFProxy proxy) { HostName = proxy.HostName; Port = proxy.Port; ProxyType = proxy.ProxyType; }
static Uri SelectProxy (CFProxy[] proxies, Uri targetUri, out NetworkCredential credentials) { if (proxies == null) { credentials = null; return targetUri; } for (int i = 0; i < proxies.Length; i++) { switch (proxies[i].ProxyType) { case CFProxyType.HTTPS: case CFProxyType.HTTP: case CFProxyType.FTP: // create a Uri based on the hostname/port/etc info return GetProxyUri (proxies[i], out credentials); case CFProxyType.SOCKS: default: // unsupported proxy type, try the next one break; case CFProxyType.None: // no proxy should be used credentials = null; return targetUri; } } credentials = null; return null; }
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; }
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; }