Exemple #1
0
        /*
         * private void OnStop()
         * {
         *      try
         *      {
         *              SendStopMessage();
         *              OnStatusChanged(Status.Stopped);
         *      }
         *      catch(Exception e)
         *      {
         *              OnStatusChanged(Status.Stopped, e.Message);
         *      }
         * }
         */

        private void OnStatusChanged(bool?ready, VPN.Status?status = null, string error = "")
        {
            lock (m_dataSync)
            {
                if (ready != null)
                {
                    m_ready = ready.Value;
                }
                else
                {
                    ready = m_ready;
                }

                if (status != null)
                {
                    m_status = status.Value;
                }
                else
                {
                    status = m_status;
                }

                m_lastError = error;
            }

            if (StatusChanged != null)
            {
                StatusChanged(ready.Value, status.Value, error);
            }
        }
Exemple #2
0
        private void UpdateNotification(VPN.Status status)
        {
            string text, server = "";

            if (status != VPN.Status.CONNECTED && status != VPN.Status.PAUSED && status != VPN.Status.LOCKED)
            {
                return;
            }

            Dictionary <string, string> pData = settingsManager.SystemLastProfileInfo;

            if (pData.Count > 0 && pData.ContainsKey("server"))
            {
                server = pData["server"];
            }

            text = String.Format(vpnService.Resources.GetString(Resource.String.notification_text), server);

            if (!NetworkStatusReceiver.GetNetworkDescription().Equals(""))
            {
                text += " " + String.Format(vpnService.Resources.GetString(Resource.String.notification_network), NetworkStatusReceiver.GetNetworkDescription());
            }

            if (status == VPN.Status.PAUSED)
            {
                text += " (" + vpnService.Resources.GetString(Resource.String.vpn_status_paused) + ")";
            }

            if (status == VPN.Status.LOCKED)
            {
                text += " (" + vpnService.Resources.GetString(Resource.String.vpn_status_locked) + ")";
            }

            vpnService.UpdateNotification(text);
        }
Exemple #3
0
        private Message CreateStatusMessage(VPN.Status status, string lastError)
        {
            Message message = Message.Obtain(null, VPNService.MSG_STATUS, (int)status, 0);

            message.Data.PutString(MSG_STATUS_BUNDLE_LAST_ERROR, lastError);

            return(message);
        }
Exemple #4
0
        private void UpdateConnectionStatus(bool ready, VPN.Status status, string error)
        {
            if (ready)
            {
                txtConnectionStatus.Text = Resources.GetString(VPN.DescriptionResource(status));
            }
            else
            {
                txtConnectionStatus.Text = Resources.GetString(Resource.String.conn_status_initialize);
            }

            btnConnectProfile.Enabled = ready && (status == VPN.Status.NotConnected);

            btnDisconnectProfile.Enabled = (status == VPN.Status.Connecting) || (status == VPN.Status.Connected);

            if (currentConnectionStatus != status)
            {
                currentConnectionStatus = status;

                switch (status)
                {
                case VPN.Status.Connected:
                {
                    supportTools.InfoDialog(string.Format(Resources.GetString(Resource.String.connection_success), profileInfo["server"]));

                    settingsManager.SystemLastProfileIsConnected = true;
                }
                break;

                case VPN.Status.NotConnected:
                {
                    supportTools.InfoDialog(string.Format(Resources.GetString(Resource.String.connection_disconnected), profileInfo["server"]));

                    settingsManager.SystemLastProfileIsConnected = false;
                }
                break;

                default:
                {
                    settingsManager.SystemLastProfileIsConnected = false;
                }
                break;
                }
            }

            ShowErrorMessage(error);
        }
Exemple #5
0
        private void DoChangeStatus(VPN.Status status)
        {
            string lastError = "";

            lock (m_dataSync)
            {
                if (m_status == status)
                {
                    return;
                }

                m_status  = status;
                lastError = m_lastError;
            }

            DispatchMessage(CreateStatusMessage(status, lastError));
        }
Exemple #6
0
        public void DoChangeStatus(VPN.Status status)
        {
            string lastError = "";

            lock (dataSync)
            {
                if (vpnStatus == status)
                {
                    return;
                }

                vpnStatus = status;

                if (vpnLastError.Equals(""))
                {
                    lastError = vpnLastError;
                }
            }

            if (clientMessenger != null)
            {
                SendMessage(clientMessenger, CreateStatusMessage(status, lastError));
            }
        }
Exemple #7
0
        private void UpdateConnectionStatus(bool ready, VPN.Status status, string error)
        {
            if (ready)
            {
                txtVpnStatus.Text = Resources.GetString(VPN.DescriptionResource(status));
            }
            else
            {
                txtVpnStatus.Text = Resources.GetString(Resource.String.conn_status_initialize);
            }

            btnConnectProfile.Enabled = ready && (status == VPN.Status.NOT_CONNECTED) && NetworkStatusReceiver.IsNetworkConnected();

            btnDisconnectProfile.Enabled = (status == VPN.Status.CONNECTING) || (status == VPN.Status.CONNECTED) || (status == VPN.Status.PAUSED) || (status == VPN.Status.LOCKED);

            if (currentConnectionStatus != status)
            {
                currentConnectionStatus = status;

                switch (status)
                {
                case VPN.Status.CONNECTED:
                {
                    if (profileInfo.ContainsKey("server") == true)
                    {
                        supportTools.InfoDialog(string.Format(Resources.GetString(Resource.String.connection_success), profileInfo["server"], NetworkStatusReceiver.GetNetworkDescription()));
                    }

                    settingsManager.SystemLastProfileIsConnected = true;
                }
                break;

                case VPN.Status.NOT_CONNECTED:
                {
                    if (profileInfo.ContainsKey("server") == true)
                    {
                        supportTools.InfoDialog(string.Format(Resources.GetString(Resource.String.connection_disconnected), profileInfo["server"]));
                    }

                    settingsManager.SystemLastProfileIsConnected = false;
                }
                break;

                case VPN.Status.PAUSED:
                {
                    supportTools.InfoDialog(Resources.GetString(Resource.String.connection_paused));

                    settingsManager.SystemLastProfileIsConnected = true;
                }
                break;

                default:
                {
                    settingsManager.SystemLastProfileIsConnected = false;
                }
                break;
                }
            }

            ShowErrorMessage(error);
        }
Exemple #8
0
 private void OnServiceStatusChanged(bool ready, VPN.Status status, string error)
 {
     UpdateConnectionStatus(ready, status, error);
 }
Exemple #9
0
        public VPN.Status NetworkStatusChanged(VPNAction action)
        {
            if (vpnClientStatus == VPN.Status.LOCKED)
            {
                return(vpnClientStatus);
            }

            lock (clientSync)
            {
                if (openVPNClient == null)
                {
                    return(vpnClientStatus);
                }

                switch (action)
                {
                case VPNAction.RESUME:
                {
                    if (vpnClientStatus == VPN.Status.PAUSED)
                    {
                        EddieLogger.Info("Network is now connected, trying to resume VPN");

                        NativeMethods.EddieLibraryResult result = openVPNClient.Resume();

                        if (result.code == NativeMethods.ResultCode.SUCCESS)
                        {
                            EddieLogger.Info("Successfully resumed VPN");

                            vpnClientStatus = VPN.Status.CONNECTED;
                        }
                        else
                        {
                            EddieLogger.Error(string.Format("Failed to resume VPN. {0}", result.description));

                            vpnClientStatus = VPN.Status.UNKNOWN;
                        }
                    }
                }
                break;

                case VPNAction.PAUSE:
                case VPNAction.NETWORK_TYPE_CHANGED:
                {
                    EddieLogger.Info("Network status has changed, trying to pause VPN");

                    NativeMethods.EddieLibraryResult result = openVPNClient.Pause("Network status changed");

                    if (result.code == NativeMethods.ResultCode.SUCCESS)
                    {
                        EddieLogger.Info("Successfully paused VPN");

                        vpnClientStatus = VPN.Status.PAUSED;
                    }
                    else
                    {
                        EddieLogger.Error(string.Format("Failed to pause VPN. {0}", result.description));

                        vpnClientStatus = VPN.Status.NOT_CONNECTED;
                    }
                }
                break;

                case VPNAction.LOCK:
                {
                    EddieLogger.Info("VPN error detected. Locking VPN");

                    NativeMethods.EddieLibraryResult result = openVPNClient.Pause("Lock VPN");

                    if (result.code == NativeMethods.ResultCode.SUCCESS)
                    {
                        EddieLogger.Info("Successfully locked VPN");

                        vpnClientStatus = VPN.Status.LOCKED;
                    }
                    else
                    {
                        EddieLogger.Error(string.Format("Failed to lock VPN. {0}", result.description));

                        vpnClientStatus = VPN.Status.NOT_CONNECTED;
                    }
                }
                break;
                }
            }

            UpdateNotification(vpnClientStatus);

            return(vpnClientStatus);
        }
Exemple #10
0
        public VPN.Status HandleScreenChanged(bool active)
        {
            if (vpnClientStatus == VPN.Status.LOCKED)
            {
                return(vpnClientStatus);
            }

            lock (clientSync)
            {
                if (openVPNClient == null)
                {
                    return(vpnClientStatus);
                }

                if (active)
                {
                    if (vpnClientStatus == VPN.Status.PAUSED)
                    {
                        EddieLogger.Info("Screen is now on, trying to resume VPN");

                        NativeMethods.EddieLibraryResult result = openVPNClient.Resume();

                        if (result.code == NativeMethods.ResultCode.SUCCESS)
                        {
                            EddieLogger.Info("Successfully resumed VPN");

                            vpnClientStatus = VPN.Status.CONNECTED;
                        }
                        else
                        {
                            EddieLogger.Error(string.Format("Failed to resume VPN. {0}", result.description));

                            vpnClientStatus = VPN.Status.UNKNOWN;
                        }
                    }
                }
                else
                {
                    if (settingsManager.SystemPauseVpnWhenScreenIsOff)
                    {
                        EddieLogger.Info("Screen is now off, trying to pause VPN");

                        NativeMethods.EddieLibraryResult result = openVPNClient.Pause("Screen is off");

                        if (result.code == NativeMethods.ResultCode.SUCCESS)
                        {
                            EddieLogger.Info("Successfully paused VPN");

                            vpnClientStatus = VPN.Status.PAUSED;
                        }
                        else
                        {
                            EddieLogger.Error(string.Format("Failed to pause VPN. {0}", result.description));

                            vpnClientStatus = VPN.Status.NOT_CONNECTED;
                        }
                    }
                }
            }

            UpdateNotification(vpnClientStatus);

            return(vpnClientStatus);
        }