Add service bind timeout
This commit is contained in:
parent
d2207a5255
commit
508f1d3a42
4 changed files with 21 additions and 4 deletions
|
@ -91,7 +91,7 @@ void AmneziaApplication::init()
|
||||||
initControllers();
|
initControllers();
|
||||||
|
|
||||||
#ifdef Q_OS_ANDROID
|
#ifdef Q_OS_ANDROID
|
||||||
connect(AndroidController::instance(), &AndroidController::serviceIsAlive, this,
|
connect(AndroidController::instance(), &AndroidController::initConnectionState, this,
|
||||||
[this](Vpn::ConnectionState state) {
|
[this](Vpn::ConnectionState state) {
|
||||||
m_connectionController->onConnectionStateChanged(state);
|
m_connectionController->onConnectionStateChanged(state);
|
||||||
if (m_vpnConnection)
|
if (m_vpnConnection)
|
||||||
|
|
|
@ -23,7 +23,9 @@ import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import org.amnezia.vpn.protocol.ProtocolState
|
||||||
import org.amnezia.vpn.protocol.getStatistics
|
import org.amnezia.vpn.protocol.getStatistics
|
||||||
import org.amnezia.vpn.protocol.getStatus
|
import org.amnezia.vpn.protocol.getStatus
|
||||||
import org.amnezia.vpn.qt.QtAndroidController
|
import org.amnezia.vpn.qt.QtAndroidController
|
||||||
|
@ -34,6 +36,7 @@ private const val TAG = "AmneziaActivity"
|
||||||
|
|
||||||
private const val CHECK_VPN_PERMISSION_ACTION_CODE = 1
|
private const val CHECK_VPN_PERMISSION_ACTION_CODE = 1
|
||||||
private const val CREATE_FILE_ACTION_CODE = 2
|
private const val CREATE_FILE_ACTION_CODE = 2
|
||||||
|
private const val BIND_SERVICE_TIMEOUT = 1000L
|
||||||
|
|
||||||
class AmneziaActivity : QtActivity() {
|
class AmneziaActivity : QtActivity() {
|
||||||
|
|
||||||
|
@ -205,6 +208,7 @@ class AmneziaActivity : QtActivity() {
|
||||||
bindService(it, serviceConnection, BIND_ABOVE_CLIENT)
|
bindService(it, serviceConnection, BIND_ABOVE_CLIENT)
|
||||||
}
|
}
|
||||||
isInBoundState = true
|
isInBoundState = true
|
||||||
|
handleBindTimeout()
|
||||||
}
|
}
|
||||||
|
|
||||||
@MainThread
|
@MainThread
|
||||||
|
@ -220,6 +224,19 @@ class AmneziaActivity : QtActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleBindTimeout() {
|
||||||
|
mainScope.launch {
|
||||||
|
if (isWaitingStatus) {
|
||||||
|
delay(BIND_SERVICE_TIMEOUT)
|
||||||
|
if (isWaitingStatus && !isServiceConnected) {
|
||||||
|
Log.d(TAG, "Bind timeout, reset connection status")
|
||||||
|
isWaitingStatus = false
|
||||||
|
QtAndroidController.onStatus(ProtocolState.DISCONNECTED.ordinal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Methods of starting and stopping VpnService
|
* Methods of starting and stopping VpnService
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -18,9 +18,9 @@ AndroidController::AndroidController() : QObject()
|
||||||
[this](AndroidController::ConnectionState state) {
|
[this](AndroidController::ConnectionState state) {
|
||||||
qDebug() << "Android event: status; state:" << textConnectionState(state);
|
qDebug() << "Android event: status; state:" << textConnectionState(state);
|
||||||
if (isWaitingStatus) {
|
if (isWaitingStatus) {
|
||||||
qDebug() << "Android VPN service is alive, initialization by service status";
|
qDebug() << "Initialization by service status";
|
||||||
isWaitingStatus = false;
|
isWaitingStatus = false;
|
||||||
emit serviceIsAlive(convertState(state));
|
emit initConnectionState(convertState(state));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
|
|
|
@ -43,7 +43,7 @@ signals:
|
||||||
void statisticsUpdated(quint64 rxBytes, quint64 txBytes);
|
void statisticsUpdated(quint64 rxBytes, quint64 txBytes);
|
||||||
void configImported();
|
void configImported();
|
||||||
void importConfigFromOutside(QString &data);
|
void importConfigFromOutside(QString &data);
|
||||||
void serviceIsAlive(Vpn::ConnectionState state);
|
void initConnectionState(Vpn::ConnectionState state);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool isWaitingStatus = true;
|
bool isWaitingStatus = true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue