private void connectComplete(IAsyncResult result)
        {
            StateSnapshot ss;

            UtilsHelper.Function <bool> callback;
            bool abort;
            int  connectionState;

            try
            {
                Monitor.Enter(lockvar);
                ss              = State.CreateSnapshot();
                callback        = (UtilsHelper.Function <bool>)result.AsyncState;
                abort           = m_abort;
                connectionState = m_connectState;

                if (callback.EndInvoke(result))
                {
                    m_connectState = 3;
                }
            }
            finally
            {
                Monitor.Exit(lockvar);
            }


            if (abort && ss.ConnectionState == VPNConnectionState.Stopping)
            {
                m_abort = false;
                Logs.logDebugLine(2, "Connection is marked as aborded");
                switch (connectionState)
                {
                case 1:     // service not startet
                    Logs.logDebugLine(2, "No action required");
                    break;

                case 2:     // service startet, not connected via tcp
                    Logs.logDebugLine(2, "Killing serivce");
                    m_ovpnService.kill();
                    break;

                case 3:     // service startet and connected via tcp
                    Logs.logDebugLine(2, "Calling disconnect");
                    Disconnect();
                    break;

                default:
                    Logs.logDebugLine(1, "Connection state is invalid (" +
                                      connectionState + "). Ignoring disconnect event.");
                    break;
                }
                State.ChangeState(VPNConnectionState.Stopped);
            }
        }
Exemplo n.º 2
0
        private void connectComplete(IAsyncResult result)
        {
            StateSnapshot ss;

            UtilsHelper.Function <bool> callback;
            bool abort;
            int  connectionState;

            try
            {
                Monitor.Enter(lockvar);
                ss              = State.CreateSnapshot();
                callback        = (UtilsHelper.Function <bool>)result.AsyncState;
                abort           = m_abort;
                connectionState = m_connectState;

                if (callback.EndInvoke(result))
                {
                    m_connectState = 3;
                }
            }
            finally
            {
                Monitor.Exit(lockvar);
            }


            if (abort && ss.ConnectionState == VPNConnectionState.Stopping)
            {
                m_abort = false;

                switch (connectionState)
                {
                case 1:     // service not startet

                    break;

                case 2:     // service startet, not connected via tcp

                    m_ovpnService.kill();
                    break;

                case 3:     // service startet and connected via tcp

                    Disconnect();
                    break;

                default:

                    break;
                }
                State.ChangeState(VPNConnectionState.Stopped);
            }
        }