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); } }
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); } }