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();
|
||||
|
||||
#ifdef Q_OS_ANDROID
|
||||
connect(AndroidController::instance(), &AndroidController::serviceIsAlive, this,
|
||||
connect(AndroidController::instance(), &AndroidController::initConnectionState, this,
|
||||
[this](Vpn::ConnectionState state) {
|
||||
m_connectionController->onConnectionStateChanged(state);
|
||||
if (m_vpnConnection)
|
||||
|
|
|
@ -23,7 +23,9 @@ import kotlinx.coroutines.CoroutineScope
|
|||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import org.amnezia.vpn.protocol.ProtocolState
|
||||
import org.amnezia.vpn.protocol.getStatistics
|
||||
import org.amnezia.vpn.protocol.getStatus
|
||||
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 CREATE_FILE_ACTION_CODE = 2
|
||||
private const val BIND_SERVICE_TIMEOUT = 1000L
|
||||
|
||||
class AmneziaActivity : QtActivity() {
|
||||
|
||||
|
@ -205,6 +208,7 @@ class AmneziaActivity : QtActivity() {
|
|||
bindService(it, serviceConnection, BIND_ABOVE_CLIENT)
|
||||
}
|
||||
isInBoundState = true
|
||||
handleBindTimeout()
|
||||
}
|
||||
|
||||
@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
|
||||
*/
|
||||
|
|
|
@ -18,9 +18,9 @@ AndroidController::AndroidController() : QObject()
|
|||
[this](AndroidController::ConnectionState state) {
|
||||
qDebug() << "Android event: status; state:" << textConnectionState(state);
|
||||
if (isWaitingStatus) {
|
||||
qDebug() << "Android VPN service is alive, initialization by service status";
|
||||
qDebug() << "Initialization by service status";
|
||||
isWaitingStatus = false;
|
||||
emit serviceIsAlive(convertState(state));
|
||||
emit initConnectionState(convertState(state));
|
||||
}
|
||||
},
|
||||
Qt::QueuedConnection);
|
||||
|
|
|
@ -43,7 +43,7 @@ signals:
|
|||
void statisticsUpdated(quint64 rxBytes, quint64 txBytes);
|
||||
void configImported();
|
||||
void importConfigFromOutside(QString &data);
|
||||
void serviceIsAlive(Vpn::ConnectionState state);
|
||||
void initConnectionState(Vpn::ConnectionState state);
|
||||
|
||||
private:
|
||||
bool isWaitingStatus = true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue