taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit 80304f4c9269d7d4aba3bdd02802677de58572ed
parent 4d17586e94b89a6c4abcdf4622441715c46f0f78
Author: Iván Ávalos <avalos@disroot.org>
Date:   Wed, 19 Jun 2024 10:48:01 -0600

[wallet] Less verbose HTTP logging + client resource cleanup

bug 0008920

Diffstat:
Mtaler-kotlin-android/src/main/java/net/taler/common/HttpUtils.kt | 3++-
Mwallet/src/main/java/net/taler/wallet/backend/NetworkInterface.kt | 30+++++++++++++++---------------
2 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/taler-kotlin-android/src/main/java/net/taler/common/HttpUtils.kt b/taler-kotlin-android/src/main/java/net/taler/common/HttpUtils.kt @@ -32,6 +32,7 @@ fun getDefaultHttpClient( withJson: Boolean = true, timeoutMs: Long? = null, followRedirect: Boolean = false, + logging: Boolean = true, ): HttpClient = HttpClient(OkHttp) { expectSuccess = true followRedirects = followRedirect @@ -57,7 +58,7 @@ fun getDefaultHttpClient( } install(Logging) { logger = Logger.ANDROID - level = LogLevel.HEADERS + level = if (logging) LogLevel.INFO else LogLevel.NONE } } diff --git a/wallet/src/main/java/net/taler/wallet/backend/NetworkInterface.kt b/wallet/src/main/java/net/taler/wallet/backend/NetworkInterface.kt @@ -47,15 +47,17 @@ class NetworkInterface: Networking.RequestHandler { sendResponse: (resp: Networking.ResponseInfo) -> Unit ) { Log.d(TAG, "HTTP: handleRequest($req, $id") - if (req.debug) debugHttpRequest(req) requests[id] = GlobalScope.launch { + val client = getDefaultHttpClient( + timeoutMs = req.timeoutMs, + followRedirect = req.redirectMode == Networking.RedirectMode.Transparent, + logging = req.debug, + ) + val resp = try { // TODO: reuse the same client for every request - getDefaultHttpClient( - timeoutMs = req.timeoutMs, - followRedirect = req.redirectMode == Networking.RedirectMode.Transparent, - ).request { + client.request { url(req.url) method = req.method.toHttpMethod() ?: error("invalid method") @@ -80,7 +82,12 @@ class NetworkInterface: Networking.RequestHandler { } catch (e: SerializationException) { Log.d(TAG, "Exception handling HTTP response", e) null - } ?: return@launch + } finally { + cleanupRequest(id) + client.close() + } + + if (resp == null) return@launch // HTTP response status code or 0 on error. val status = if (resp.status.value in 200 until 300) resp.status.value else 0 @@ -113,14 +120,7 @@ class NetworkInterface: Networking.RequestHandler { return true } - private fun debugHttpRequest(req: Networking.RequestInfo) { - Log.d(TAG, "HTTP request: body = ${req.body}") - req.headers.forEachIndexed { i, header -> - Log.d(TAG, "HTTP: header[$i] = $header") - } - Log.d(TAG, "HTTP request: method = ${req.method}") - Log.d(TAG, "HTTP request: redirectMode = ${req.redirectMode}") - Log.d(TAG, "HTTP request: timeoutMs = ${req.timeoutMs}") - Log.d(TAG, "HTTP request: url = ${req.url}") + private fun cleanupRequest(id: Int) { + requests.remove(id) } } \ No newline at end of file