From 5b612806c511ee92e6e7a431fb970bfed2cdaabd Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Thu, 15 Jul 2021 09:32:00 +1000 Subject: [PATCH] Include destination info in error messages --- .../res/layout/activity_message_detail.xml | 1 + .../libsession/snode/OnionRequestAPI.kt | 22 +++++++++---------- .../org/session/libsession/snode/SnodeAPI.kt | 12 +++++----- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/app/src/main/res/layout/activity_message_detail.xml b/app/src/main/res/layout/activity_message_detail.xml index accf3dd38d..c5a7f12bf1 100644 --- a/app/src/main/res/layout/activity_message_detail.xml +++ b/app/src/main/res/layout/activity_message_detail.xml @@ -86,6 +86,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" + android:textIsSelectable="true" tools:text="Send Failed"/> diff --git a/libsession/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt b/libsession/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt index 02158c3a3e..2fd82336e1 100644 --- a/libsession/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt +++ b/libsession/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt @@ -70,19 +70,19 @@ object OnionRequestAPI { const val targetPathCount = 2 // A main path and a backup path for the case where the target snode is in the main path // endregion - class HTTPRequestFailedAtDestinationException(val statusCode: Int, val json: Map<*, *>) - : Exception("HTTP request failed at destination with status code $statusCode.") + class HTTPRequestFailedAtDestinationException(val statusCode: Int, val json: Map<*, *>, val destination: String) + : Exception("HTTP request failed at destination ($destination) with status code $statusCode.") class InsufficientSnodesException : Exception("Couldn't find enough snodes to build a path.") private data class OnionBuildingResult( - val guardSnode: Snode, - val finalEncryptionResult: EncryptionResult, - val destinationSymmetricKey: ByteArray + val guardSnode: Snode, + val finalEncryptionResult: EncryptionResult, + val destinationSymmetricKey: ByteArray ) - internal sealed class Destination { - class Snode(val snode: org.session.libsignal.utilities.Snode) : Destination() - class Server(val host: String, val target: String, val x25519PublicKey: String, val scheme: String, val port: Int) : Destination() + internal sealed class Destination(val description: String) { + class Snode(val snode: org.session.libsignal.utilities.Snode) : Destination("Service node ${snode.ip}:${snode.port}") + class Server(val host: String, val target: String, val x25519PublicKey: String, val scheme: String, val port: Int) : Destination("$host") } // region Private API @@ -339,7 +339,7 @@ object OnionRequestAPI { val statusCode = json["status_code"] as? Int ?: json["status"] as Int if (statusCode == 406) { @Suppress("NAME_SHADOWING") val body = mapOf( "result" to "Your clock is out of sync with the service node network." ) - val exception = HTTPRequestFailedAtDestinationException(statusCode, body) + val exception = HTTPRequestFailedAtDestinationException(statusCode, body, destination.description) return@queue deferred.reject(exception) } else if (json["body"] != null) { @Suppress("NAME_SHADOWING") val body: Map<*, *> @@ -354,13 +354,13 @@ object OnionRequestAPI { } } if (statusCode != 200) { - val exception = HTTPRequestFailedAtDestinationException(statusCode, body) + val exception = HTTPRequestFailedAtDestinationException(statusCode, body, destination.description) return@queue deferred.reject(exception) } deferred.resolve(body) } else { if (statusCode != 200) { - val exception = HTTPRequestFailedAtDestinationException(statusCode, json) + val exception = HTTPRequestFailedAtDestinationException(statusCode, json, destination.description) return@queue deferred.reject(exception) } deferred.resolve(json) diff --git a/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt b/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt index 6613a2b53c..379e2a1638 100644 --- a/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt +++ b/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt @@ -101,12 +101,12 @@ object SnodeAPI { val url = "$target/json_rpc" Log.d("Loki", "Populating snode pool using: $target.") val parameters = mapOf( - "method" to "get_n_service_nodes", - "params" to mapOf( - "active_only" to true, - "limit" to 256, - "fields" to mapOf("public_ip" to true, "storage_port" to true, "pubkey_x25519" to true, "pubkey_ed25519" to true) - ) + "method" to "get_n_service_nodes", + "params" to mapOf( + "active_only" to true, + "limit" to 256, + "fields" to mapOf("public_ip" to true, "storage_port" to true, "pubkey_x25519" to true, "pubkey_ed25519" to true) + ) ) val deferred = deferred() deferred()