Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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());
        }
Exemple #4
0
            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));
            }
Exemple #5
0
        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));
        }
Exemple #6
0
        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;
		}
Exemple #9
0
            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;
 }
Exemple #11
0
			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;
			}
Exemple #12
0
		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;
		}
Exemple #13
0
		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;
		}
Exemple #14
0
		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;
		}