Beispiel #1
0
        private void WaitForVpnThreadToFinish()
        {
            if (vpnThread == null)
            {
                return;
            }

            try
            {
                vpnThread.Join(THREAD_MAX_JOIN_TIME);
            }
            catch (Java.Lang.InterruptedException)
            {
                EddieLogger.Error("VPNService.WaitVpnThreadToFinish(): VPN thread has been interrupted");
            }
            finally
            {
                if (vpnThread.IsAlive)
                {
                    EddieLogger.Error("VPNService.WaitVpnThreadToFinish(): VPN thread did not end");
                }
                else
                {
                    EddieLogger.Info("VPN thread execution has completed");
                }
            }
        }
Beispiel #2
0
        public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
        {
            StartCommandResult result = StartCommandResult.Sticky;

            bool?run = null;

            if (intent != null)
            {
                if (intent.GetBooleanExtra(PARAM_START, false))
                {
                    EddieLogger.Debug("VPNService.OnStartCommand: START");

                    run = true;
                }
                else if (intent.GetBooleanExtra(PARAM_STOP, false))
                {
                    EddieLogger.Debug("VPNService.OnStartCommand: STOP");

                    run = false;
                }
            }
            else
            {
                EddieLogger.Debug("VPNService.OnStartCommand (no intent)");
            }

            if (run != null)
            {
                UpdateService(run.Value, intent.GetBundleExtra(EXTRA_RUN_ARGS));
            }

            return(result);
        }
Beispiel #3
0
        private void DoRun()
        {
            OpenVPNClient client = null;

            lock (clientSync)
            {
                if (openVPNClient == null)
                {
                    string errMsg = "OpenVPNTunnel::DoRun(): OpenVPN client is not initialized";

                    EddieLogger.Error(errMsg);

                    throw new Exception(errMsg);
                }

                client = openVPNClient;

                // Do NOT call m_client.Start under m_clientSync'lock
            }

            // Dispatcher must be instantiated before starting to allow handling stop requests from outside while the client isn't started yet

            // RunDispatcher();

            NativeMethods.EddieLibraryResult result = client.Start();

            if (result.code != NativeMethods.ResultCode.SUCCESS)
            {
                string errMsg = string.Format("OpenVPNTunnel::DoRun(): Failed to start OpenVPN client. {0}", result.description);

                EddieLogger.Error(errMsg);

                throw new Exception(errMsg);
            }
        }
        private void LoadApplications(string appList)
        {
            List <string> selectedPackages = new List <string>();

            string[] valArray = appList.Split(SettingsManager.DEFAULT_SPLIT_SEPARATOR);

            foreach (string item in valArray)
            {
                selectedPackages.Add(item);
            }

            applicationList.Clear();

            IList <ApplicationInfo> applications = base.PackageManager.GetInstalledApplications(global::Android.Content.PM.PackageInfoFlags.MetaData);

            foreach (ApplicationInfo app in applications)
            {
                ApplicationItem item = new ApplicationItem(this, app);

                item.Selected = selectedPackages.Contains(app.PackageName);

                try
                {
                    item.Icon = app.LoadIcon(PackageManager);
                }
                catch (System.Exception e)
                {
                    EddieLogger.Error(e);
                }

                applicationList.Add(item);
            }

            applicationList.Sort((a, b) => a.Title.CompareTo(b.Title));
        }
Beispiel #5
0
        public NativeMethods.ovpn3_transport_stats GetTransportStats()
        {
            lock (clientSync)
            {
                if (openVPNClient == null)
                {
                    string errMsg = "OpenVPNTunnel::GetTransportStats(): OpenVPN client is not initialized";

                    EddieLogger.Error(errMsg);

                    throw new Exception(errMsg);
                }

                NativeMethods.ovpn3_transport_stats stats = new NativeMethods.ovpn3_transport_stats();

                NativeMethods.EddieLibraryResult result = openVPNClient.GetTransportStats(ref stats);

                if (result.code != NativeMethods.ResultCode.SUCCESS)
                {
                    string errMsg = string.Format("OpenVPNTunnel::GetTransportStats(): Failed to get OpenVPN transport stats. {0}", result.description);

                    EddieLogger.Error(errMsg);

                    throw new Exception(errMsg);
                }

                return(stats);
            }
        }
        public override void OnCreate()
        {
            base.OnCreate();

            if (!m_initialized)
            {
                EddieLogger.Init(this);

                EddieLogger.Info("Initializing eddie library");
                EddieLogger.Info("{0} - {1}", NativeMethods.EddieLibrary.LibraryQualifiedName(), NativeMethods.EddieLibrary.LibraryReleaseDate());
                EddieLogger.Info("Eddie Library API level {0}", NativeMethods.EddieLibrary.LibraryApiLevel());

                NativeMethods.EddieLibraryResult result = NativeMethods.EddieLibrary.Init();

                if (result.code == NativeMethods.ResultCode.SUCCESS)
                {
                    m_initialized = true;

                    EddieLogger.Info("Eddie Library: OpenVPN initialization succeeded");
                }
                else
                {
                    EddieLogger.Error("Eddie Library: OpenVPN initialization failed. {0}", result.description);
                }
            }
        }
Beispiel #7
0
        public VPNManager(Context context)
        {
            m_context = context;

            EddieLogger.Init(context);

            supportTools = new SupportTools(m_context);
        }
Beispiel #8
0
        public void HandleThreadException(Exception e)
        {
            EddieLogger.Error(e);

            LastError = e.Message;

            DoStop();
        }
Beispiel #9
0
        public override void OnRevoke()
        {
            EddieLogger.Error("VPNService.OnRevoke");

            // Another VPN may have started here or Android is shutting down the VPN: by now there is no way to "block" the operation and the service must be stopped gracefully

            UpdateService(false);

            base.OnRevoke();
        }
Beispiel #10
0
 public void SetMTU(int mtu)
 {
     if (forceMTU)
     {
         EddieLogger.Debug("MTU forced (value '{0}' will be skipped)", mtu);
     }
     else
     {
         vpnServiceBuilder.SetMtu(mtu);
     }
 }
Beispiel #11
0
 public void AddDNSServer(string address, int ipv6)
 {
     if (customDNS)
     {
         EddieLogger.Debug("DNS forced (address '{0}' will be skipped)", address);
     }
     else
     {
         DoAddDNS(address);
     }
 }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            EddieLogger.Init(this);

            title = Intent.GetStringExtra(CHOOSER_TITLE);

            LoadApplications(Intent.GetStringExtra(PARAM_PACKAGES));

            InitUI();
        }
Beispiel #13
0
        public override void OnCreate()
        {
            base.OnCreate();

            EddieLogger.Init(this);

            Init();

            networkStatusReceiver = new NetworkStatusReceiver();
            networkStatusReceiver.AddListener(this);
            this.RegisterReceiver(networkStatusReceiver, new IntentFilter(Android.Net.ConnectivityManager.ConnectivityAction));
        }
Beispiel #14
0
        private void OnConnectSessionStop()
        {
            EddieLogger.Debug("OnConnectSessionStop");

            try
            {
                OnConnectSessionStopImpl();
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnConnectSessionStop", e);
            }
        }
Beispiel #15
0
        private void DoSetOption(string option, string value)
        {
            NativeMethods.EddieLibraryResult result = openVPNClient.SetOption(option, value);

            if (result.code != NativeMethods.ResultCode.SUCCESS)
            {
                string errMsg = String.Format("OpenVPNTunnel::DoSetOption(): Failed to set option '{0}' with value '{1}'. {2}", option, value, result.description);

                EddieLogger.Error(errMsg);

                throw new Exception(errMsg);
            }
        }
Beispiel #16
0
        private void OnConnectAttach()
        {
            EddieLogger.Debug("OnConnectAttach");

            try
            {
                OnConnectAttachImpl();
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnConnectAttach", e);
            }
        }
Beispiel #17
0
        private void OnTunBuilderTeardown(/*bool*/ int disconnect)
        {
            EddieLogger.Debug("OnTunBuilderTeardown(disconnect={0})", disconnect);

            try
            {
                OnTunBuilderTeardownImpl(disconnect);
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnTunBuilderTeardown", e);
            }
        }
Beispiel #18
0
        private void OnTunBuilderEstablishLite()
        {
            EddieLogger.Debug("OnTunBuilderEstablishLite");

            try
            {
                OnTunBuilderEstablishLiteImpl();
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnTunBuilderEstablishLite", e);
            }
        }
Beispiel #19
0
        private void OnConnectRun()
        {
            EddieLogger.Debug("OnConnectRun");

            try
            {
                OnConnectRunImpl();
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnConnectRun", e);
            }
        }
Beispiel #20
0
        public void Stop()
        {
            try
            {
                SendStopMessage();
            }
            catch (Exception e)
            {
                EddieLogger.Error(e);

                OnStatusChanged(null, null, e.Message);
            }
        }
        private void TryRestoreLastProfile(Context context)
        {
            EddieLogger.Debug("EddieBroadcastReceiver.TryRestoreLastProfile");

            if (VPNService.Prepare(context.ApplicationContext) != null)
            {
                EddieLogger.Debug("VPNService.Prepare requires confirmation");

                return;
            }

            if (!settingsManager.SystemRestoreLastProfile)
            {
                EddieLogger.Debug("EddieBroadcastReceiver: SystemRestoreLastProfile disabled");

                return;
            }

            if (!settingsManager.SystemLastProfileIsConnected)
            {
                EddieLogger.Debug("EddieBroadcastReceiver: SystemLastProfileIsConnected false");

                return;
            }

            string lastProfile = settingsManager.SystemLastProfile;

            if (SupportTools.Empty(lastProfile))
            {
                EddieLogger.Debug("EddieBroadcastReceiver: lastProfile is empty");
                return;
            }

            EddieLogger.Debug("EddieBroadcastReceiver: restoring last profile");

            try
            {
                Bundle args = new Bundle();
                args.PutString(VPNService.PARAM_PROFILE, lastProfile);

                Intent intent = new Intent(context, typeof(VPNService));
                intent.PutExtra(VPNService.PARAM_START, true);
                intent.PutExtra(VPNService.EXTRA_RUN_ARGS, args);

                context.StartService(intent);
            }
            catch (Exception e)
            {
                EddieLogger.Error("TryRestoreLastProfile", e);
            }
        }
Beispiel #22
0
        public VPNContext(VPNService service)
        {
            vpnServiceBuilder = new VPNService.Builder(service);

            vpnServiceBuilder.SetConfigureIntent(service.CreateConfigIntent());

            EddieLogger.Init(service);

            InitDNS();

            InitMTU();

            InitApplications();
        }
Beispiel #23
0
        private void ClearContexts()
        {
            EddieLogger.Debug("ClearContexts");

            lock (contextsSync)
            {
                while (m_contexts.Count > 0)
                {
                    EddieLogger.Debug("Disposing context");

                    SupportTools.SafeDispose(m_contexts.Pop());
                }
            }
        }
Beispiel #24
0
        private void DoAddDNS(string address)
        {
            address = address.Trim();

            if (SupportTools.Empty(address))
            {
                throw new Exception("Invalid DNS server");
            }

            EddieLogger.Debug("Adding DNS server '{0}'", address);

            vpnServiceBuilder.AddDnsServer(address);
            hasDNS = true;
        }
Beispiel #25
0
        private int OnTunBuilderSetProxyAutoConfigUrl(string url)
        {
            EddieLogger.Debug("OnTunBuilderSetProxyAutoConfigUrl(url={0})", url);

            try
            {
                return(OnTunBuilderSetProxyAutoConfigUrlImpl(url));
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnTunBuilderSetProxyAutoConfigUrl", e);
            }

            return(NativeMethods.ERROR);
        }
Beispiel #26
0
        private int OnTunBuilderSetProxyHttps(string host, int port)
        {
            EddieLogger.Debug("OnTunBuilderSetProxyHttps(host={0}, port={1})", host, port);

            try
            {
                return(OnTunBuilderSetProxyHttpsImpl(host, port));
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnTunBuilderSetProxyHttps", e);
            }

            return(NativeMethods.ERROR);
        }
Beispiel #27
0
        private int OnTunBuilderAddWinsServer(string address)
        {
            EddieLogger.Debug("OnTunBuilderAddWinsServer(address={0})", address);

            try
            {
                return(OnTunBuilderAddWinsServerImpl(address));
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnTunBuilderAddWinsServer", e);
            }

            return(NativeMethods.ERROR);
        }
Beispiel #28
0
        private int OnTunBuilderSetAdapterDomainSuffix(string name)
        {
            EddieLogger.Debug("OnTunBuilderSetAdapterDomainSuffix(name={0})", name);

            try
            {
                return(OnTunBuilderSetAdapterDomainSuffixImpl(name));
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnTunBuilderSetAdapterDomainSuffix", e);
            }

            return(NativeMethods.ERROR);
        }
Beispiel #29
0
        private int OnTunBuilderEstablish()
        {
            EddieLogger.Debug("OnTunBuilderEstablish");

            try
            {
                return(OnTunBuilderEstablishImpl());
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnTunBuilderEstablish", e);
            }

            return(NativeMethods.ERROR);
        }
Beispiel #30
0
        private int OnTunBuilderPersist()
        {
            EddieLogger.Debug("OnTunBuilderPersist");

            try
            {
                return(OnTunBuilderPersistImpl());
            }
            catch (Exception e)
            {
                EddieLogger.Error("OnTunBuilderPersist", e);
            }

            return(NativeMethods.ERROR);
        }