ソースを参照

fix: Add connection timeouts for notification handling

...and do not fail operations if notification handling fails --
notifications are best-effort.
Peter Cai 1 年間 前
コミット
1536343b3f

+ 10 - 5
app-common/src/main/java/im/angry/openeuicc/util/EuiccChannelFragmentUtils.kt

@@ -48,11 +48,16 @@ suspend fun <T> T.beginTrackedOperation(op: suspend () -> Boolean) where T : Fra
         Log.d(TAG, "Latest notification is $latestSeq before operation")
         if (op()) {
             Log.d(TAG, "Operation has requested notification handling")
-            // Note that the exact instance of "channel" might have changed here if reconnected;
-            // so we MUST use the automatic getter for "channel"
-            channel.lpa.notifications.filter { it.seqNumber > latestSeq }.forEach {
-                Log.d(TAG, "Handling notification $it")
-                channel.lpa.handleNotification(it.seqNumber)
+            try {
+                // Note that the exact instance of "channel" might have changed here if reconnected;
+                // so we MUST use the automatic getter for "channel"
+                channel.lpa.notifications.filter { it.seqNumber > latestSeq }.forEach {
+                    Log.d(TAG, "Handling notification $it")
+                    channel.lpa.handleNotification(it.seqNumber)
+                }
+            } catch (e: Exception) {
+                // Ignore any error during notification handling
+                e.printStackTrace()
             }
         }
         Log.d(TAG, "Operation complete")

+ 1 - 0
libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/impl/HttpInterfaceImpl.kt

@@ -33,6 +33,7 @@ class HttpInterfaceImpl: HttpInterface {
             sslContext.init(null, trustManagers, SecureRandom())
 
             val conn = parsedUrl.openConnection() as HttpsURLConnection
+            conn.connectTimeout = 2000
             conn.sslSocketFactory = sslContext.socketFactory
             conn.requestMethod = "POST"
             conn.doInput = true