From c7dc279cbbae93840836b81fd0e097bb711a0179 Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Thu, 9 Oct 2025 10:53:40 +1100 Subject: [PATCH 1/4] Better error handling for errors in SOGS --- .../main/java/org/session/libsession/snode/OnionRequestAPI.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt b/app/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt index 7efdd0fb21..2841bee0f4 100644 --- a/app/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt +++ b/app/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt @@ -418,7 +418,8 @@ object OnionRequestAPI { Log.d("Loki","Request returned a non penalizing code ${exception.statusCode} with message: $message") } else if (destination is Destination.Server - && (exception.statusCode == 500 || exception.statusCode == 504)) { + && exception is HTTPRequestFailedAtDestinationException + && (exception.statusCode in 500..504)) { Log.d("Loki","Destination server error - Non path penalizing. Request returned code ${exception.statusCode} with message: $message") } else if (message == "Loki Server error") { Log.d("Loki", "message was $message") From 408683706400a89ebcb11f7dc6d7b3f1f3a5d99d Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Thu, 9 Oct 2025 09:45:25 +0800 Subject: [PATCH 2/4] fix: enhance error handling in onion requests --- .../libsession/snode/OnionRequestAPI.kt | 6 +++--- .../org/session/libsignal/utilities/HTTP.kt | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt b/app/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt index 2841bee0f4..335a05fad0 100644 --- a/app/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt +++ b/app/src/main/java/org/session/libsession/snode/OnionRequestAPI.kt @@ -417,9 +417,9 @@ object OnionRequestAPI { // 404 is probably file server missing a file, don't rebuild path or mark a snode as bad here Log.d("Loki","Request returned a non penalizing code ${exception.statusCode} with message: $message") } - else if (destination is Destination.Server - && exception is HTTPRequestFailedAtDestinationException - && (exception.statusCode in 500..504)) { + else if (destination is Destination.Server && + (exception.statusCode in 500..504) && + (exception is HTTPRequestFailedAtDestinationException || exception.body?.contains(destination.host) == true)) { Log.d("Loki","Destination server error - Non path penalizing. Request returned code ${exception.statusCode} with message: $message") } else if (message == "Loki Server error") { Log.d("Loki", "message was $message") diff --git a/app/src/main/java/org/session/libsignal/utilities/HTTP.kt b/app/src/main/java/org/session/libsignal/utilities/HTTP.kt index fc29d07916..f95e1b0f3a 100644 --- a/app/src/main/java/org/session/libsignal/utilities/HTTP.kt +++ b/app/src/main/java/org/session/libsignal/utilities/HTTP.kt @@ -74,6 +74,7 @@ object HTTP { open class HTTPRequestFailedException( val statusCode: Int, val json: Map<*, *>?, + val body: String?, message: String = "HTTP request failed with status code $statusCode" ) : kotlin.Exception(message) class HTTPNoNetworkException : HTTPRequestFailedException(0, null, "No network connection") @@ -131,10 +132,10 @@ object HTTP { else -> defaultConnection }.newCall(request.build()).await().use { response -> when (val statusCode = response.code) { - 200 -> response.body!!.bytes() + in 200..299 -> response.body.bytes() else -> { Log.d("Loki", "${verb.rawValue} request to $url failed with status code: $statusCode.") - throw HTTPRequestFailedException(statusCode, null) + throw HTTPRequestFailedException(statusCode, json = null, body = response.body.string()) } } } @@ -143,8 +144,17 @@ object HTTP { if (!isConnectedToNetwork()) { throw HTTPNoNetworkException() } - // Override the actual error so that we can correctly catch failed requests in OnionRequestAPI - throw HTTPRequestFailedException(0, null, "HTTP request failed due to: ${exception.message}") + if (exception !is HTTPRequestFailedException) { + + // Override the actual error so that we can correctly catch failed requests in OnionRequestAPI + throw HTTPRequestFailedException( + 0, + null, + "HTTP request failed due to: ${exception.message}" + ) + } else { + throw exception + } } } From c53e34769d48c4c6a479c56b78b7f2b94d5d40d4 Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:17:28 +0800 Subject: [PATCH 3/4] Set message correctly for generic HTTPRequestFailedException --- .../main/java/org/session/libsignal/utilities/HTTP.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/session/libsignal/utilities/HTTP.kt b/app/src/main/java/org/session/libsignal/utilities/HTTP.kt index f95e1b0f3a..8f22f75bab 100644 --- a/app/src/main/java/org/session/libsignal/utilities/HTTP.kt +++ b/app/src/main/java/org/session/libsignal/utilities/HTTP.kt @@ -73,8 +73,8 @@ object HTTP { open class HTTPRequestFailedException( val statusCode: Int, - val json: Map<*, *>?, - val body: String?, + val json: Map<*, *>? = null, + val body: String? = null, message: String = "HTTP request failed with status code $statusCode" ) : kotlin.Exception(message) class HTTPNoNetworkException : HTTPRequestFailedException(0, null, "No network connection") @@ -135,7 +135,7 @@ object HTTP { in 200..299 -> response.body.bytes() else -> { Log.d("Loki", "${verb.rawValue} request to $url failed with status code: $statusCode.") - throw HTTPRequestFailedException(statusCode, json = null, body = response.body.string()) + throw HTTPRequestFailedException(statusCode, body = response.body.string()) } } } @@ -148,9 +148,8 @@ object HTTP { // Override the actual error so that we can correctly catch failed requests in OnionRequestAPI throw HTTPRequestFailedException( - 0, - null, - "HTTP request failed due to: ${exception.message}" + statusCode = 0, + message = "HTTP request failed due to: ${exception.message}" ) } else { throw exception From 3f5802718dd3946e903efc5b22b33208dba2acdd Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Thu, 9 Oct 2025 15:57:08 +1100 Subject: [PATCH 4/4] Insuring a p roper fallback for community icons --- .../java/org/thoughtcrime/securesms/util/AvatarUtils.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtils.kt b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtils.kt index db69bd8cc4..14ef86876e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtils.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtils.kt @@ -28,6 +28,7 @@ import org.session.libsession.utilities.recipients.displayName import org.session.libsignal.utilities.IdPrefix import org.thoughtcrime.securesms.database.RecipientRepository import org.thoughtcrime.securesms.pro.ProStatusManager +import org.thoughtcrime.securesms.ui.theme.classicDark3 import java.math.BigInteger import java.security.MessageDigest import java.util.Locale @@ -101,7 +102,13 @@ class AvatarUtils @Inject constructor( // custom image val (remoteFile, customIcon, color) = when { // use custom image if there is one - recipient.avatar != null -> Triple(recipient.avatar!!, null, defaultColor) + recipient.avatar != null -> Triple( + recipient.avatar!!, + // for communities, have an icon fallback in case the image errors out + if(recipient.isCommunityRecipient) R.drawable.session_logo else null, + // communities should always have a neutral fallback bg + if(recipient.isCommunityRecipient) classicDark3 else defaultColor + ) // communities without a custom image should use a default image recipient.isCommunityRecipient -> Triple(null, R.drawable.session_logo, null)