Esempio n. 1
0
        internal OpenVpnProcess(
            ILogger logger,
            IOsProcesses processes,
            OpenVpnExitEvent processExitEvent,
            OpenVpnConfig config)
        {
            _logger           = logger;
            _processes        = processes;
            _processExitEvent = processExitEvent;
            _config           = config;

            _process = _nullProcess = new NullOsProcess();
        }
Esempio n. 2
0
        public Task <bool> Start(OpenVpnProcessParams processParams)
        {
            _startCompletionSource?.TrySetCanceled();
            _startCompletionSource = new TaskCompletionSource <bool>();

            string arguments = GetCommandLineArguments(processParams);

            _process = _processes.Process(_config.ExePath, arguments);
            AddEventHandlers();
            _process.Start();

            _logger.Info("OpenVPN <- Management channel password");
            _process.StandardInput.WriteLine(processParams.Password);

            return(_startCompletionSource.Task);
        }
Esempio n. 3
0
        public Task <bool> Start(OpenVpnProcessParams processParams)
        {
            var localIp = new BestLocalEndpoint(processParams.Endpoint).Ip();

            var arguments = new CommandLineArguments()
                            .Add(new BasicArguments(_config))
                            .Add(new ManagementArguments(_config, processParams.ManagementPort))
                            .Add(new EndpointArguments(processParams.Endpoint))
                            .Add(new BindArguments(localIp))
                            .Add(new CustomDnsArguments(processParams.CustomDns))
                            .Add(new TlsVerifyArguments(_config, processParams.Endpoint.Server.Name));

            if (processParams.SplitTunnelMode == SplitTunnelMode.Permit)
            {
                arguments.Add(new LowDefaultRouteArgument());
            }

            if (processParams.SplitTunnelMode != SplitTunnelMode.Disabled &&
                processParams.SplitTunnelIPs.Count > 0)
            {
                arguments.Add(new SplitTunnelRoutesArgument(
                                  processParams.SplitTunnelIPs,
                                  processParams.SplitTunnelMode));
            }

            _startCompletionSource?.TrySetCanceled();
            _startCompletionSource = new TaskCompletionSource <bool>();

            _process = _processes.Process(_config.ExePath, arguments);
            AddEventHandlers();
            _process.Start();

            _logger.Info("OpenVPN <- Management channel password");
            _process.StandardInput.WriteLine(processParams.Password);

            return(_startCompletionSource.Task);
        }
Esempio n. 4
0
 private void Cleanup()
 {
     _process?.Dispose();
     _process = _nullProcess;
 }
Esempio n. 5
0
        public void Enable()
        {
            IOsProcess process = _osProcesses.ElevatedCommandLineProcess($"/c sc config \"{Name}\" start= demand");

            process.Start();
        }