diff options
| author | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2023-11-06 08:14:27 +0000 | 
|---|---|---|
| committer | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2023-11-06 08:14:27 +0000 | 
| commit | 9d55978063947d5865bb3fa4e0c2ebef78f78812 (patch) | |
| tree | 49a07707f82375dc9d5d1048a07bbdf866bffe67 /trackersservicee/src/main/java/foundation/e | |
| parent | 0312ce64f85b5530a00bdc72eb310ba9dc1de05b (diff) | |
| download | advanced-privacy-9d55978063947d5865bb3fa4e0c2ebef78f78812.tar.gz | |
epic18: Manage VPN services for Tor or Tracker control
Diffstat (limited to 'trackersservicee/src/main/java/foundation/e')
3 files changed, 0 insertions, 215 deletions
| diff --git a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/DNSBlocker.kt b/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/DNSBlocker.kt deleted file mode 100644 index 6a2b218..0000000 --- a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/DNSBlocker.kt +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2023 MURENA SAS - * Copyright (C) 2022 E FOUNDATION - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program.  If not, see <https://www.gnu.org/licenses/>. - */ - -package foundation.e.advancedprivacy.trackers.service - -import android.net.LocalServerSocket -import android.system.ErrnoException -import android.system.Os -import android.system.OsConstants -import foundation.e.advancedprivacy.core.utils.runSuspendCatching -import foundation.e.advancedprivacy.trackers.domain.usecases.FilterHostnameUseCase -import kotlinx.coroutines.CancellationException -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.isActive -import kotlinx.coroutines.launch -import timber.log.Timber -import java.io.BufferedReader -import java.io.InputStreamReader -import java.io.PrintWriter - -class DNSBlocker( -    val filterHostnameUseCase: FilterHostnameUseCase -) { -    private var resolverReceiver: LocalServerSocket? = null - -    companion object { -        private const val SOCKET_NAME = "foundation.e.advancedprivacy" -    } - -    private fun closeSocket() { -        // Known bug and workaround that LocalServerSocket::close is not working well -        // https://issuetracker.google.com/issues/36945762 -        if (resolverReceiver != null) { -            try { -                Os.shutdown(resolverReceiver!!.fileDescriptor, OsConstants.SHUT_RDWR) -                resolverReceiver!!.close() -                resolverReceiver = null -            } catch (e: ErrnoException) { -                if (e.errno != OsConstants.EBADF) { -                    Timber.w("Socket already closed") -                } else { -                    Timber.e(e, "Exception: cannot close DNS port on stop $SOCKET_NAME !") -                } -            } catch (e: Exception) { -                Timber.e(e, "Exception: cannot close DNS port on stop $SOCKET_NAME !") -            } -        } -    } - -    fun listenJob(scope: CoroutineScope): Job = scope.launch(Dispatchers.IO) { -        val resolverReceiver = runSuspendCatching { -            LocalServerSocket(SOCKET_NAME) -        }.getOrElse { -            Timber.e(it, "Exception: cannot open DNS port on $SOCKET_NAME") -            return@launch -        } - -        this@DNSBlocker.resolverReceiver = resolverReceiver -        Timber.d("DNSFilterProxy running on port $SOCKET_NAME") - -        while (isActive) { -            runSuspendCatching { -                val socket = resolverReceiver.accept() -                val reader = BufferedReader(InputStreamReader(socket.inputStream)) -                val line = reader.readLine() -                val params = line.split(",").toTypedArray() -                val output = socket.outputStream -                val writer = PrintWriter(output, true) -                val domainName = params[0] -                val appUid = params[1].toInt() -                if (filterHostnameUseCase.shouldBlock(domainName, appUid)) { -                    writer.println("block") -                } else { -                    writer.println("pass") -                } -                socket.close() -            }.onFailure { -                if (it is CancellationException) { -                    closeSocket() -                    throw it -                } else { -                    Timber.w(it, "Exception while listening DNS resolver") -                } -            } -        } -    } -} diff --git a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt b/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt deleted file mode 100644 index 5f573b0..0000000 --- a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2023 MURENA SAS - * Copyright (C) 2021 E FOUNDATION - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program.  If not, see <https://www.gnu.org/licenses/>. - */ -package foundation.e.advancedprivacy.trackers.service - -import android.app.Service -import android.content.Intent -import android.os.IBinder -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.cancel -import org.koin.java.KoinJavaComponent.get - -class TrackersService : Service() { -    companion object { -        const val ACTION_START = "foundation.e.privacymodules.trackers.intent.action.START" - -        var coroutineScope = CoroutineScope(Dispatchers.IO) -    } - -    override fun onBind(intent: Intent): IBinder? { -        throw UnsupportedOperationException("Not yet implemented") -    } - -    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { -        if (ACTION_START == intent?.action) { -            stop() -            start() -        } -        return START_REDELIVER_INTENT -    } - -    private fun start() { -        coroutineScope = CoroutineScope(Dispatchers.IO) -        get<DNSBlocker>(DNSBlocker::class.java).apply { -            filterHostnameUseCase.writeLogJob(coroutineScope) -            listenJob(coroutineScope) -        } -    } - -    private fun stop() { -        kotlin.runCatching { coroutineScope.cancel() } -    } -} diff --git a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersServiceSupervisorImpl.kt b/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersServiceSupervisorImpl.kt deleted file mode 100644 index dcdf0d4..0000000 --- a/trackersservicee/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersServiceSupervisorImpl.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 MURENA SAS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program.  If not, see <https://www.gnu.org/licenses/>. - */ -package foundation.e.advancedprivacy.trackers.service - -import android.content.Context -import android.content.Intent -import foundation.e.advancedprivacy.trackers.domain.externalinterfaces.TrackersServiceSupervisor -import foundation.e.advancedprivacy.trackers.service.TrackersService.Companion.ACTION_START -import kotlinx.coroutines.isActive -import org.koin.core.module.dsl.bind -import org.koin.core.module.dsl.factoryOf -import org.koin.core.module.dsl.singleOf -import org.koin.dsl.module - -class TrackersServiceSupervisorImpl(private val context: Context) : TrackersServiceSupervisor { - -    override fun start(): Boolean { -        val intent = Intent(context, TrackersService::class.java) -        intent.action = ACTION_START -        return context.startService(intent) != null -    } - -    override fun stop(): Boolean { -        return context.stopService(Intent(context, TrackersService::class.java)) -    } - -    override fun isRunning(): Boolean { -        return TrackersService.coroutineScope.isActive -    } - -    override val dnsFilterForIpScrambling = null -} - -val trackerServiceModule = module { -    factoryOf(::DNSBlocker) -    singleOf(::TrackersServiceSupervisorImpl) { -        bind<TrackersServiceSupervisor>() -    } -} | 
