protected Cmd _SendAndWaitForResponse(TorControl.Commands type, byte[] cmd)
        {
            CheckThread();
            Waiter w = new Waiter();

            lock (waiters.SyncRoot) {
                SendCommand(type, cmd);
                waiters.Enqueue(w);
            }
            return (Cmd) w.Response;
        }
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();



            Window.Title = Constants.Name + " - " + Messages.WindowsSettingsTitle;

            TableRoutes.Delegate         = new TableRoutingDelegate(this);
            TableAdvancedEvents.Delegate = new TableAdvancedEventsDelegate(this);

            LblLoggingHelp.StringValue = Messages.WindowsSettingsLoggingHelp;

            TableRoutingController        = new TableRoutingController(this.TableRoutes);
            TableAdvancedEventsController = new TableAdvancedEventsController(this.TableAdvancedEvents);

            CmdSave.Activated += (object sender, EventArgs e) => {
                if (Check())
                {
                    SaveOptions();
                    Close();
                }
            };

            CmdCancel.Activated += (object sender, EventArgs e) => {
                Close();
            };

            CmdGeneralTos.Activated += (object sender, EventArgs e) => {
                WindowTosController tos = new WindowTosController();
                tos.Window.ReleasedWhenClosed = true;
                NSApplication.SharedApplication.RunModalForWindow(tos.Window);
                tos.Window.Close();
            };

            /*
             * CboGeneralOsxInterfaceStyle.RemoveAllItems ();
             * CboGeneralOsxInterfaceStyle.AddItem ("Default");
             * CboGeneralOsxInterfaceStyle.AddItem ("Dark");
             */

            // Modes
            string sshStatus = (Software.SshVersion != "" ? "" : "Not available");

            if (sshStatus != "")
            {
                m_modeSshEnabled = false;
            }
            // TODO: disable ssh & ssl
            string sslStatus = (Software.SslVersion != "" ? "" : "Not available");

            if (sslStatus != "")
            {
                m_modeSslEnabled = false;
            }

            CmdModeHelp.Activated += (object sender, EventArgs e) => {
                Core.UI.Actions.OpenUrlDocsProtocols();
            };

            ChkModeAutomatic.Activated += (object sender, EventArgs e) => {
                m_mode_protocol  = "AUTO";
                m_mode_port      = 443;
                m_mode_alternate = 0;
                ChangeMode();
            };

            ChkModeUdp443.Activated += (object sender, EventArgs e) => {
                m_mode_protocol  = "UDP";
                m_mode_port      = 443;
                m_mode_alternate = 0;
                ChangeMode();
            };

            ChkModeTcp443.Activated += (object sender, EventArgs e) => {
                m_mode_protocol  = "TCP";
                m_mode_port      = 443;
                m_mode_alternate = 0;
                ChangeMode();
            };

            ChkModeUdp80.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "UDP";
                m_mode_port      = 80;
                m_mode_alternate = 0;
                ChangeMode();
            };

            ChkModeTcp80.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "TCP";
                m_mode_port      = 80;
                m_mode_alternate = 0;
                ChangeMode();
            };

            ChkModeUdp53.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "UDP";
                m_mode_port      = 53;
                m_mode_alternate = 0;
                ChangeMode();
            };

            ChkModeTcp53.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "TCP";
                m_mode_port      = 53;
                m_mode_alternate = 0;
                ChangeMode();
            };

            ChkModeUdp2018.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "UDP";
                m_mode_port      = 2018;
                m_mode_alternate = 0;
                ChangeMode();
            };

            ChkModeTcp2018.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "TCP";
                m_mode_port      = 2018;
                m_mode_alternate = 0;
                ChangeMode();
            };



            ChkModeUdp443Alt.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "UDP";
                m_mode_port      = 443;
                m_mode_alternate = 1;
                ChangeMode();
            };

            ChkModeUdp80Alt.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "UDP";
                m_mode_port      = 80;
                m_mode_alternate = 1;
                ChangeMode();
            };

            ChkModeUdp53Alt.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "UDP";
                m_mode_port      = 53;
                m_mode_alternate = 1;
                ChangeMode();
            };

            ChkModeUdp2018Alt.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "UDP";
                m_mode_port      = 2018;
                m_mode_alternate = 1;
                ChangeMode();
            };

            ChkModeTcp2018Alt.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "TCP";
                m_mode_port      = 2018;
                m_mode_alternate = 1;
                ChangeMode();
            };


            ChkModeSsh22.Activated += (object sender, EventArgs e) => {
                m_mode_protocol  = "SSH";
                m_mode_port      = 22;
                m_mode_alternate = 0;
                ChangeMode();
            };

            ChkModeSsh22Alt.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "SSH";
                m_mode_port      = 22;
                m_mode_alternate = 1;
                ChangeMode();
            };

            ChkModeSsh80.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "SSH";
                m_mode_port      = 80;
                m_mode_alternate = 1;
                ChangeMode();
            };

            ChkModeSsh53.Activated += (object sender, EventArgs e) =>
            {
                m_mode_protocol  = "SSH";
                m_mode_port      = 53;
                m_mode_alternate = 1;
                ChangeMode();
            };

            ChkModeSsl443.Activated += (object sender, EventArgs e) => {
                m_mode_protocol  = "SSL";
                m_mode_port      = 443;
                m_mode_alternate = 1;
                ChangeMode();
            };

            ChkModeTor.Activated += (object sender, EventArgs e) => {
                m_mode_protocol  = "TOR";
                m_mode_port      = 2018;
                m_mode_alternate = 0;
                ChangeMode();
            };

            CmdModeTorTest.Activated += (object sender, EventArgs e) => {
                string result = TorControl.Test(TxtModeTorHost.StringValue, Conversions.ToInt32(TxtModeTorControlPort.StringValue), TxtModeTorControlPassword.StringValue);
                GuiUtils.MessageBox(result);
            };

            // Proxy
            CboProxyType.Activated += (object sender, EventArgs e) => {
                EnableIde();
            };
            CboProxyAuthentication.Activated += (object sender, EventArgs e) => {
                EnableIde();
            };

            // Routes
            CboRoutesOtherwise.RemoveAllItems();
            CboRoutesOtherwise.AddItem(RouteDirectionToDescription("in"));
            CboRoutesOtherwise.AddItem(RouteDirectionToDescription("out"));
            CboRoutesOtherwise.Activated += (object sender, EventArgs e) => {
                EnableIde();
            };

            TableRoutes.DoubleClick += (object sender, EventArgs e) => {
                RouteEdit();
            };

            CmdRouteAdd.Activated += (object sender, EventArgs e) => {
                RouteAdd();
            };

            CmdRouteRemove.Activated += (object sender, EventArgs e) => {
                RouteRemove();
            };

            CmdRouteEdit.Activated += (object sender, EventArgs e) => {
                RouteEdit();
            };

            // Advanced

            CmdLockHelp.Activated += (object sender, EventArgs e) => {
                Core.UI.Actions.OpenUrlDocsLock();
            };
            CboLockMode.RemoveAllItems();
            CboLockMode.AddItem("None");
            CboLockMode.AddItem("Automatic");
            foreach (NetworkLockPlugin lockPlugin in Engine.Instance.NetworkLockManager.Modes)
            {
                CboLockMode.AddItem(lockPlugin.GetName());
            }

            LblRoutesNetworkLockWarning.StringValue = Messages.WindowsSettingsRouteLockHelp;
            LblLockRoutingOutWarning.StringValue    = Messages.NetworkLockNotAvailableWithRouteOut;

            CboAdvancedManifestRefresh.RemoveAllItems();
            CboAdvancedManifestRefresh.AddItem("Automatic");
            CboAdvancedManifestRefresh.AddItem("Never");
            CboAdvancedManifestRefresh.AddItem("Every minute");
            CboAdvancedManifestRefresh.AddItem("Every ten minute");
            CboAdvancedManifestRefresh.AddItem("Every one hour");

            CmdAdvancedHelp.Activated += (object sender, EventArgs e) => {
                Core.UI.Actions.OpenUrlDocsAdvanced();
            };

            CmdAdvancedOpenVpnPath.Activated += (object sender, EventArgs e) => {
                GuiUtils.SelectFile(this.Window, TxtAdvancedOpenVpnPath);
            };

            TxtLoggingPath.Changed += (object sender, EventArgs e) => {
                RefreshLogPreview();
            };

            TableAdvancedEvents.DoubleClick += (object sender, EventArgs e) => {
                AdvancedEventEdit();
            };

            CmdAdvancedEventsEdit.Activated += (object sender, EventArgs e) => {
                AdvancedEventEdit();
            };

            CmdAdvancedEventsClear.Activated += (object sender, EventArgs e) => {
                AdvancedEventClear();
            };


            ChkAdvancedPingerAlways.Hidden = true;             // TOCLEAN

            ReadOptions();

            EnableIde();

            RefreshLogPreview();
        }
Example #3
0
 private void cmdModeTorTest_Click(object sender, EventArgs e)
 {
     MessageBox.Show(TorControl.Test(txtModeTorHost.Text, Conversions.ToInt32(txtModeTorControlPort.Text), txtModeTorControlPassword.Text));
 }
Example #4
0
        public override void Activation()
        {
            base.Activation();

            // Block All
            if (Engine.Instance.Storage.Get("netlock.incoming") == "block")
            {
                XmlDocument xmlDocRule = new XmlDocument();
                XmlElement  xmlRule    = xmlDocRule.CreateElement("rule");
                xmlRule.SetAttribute("name", "NetLock - In - Block All");
                xmlRule.SetAttribute("layer", "all-in");
                xmlRule.SetAttribute("action", "block");
                AddRule("netlock_in_block_all", xmlRule);
            }
            if (Engine.Instance.Storage.Get("netlock.outgoing") == "block")
            {
                XmlDocument xmlDocRule = new XmlDocument();
                XmlElement  xmlRule    = xmlDocRule.CreateElement("rule");
                xmlRule.SetAttribute("name", "NetLock - Out - Block All");
                xmlRule.SetAttribute("layer", "all-out");
                xmlRule.SetAttribute("action", "block");
                AddRule("netlock_out_block_all", xmlRule);
            }

            // Allow Eddie / OpenVPN / Stunnel / Plink
            AddRule("netlock_allow_eddie", Wfp.CreateItemAllowProgram("NetLock - Allow Eddie", Platform.Instance.GetExecutablePath()));

            if (Engine.Instance.Storage.GetLower("proxy.mode") == "tor")
            {
                string path = TorControl.GetTorExecutablePath();
                if (path != "")
                {
                    AddRule("netlock_allow_tor", Wfp.CreateItemAllowProgram("NetLock - Allow Tor", path));
                }
            }

            // Allow loopback
            {
                XmlDocument xmlDocRule = new XmlDocument();
                XmlElement  xmlRule    = xmlDocRule.CreateElement("rule");
                xmlRule.SetAttribute("name", "NetLock - Allow loopback");
                xmlRule.SetAttribute("layer", "all");
                xmlRule.SetAttribute("action", "permit");
                XmlElement XmlIf1 = xmlDocRule.CreateElement("if");
                xmlRule.AppendChild(XmlIf1);
                XmlIf1.SetAttribute("field", "ip_local_interface");
                XmlIf1.SetAttribute("match", "equal");
                XmlIf1.SetAttribute("interface", "loopback");
                AddRule("netlock_allow_loopback", xmlRule);
            }

            if (Engine.Instance.Storage.GetBool("netlock.allow_ping") == true)
            {
                // Allow ICMP
                {
                    XmlDocument xmlDocRule = new XmlDocument();
                    XmlElement  xmlRule    = xmlDocRule.CreateElement("rule");
                    xmlRule.SetAttribute("name", "NetLock - Allow ICMP");
                    xmlRule.SetAttribute("layer", "all");
                    xmlRule.SetAttribute("action", "permit");
                    XmlElement XmlIf1 = xmlDocRule.CreateElement("if");
                    xmlRule.AppendChild(XmlIf1);
                    XmlIf1.SetAttribute("field", "ip_protocol");
                    XmlIf1.SetAttribute("match", "equal");
                    XmlIf1.SetAttribute("protocol", "icmp");
                    AddRule("netlock_allow_icmp", xmlRule);
                }
            }

            if (Engine.Instance.Storage.GetBool("netlock.allow_private") == true)
            {
                AddRule("netlock_allow_ipv4_local1", Wfp.CreateItemAllowAddress("NetLock - Private - Allow Local Subnet 1 - IPv4", new IpAddress("192.168.0.0/255.255.0.0")));
                AddRule("netlock_allow_ipv4_local2", Wfp.CreateItemAllowAddress("NetLock - Private - Allow Local Subnet 2 - IPv4", new IpAddress("172.16.0.0/255.240.0.0")));
                AddRule("netlock_allow_ipv4_local3", Wfp.CreateItemAllowAddress("NetLock - Private - Allow Local Subnet 3 - IPv4", new IpAddress("10.0.0.0/255.0.0.0")));
                AddRule("netlock_allow_ipv4_multicast", Wfp.CreateItemAllowAddress("NetLock - Private - Allow Multicast - IPv4", new IpAddress("224.0.0.0/255.255.255.0")));
                AddRule("netlock_allow_ipv4_ssdp", Wfp.CreateItemAllowAddress("NetLock - Private - Allow Simple Service Discovery Protocol address", new IpAddress("239.255.255.250/255.255.255.255")));
                AddRule("netlock_allow_ipv4_slp", Wfp.CreateItemAllowAddress("NetLock - Private - Allow Service Location Protocol", new IpAddress("239.255.255.253/255.255.255.255")));
            }

            // Without this, Windows stay in 'Identifying network...' and OpenVPN in 'Waiting TUN to come up'. // Note 2018: don't occur in Win10?
            if (Engine.Instance.Storage.GetBool("netlock.allow_dhcp") == true)
            {
                XmlDocument xmlDocRule = new XmlDocument();
                XmlElement  xmlRule    = xmlDocRule.CreateElement("rule");
                xmlRule.SetAttribute("name", "NetLock - Allow DHCP");
                xmlRule.SetAttribute("layer", "all");
                xmlRule.SetAttribute("action", "permit");

                XmlElement XmlIf1 = xmlDocRule.CreateElement("if");
                xmlRule.AppendChild(XmlIf1);
                XmlIf1.SetAttribute("field", "ip_protocol");
                XmlIf1.SetAttribute("match", "equal");
                XmlIf1.SetAttribute("protocol", "udp");

                XmlElement XmlIf2 = xmlDocRule.CreateElement("if");
                xmlRule.AppendChild(XmlIf2);
                XmlIf2.SetAttribute("field", "ip_local_port");
                XmlIf2.SetAttribute("match", "equal");
                XmlIf2.SetAttribute("port", "68");

                XmlElement XmlIf3 = xmlDocRule.CreateElement("if");
                xmlRule.AppendChild(XmlIf3);
                XmlIf3.SetAttribute("field", "ip_remote_port");
                XmlIf3.SetAttribute("match", "equal");
                XmlIf3.SetAttribute("port", "67");

                AddRule("netlock_allow_dhcp", xmlRule);
            }

            OnUpdateIps();
        }
        protected void SendCommand(TorControl.Commands type, byte[] cmd)
        {
            lock (output) {
                if (cmd == null || cmd.Length <= 65535) {
                    SendCommand0(type, cmd);
                    return;
                }

                int length = cmd.Length;
                output.WriteShort(65535);
                output.WriteShort((int)TorControl.Commands.FragmentHeader);
                output.WriteShort((int)type);
                output.WriteInt(length);
                output.Write(cmd, 0, 65535);

                for (int pos = 65535; pos < length; pos += 65535) {
                    int flen = length-pos < 65535 ? length -pos : 65535;
                    output.WriteShort(flen);
                    output.WriteShort((int)TorControl.Commands.Fragment);
                    output.Write(cmd, pos, flen);
                }
            }
        }
        protected void SendCommand0(TorControl.Commands type, byte[] cmd)
        {
            int length = cmd == null ? 0 : cmd.Length;

            output.WriteShort(length);
            output.WriteShort((int)type);

            if (cmd != null && cmd.Length > 0)
                output.Write(cmd);
        }
 protected Cmd SendAndWaitForResponse(TorControl.Commands type, byte[] cmd)
 {
     return SendAndWaitForResponse(type, cmd,
                                   TorControl.Commands.Done, TorControl.Commands.Done,
                                   TorControl.Commands.Done, TorControl.Commands.Done);
 }
        protected Cmd SendAndWaitForResponse(TorControl.Commands type, byte[] cmd, 
		                                     TorControl.Commands exType1, TorControl.Commands exType2, 
		                                     TorControl.Commands exType3)
        {
            return SendAndWaitForResponse(type, cmd, exType1, exType2, exType3, exType3);
        }
        public override void Activation()
        {
            base.Activation();

            try
            {
                // Service
                {
                    ServiceController service = null;
                    try
                    {
                        service         = new ServiceController("MpsSvc");
                        m_serviceStatus = (service.Status == ServiceControllerStatus.Running);
                        if (m_serviceStatus == false)
                        {
                            TimeSpan timeout = TimeSpan.FromMilliseconds(10000);
                            service.Start();
                            service.WaitForStatus(ServiceControllerStatus.Running, timeout);
                        }
                    }
                    catch (Exception e)
                    {
                        if (e.Message.Contains("MpsSvc"))
                        {
                            throw new Exception(LanguageManager.GetText("NetworkLockWindowsFirewallUnableToStartService"));
                        }
                        else
                        {
                            throw e;
                        }
                    }
                    finally
                    {
                        if (service != null)
                        {
                            service.Dispose();
                        }
                    }
                }

                // If 'winfirewall_rules_original.airvpn' doesn't exists, create it. It's a general backup of the first time.
                // We create this kind of file in Windows System directory, because it's system critical data, and to allow it to survive between re-installation of the software.
                string rulesBackupFirstTime = Engine.Instance.GetPathInData("winfirewall_rules_original.wfw");
                if (Platform.Instance.FileExists(rulesBackupFirstTime) == false)
                {
                    NetShAdvFirewall("export \"" + SystemShell.EscapePath(rulesBackupFirstTime) + "\"");
                }

                string rulesBackupSession = Engine.Instance.GetPathInData("winfirewall_rules_backup.wfw");
                if (Platform.Instance.FileExists(rulesBackupSession))
                {
                    Platform.Instance.FileDelete(rulesBackupSession);
                }
                NetShAdvFirewall("export \"" + SystemShell.EscapePath(rulesBackupSession) + "\"");
                if (Platform.Instance.FileExists(rulesBackupSession) == false)
                {
                    throw new Exception(LanguageManager.GetText("NetworkLockWindowsFirewallBackupFailed"));
                }

                foreach (NetworkLockWindowsFirewallProfile profile in Profiles)
                {
                    profile.Fetch();
                }

                foreach (NetworkLockWindowsFirewallProfile profile in Profiles)
                {
                    if (profile.State == false)
                    {
                        profile.StateOn();
                    }

                    /*
                     * if (profile.Notifications == true)
                     * {
                     *      profile.NotifyOff();
                     * }
                     */
                }

                // Disable all notifications
                NetShAdvFirewall("set allprofiles settings inboundusernotification disable");

                NetShAdvFirewall("firewall delete rule name=all");

                // Windows Firewall don't work with logical path (a path that contain hardlink)
                NetShAdvFirewall("firewall add rule name=\"Eddie - Out - Program Eddie\" dir=out action=allow program=\"" + SystemShell.EscapePath(Platform.Instance.FileGetPhysicalPath(Platform.Instance.GetExecutablePath())) + "\" enable=yes");

                if (Engine.Instance.Storage.GetLower("proxy.mode") == "tor")
                {
                    string path = TorControl.GetTorExecutablePath();
                    if (path != "")
                    {
                        NetShAdvFirewall("firewall add rule name=\"Eddie - Out - Program Tor\" dir=out action=allow program=\"" + SystemShell.EscapePath(Platform.Instance.FileGetPhysicalPath(path)) + "\" enable=yes");
                    }
                }

                // Adding rules are slow, so force at least curl
                if (Platform.Instance.FetchUrlInternal() == false)
                {
                    NetShAdvFirewall("firewall add rule name=\"Eddie - Out - Program curl\" dir=out action=allow program=\"" + SystemShell.EscapePath(Platform.Instance.FileGetPhysicalPath(Software.GetTool("curl").Path)) + "\" enable=yes");
                }

                if (Engine.Instance.Storage.GetBool("netlock.allow_ping") == true)
                {
                    NetShAdvFirewall("firewall add rule name=\"Eddie - In - ICMP IPv4\" dir=in action=allow protocol=icmpv4:8,any");
                    NetShAdvFirewall("firewall add rule name=\"Eddie - In - ICMP IPv6\" dir=in action=allow protocol=icmpv6:8,any");
                    NetShAdvFirewall("firewall add rule name=\"Eddie - Out - ICMP IPv4\" dir=out action=allow protocol=icmpv4:8,any");
                    NetShAdvFirewall("firewall add rule name=\"Eddie - Out - ICMP IPv6\" dir=out action=allow protocol=icmpv6:8,any");
                }

                // Exec("netsh advfirewall firewall add rule name=\"Eddie - IPv6 Block - Low\" dir=out remoteip=0000::/1 action=allow");
                // Exec("netsh advfirewall firewall add rule name=\"Eddie - IPv6 Block - High\" dir=out remoteip=8000::/1 action=allow");

                if (Engine.Instance.Storage.GetBool("netlock.allow_private") == true)
                {
                    NetShAdvFirewall("firewall add rule name=\"Eddie - In - AllowLocal\" dir=in action=allow remoteip=LocalSubnet");
                    NetShAdvFirewall("firewall add rule name=\"Eddie - Out - AllowLocal\" dir=out action=allow remoteip=LocalSubnet");

                    NetShAdvFirewall("firewall add rule name=\"Eddie - Out - AllowMulticast\" dir=out action=allow remoteip=224.0.0.0/24");
                    NetShAdvFirewall("firewall add rule name=\"Eddie - Out - AllowSimpleServiceDiscoveryProtocol\" dir=out action=allow remoteip=239.255.255.250/32");
                    NetShAdvFirewall("firewall add rule name=\"Eddie - Out - ServiceLocationProtocol\" dir=out action=allow remoteip=239.255.255.253/32");
                }

                // This is not optimal, it maybe also allow LAN traffic, but we can't find a better alternative (interfacetype=ras don't work) and WinFirewall method must be deprecated.
                NetShAdvFirewall("firewall add rule name=\"Eddie - In - AllowVPN\" dir=in action=allow localip=10.0.0.0/8");
                NetShAdvFirewall("firewall add rule name=\"Eddie - Out - AllowVPN\" dir=out action=allow localip=10.0.0.0/8");

                // Without this, Windows stay in 'Identifying network...' and OpenVPN in 'Waiting TUN to come up'.
                NetShAdvFirewall("firewall add rule name=\"Eddie - Out - DHCP\" dir=out action=allow protocol=UDP localport=68 remoteport=67 program=\"%SystemRoot%\\system32\\svchost.exe\" service=\"dhcp\"");

                string cmd = "set allprofiles firewallpolicy ";
                if (Engine.Instance.Storage.Get("netlock.incoming") == "allow")
                {
                    cmd += "allowinbound";
                }
                else
                {
                    cmd += "blockinbound";
                }
                cmd += ",";
                if (Engine.Instance.Storage.Get("netlock.outgoing") == "allow")
                {
                    cmd += "allowoutbound";
                }
                else
                {
                    cmd += "blockoutbound";
                }
                NetShAdvFirewall(cmd);

                m_activated = true;                 // To avoid OnUpdateIps before this moment

                OnUpdateIps();
            }
            catch (Exception ex)
            {
                Deactivation();
                throw new Exception(ex.Message);
            }
        }
        protected Cmd SendAndWaitForResponse(TorControl.Commands type, byte[] cmd,
		                                     TorControl.Commands exType1, TorControl.Commands exType2,
		                                     TorControl.Commands exType3, TorControl.Commands exType4)
        {
            Cmd c = _SendAndWaitForResponse(type, cmd);
            if (c.Type == TorControl.Commands.Error)
                throw new TorControlException(Bytes.GetU16(c.Body, 0),
                                              Bytes.GetNulTerminatedStr(c.Body,2));

            if (c.Type == exType1 || c.Type == exType2 || c.Type == exType3 ||
                c.Type == exType4)
                return c;

            throw new TorControlSyntaxException("Unexpected reply type: " + c.Type);
        }
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            Window.Title = Constants.Name + " - " + Messages.WindowsSettingsTitle;

            TableTabsController = new TableTabsController(TableTabs, TabMain);

            ChkNetLock.Activated += (object sender, EventArgs e) =>
            {
                if (GuiUtils.GetCheck(ChkNetLock))
                {
                    if ((Engine.Instance as UI.Cocoa.Osx.Engine).MainWindow.NetworkLockKnowledge() == false)
                    {
                        GuiUtils.SetCheck(ChkNetLock, false);
                    }
                }
            };

            TableRoutes.Delegate = new TableRoutingDelegate(this);

            LblDnsServers.StringValue = Messages.WindowsSettingsDnsServers;
            TableDnsServers.Delegate  = new TableDnsServersDelegate(this);

            TableAdvancedEvents.Delegate = new TableAdvancedEventsDelegate(this);

            LblLoggingHelp.StringValue = Messages.WindowsSettingsLoggingHelp;

            TableRoutingController        = new TableRoutingController(this.TableRoutes);
            TableDnsServersController     = new TableDnsServersController(this.TableDnsServers);
            TableAdvancedEventsController = new TableAdvancedEventsController(this.TableAdvancedEvents);

            CmdSave.Activated += (object sender, EventArgs e) =>
            {
                try
                {
                    if (Check())
                    {
                        SaveOptions();
                        Close();
                    }
                }
                catch (Exception ex)
                {
                    Core.Engine.Instance.Logs.Log(LogType.Fatal, ex);
                }
            };

            CmdCancel.Activated += (object sender, EventArgs e) =>
            {
                Close();
            };

            // General

            CmdGeneralTos.Activated += (object sender, EventArgs e) =>
            {
                WindowTosController tos = new WindowTosController();
                tos.Window.ReleasedWhenClosed = true;
                NSApplication.SharedApplication.RunModalForWindow(tos.Window);
                tos.Window.Close();
            };

            CmdResetToDefault.Activated += (object sender, EventArgs e) =>
            {
                if (Engine.Instance.OnAskYesNo(Messages.ResetSettingsConfirm))
                {
                    Engine.Instance.Storage.ResetAll(false);
                    ReadOptions();
                    GuiUtils.MessageBoxInfo(Messages.ResetSettingsDone);
                }
            };

            // UI

            CboUiUnit.RemoveAllItems();
            CboUiUnit.AddItem(Messages.WindowsSettingsUiUnit0);
            CboUiUnit.AddItem(Messages.WindowsSettingsUiUnit1);
            CboUiUnit.AddItem(Messages.WindowsSettingsUiUnit2);

            // Protocols

            CmdProtocolsHelp1.Activated += (object sender, EventArgs e) =>
            {
                Engine.Instance.Command("ui.show.docs.protocols");
            };

            CmdProtocolsHelp2.Activated += (object sender, EventArgs e) =>
            {
                Engine.Instance.Command("ui.show.docs.udp_vs_tcp");
            };

            ChkProtocolsAutomatic.Activated += (object sender, EventArgs e) =>
            {
                EnableIde();
            };

            TableProtocols.Delegate  = new TableProtocolsDelegate(this);
            TableProtocolsController = new TableProtocolsController(this.TableProtocols);

            // Proxy
            CboProxyType.RemoveAllItems();
            CboProxyType.AddItem("None");
            CboProxyType.AddItem("Http");
            CboProxyType.AddItem("Socks");
            CboProxyType.AddItem("Tor");
            CboProxyWhen.RemoveAllItems();
            CboProxyWhen.AddItem(Messages.WindowsSettingsProxyWhenAlways);
            CboProxyWhen.AddItem(Messages.WindowsSettingsProxyWhenWeb);
            CboProxyWhen.AddItem(Messages.WindowsSettingsProxyWhenOpenVPN);
            CboProxyWhen.AddItem(Messages.WindowsSettingsProxyWhenNone);

            CmdProxyTorHelp.Activated += (object sender, EventArgs e) =>
            {
                Engine.Instance.Command("ui.show.docs.tor");
            };
            CboProxyType.Activated += (object sender, EventArgs e) =>
            {
                EnableIde();

                if (GuiUtils.GetSelected(CboProxyType) == "Tor")
                {
                    TxtProxyPort.StringValue = "9150";
                }
                else
                {
                    TxtProxyPort.StringValue = "8080";
                }
            };
            CboProxyAuthentication.Activated += (object sender, EventArgs e) =>
            {
                EnableIde();
            };
            CmdProxyTorTest.Activated += (object sender, EventArgs e) =>
            {
                string result = TorControl.Test(TxtProxyHost.StringValue, Conversions.ToInt32(TxtProxyTorControlPort.StringValue), TxtProxyTorControlPassword.StringValue);
                GuiUtils.MessageBoxInfo(result);
            };

            // Routes
            CboRoutesOtherwise.RemoveAllItems();
            CboRoutesOtherwise.AddItem(RouteDirectionToDescription("in"));
            CboRoutesOtherwise.AddItem(RouteDirectionToDescription("out"));
            CboRoutesOtherwise.Activated += (object sender, EventArgs e) =>
            {
                EnableIde();
            };

            TableRoutes.DoubleClick += (object sender, EventArgs e) =>
            {
                RouteEdit();
            };

            CmdRouteAdd.Activated += (object sender, EventArgs e) =>
            {
                RouteAdd();
            };

            CmdRouteRemove.Activated += (object sender, EventArgs e) =>
            {
                RouteRemove();
            };

            CmdRouteEdit.Activated += (object sender, EventArgs e) =>
            {
                RouteEdit();
            };

            // Advanced - General

            CmdAdvancedHelp.Activated += (object sender, EventArgs e) =>
            {
                Engine.Instance.Command("ui.show.docs.advanced");
            };

            CboIpV6.RemoveAllItems();
            CboIpV6.AddItem("None");
            CboIpV6.AddItem("Disable");

            CboAdvancedManifestRefresh.RemoveAllItems();
            CboAdvancedManifestRefresh.AddItem("Automatic");
            CboAdvancedManifestRefresh.AddItem("Never");
            CboAdvancedManifestRefresh.AddItem("Every minute");
            CboAdvancedManifestRefresh.AddItem("Every ten minute");
            CboAdvancedManifestRefresh.AddItem("Every one hour");

            LblOpenVpnRcvBuf.StringValue = Messages.WindowsSettingsOpenVpnRcvBuf + ":";
            LblOpenVpnSndBuf.StringValue = Messages.WindowsSettingsOpenVpnSndBuf + ":";
            CboOpenVpnRcvBuf.RemoveAllItems();
            CboOpenVpnRcvBuf.AddItem(Messages.Automatic);
            CboOpenVpnRcvBuf.AddItem(Messages.WindowsSettingsOpenVpnDefault);
            CboOpenVpnRcvBuf.AddItem("8 KB");
            CboOpenVpnRcvBuf.AddItem("16 KB");
            CboOpenVpnRcvBuf.AddItem("32 KB");
            CboOpenVpnRcvBuf.AddItem("64 KB");
            CboOpenVpnRcvBuf.AddItem("128 KB");
            CboOpenVpnRcvBuf.AddItem("256 KB");
            CboOpenVpnRcvBuf.AddItem("512 KB");
            CboOpenVpnSndBuf.RemoveAllItems();
            CboOpenVpnSndBuf.AddItem(Messages.Automatic);
            CboOpenVpnSndBuf.AddItem(Messages.WindowsSettingsOpenVpnDefault);
            CboOpenVpnSndBuf.AddItem("8 KB");
            CboOpenVpnSndBuf.AddItem("16 KB");
            CboOpenVpnSndBuf.AddItem("32 KB");
            CboOpenVpnSndBuf.AddItem("64 KB");
            CboOpenVpnSndBuf.AddItem("128 KB");
            CboOpenVpnSndBuf.AddItem("256 KB");
            CboOpenVpnSndBuf.AddItem("512 KB");

            CmdAdvancedOpenVpnPath.Activated += (object sender, EventArgs e) =>
            {
                GuiUtils.SelectFile(this.Window, TxtAdvancedOpenVpnPath);
            };


            // Advanced - DNS
            TableDnsServers.DoubleClick += (object sender, EventArgs e) =>
            {
                DnsServersEdit();
            };

            CmdDnsAdd.Activated += (object sender, EventArgs e) =>
            {
                DnsServersAdd();
            };

            CmdDnsRemove.Activated += (object sender, EventArgs e) =>
            {
                DnsServersRemove();
            };

            CmdDnsEdit.Activated += (object sender, EventArgs e) =>
            {
                DnsServersEdit();
            };

            // Advanced - Net Lock
            CmdLockHelp.Activated += (object sender, EventArgs e) =>
            {
                Engine.Instance.Command("ui.show.docs.lock");
            };
            CboLockMode.RemoveAllItems();
            CboLockMode.AddItem("None");
            CboLockMode.AddItem("Automatic");
            foreach (NetworkLockPlugin lockPlugin in Engine.Instance.NetworkLockManager.Modes)
            {
                CboLockMode.AddItem(lockPlugin.GetName());
            }

            LblRoutesNetworkLockWarning.StringValue = Messages.WindowsSettingsRouteLockHelp;
            LblLockRoutingOutWarning.StringValue    = Messages.NetworkLockNotAvailableWithRouteOut;

            // Advanced - Logging

            TxtLoggingPath.Changed += (object sender, EventArgs e) =>
            {
                RefreshLogPreview();
            };

            CmdLoggingOpen.Activated += (object sender, EventArgs e) =>
            {
                List <string> paths = Engine.Instance.Logs.ParseLogFilePath(TxtLoggingPath.StringValue);
                foreach (string path in paths)
                {
                    if (Core.Platform.Instance.OpenDirectoryInFileManager(path) == false)
                    {
                        GuiUtils.MessageBoxError(MessagesFormatter.Format(Messages.WindowsSettingsLogsCannotOpenDirectory, path));
                    }
                }
            };

            // Directives
            CboOpenVpnDirectivesSkipDefault.RemoveAllItems();
            CboOpenVpnDirectivesSkipDefault.AddItem(Messages.WindowsSettingsOpenVpnDirectivesDefaultSkip1);
            CboOpenVpnDirectivesSkipDefault.AddItem(Messages.WindowsSettingsOpenVpnDirectivesDefaultSkip2);
            CmdOpenVpnDirectivesHelp.Activated += (object sender, EventArgs e) =>
            {
                Engine.Instance.Command("ui.show.docs.directives");
            };
            CmdOpenVpnDirectivesCustomPathBrowse.Activated += (object sender, EventArgs e) =>
            {
                GuiUtils.SelectFile(this.Window, TxtOpenVpnDirectivesCustomPath);
            };

            // Advanced - Events

            TableAdvancedEvents.DoubleClick += (object sender, EventArgs e) =>
            {
                AdvancedEventEdit();
            };

            CmdAdvancedEventsEdit.Activated += (object sender, EventArgs e) =>
            {
                AdvancedEventEdit();
            };

            CmdAdvancedEventsClear.Activated += (object sender, EventArgs e) =>
            {
                AdvancedEventClear();
            };

            ReadOptions();

            EnableIde();

            RefreshLogPreview();
        }
Example #12
0
 public Cmd(TorControl.Commands t, int l)
 {
     type = t; body = new byte[l];
 }
Example #13
0
 public Cmd(TorControl.Commands t, byte[] b)
 {
     type = t; body = b;
 }
Example #14
0
        public static Json Command(Json data)
        {
            string cmd = data["command"].Value as string;

            if (cmd == "ui.manifest")
            {
                Manifest = data;
            }
            else if (cmd == "ui.stats.pathprofile")
            {
                Platform.Instance.OpenDirectoryInFileManager(Engine.Instance.Stats.Get("PathProfile").Value);
            }
            else if (cmd == "ui.stats.pathdata")
            {
                Platform.Instance.OpenDirectoryInFileManager(Engine.Instance.Stats.Get("PathData").Value);
            }
            else if (cmd == "ui.stats.pathapp")
            {
                Platform.Instance.OpenDirectoryInFileManager(Engine.Instance.Stats.Get("PathApp").Value);
            }
            else if (cmd == "man")
            {
                string format = "text";
                if (data.HasKey("format"))
                {
                    format = data["format"].Value as string;
                }
                string body = Engine.Instance.Storage.GetMan(format);
                Engine.Instance.OnShowText("man", body);
            }
            else if (cmd == "ui.show.manifest")
            {
                Engine.Instance.OnShowText("ui.show.manifest", Manifest.ToJsonPretty());
            }
            else if (cmd == "ui.show.os.info")
            {
                Engine.Instance.OnShowText("ui.show.os.info", Engine.Instance.GenerateOsInfo().ToJsonPretty());
            }
            else if (cmd == "tor.guard")
            {
                Engine.Instance.Logs.LogVerbose("Tor Guard IPs:" + TorControl.GetGuardIps(true).ToString());
            }
            else if (cmd == "tor.NEWNYM")
            {
                TorControl.SendNEWNYM();
            }
            else if (cmd == "ip.exit")
            {
                Engine.Instance.Logs.LogVerbose(Engine.Instance.DiscoverExit().ToString());
            }
            else if (cmd == "test.cli-su")
            {
                Engine.Instance.Logs.LogVerbose(TestRunCliAsRoot());
            }
            else if (cmd == "test.log.info")
            {
                Engine.Instance.Logs.Log(LogType.InfoImportant, "Test log\nInfo");
            }
            else if (cmd == "test.log.infoimportant")
            {
                Engine.Instance.Logs.Log(LogType.InfoImportant, "Test log\nInfo Important");
            }
            else if (cmd == "test.log.warning")
            {
                Engine.Instance.Logs.Log(LogType.Warning, "Test log\nWarning");
            }
            else if (cmd == "test.log.error")
            {
                Engine.Instance.Logs.Log(LogType.Error, "Test log\nError");
            }
            else if (cmd == "test.log.fatal")
            {
                Engine.Instance.Logs.Log(LogType.Fatal, "Test log\nFatal");
            }

            return(null);
        }
Example #15
0
        private void cmdProxyTorTest_Click(object sender, EventArgs e)
        {
            string t = TorControl.Test(txtProxyHost.Text, Conversions.ToInt32(txtProxyTorControlPort.Text), txtProxyTorControlPassword.Text);

            Engine.Instance.OnMessageInfo(t);
        }