From 384270f57bd203114c61c856d47500556c87db4f Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 1 Apr 2025 18:39:43 +0800 Subject: [PATCH 1/2] fix: usb isd-r aid fallback --- .../openeuicc/core/DefaultEuiccChannelManager.kt | 12 ++++++------ .../im/angry/openeuicc/core/usb/UsbApduInterface.kt | 2 +- .../main/java/im/angry/openeuicc/util/StringUtils.kt | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/core/DefaultEuiccChannelManager.kt b/app-common/src/main/java/im/angry/openeuicc/core/DefaultEuiccChannelManager.kt index 74ec285..5a22629 100644 --- a/app-common/src/main/java/im/angry/openeuicc/core/DefaultEuiccChannelManager.kt +++ b/app-common/src/main/java/im/angry/openeuicc/core/DefaultEuiccChannelManager.kt @@ -55,7 +55,7 @@ open class DefaultEuiccChannelManager( parseIsdrAidList(appContainer.preferenceRepository.isdrAidListFlow.first()) return isdrAidList.firstNotNullOfOrNull { - Log.i(TAG, "Opening channel, trying ISDR AID ${it.encodeHex()}") + Log.i(TAG, "Opening channel, trying ISD-R AID: ${it.encodeHex()}") openFn(it)?.let { channel -> if (channel.valid) { @@ -277,11 +277,11 @@ open class DefaultEuiccChannelManager( ) try { val channel = tryOpenChannelFirstValidAid { - euiccChannelFactory.tryOpenUsbEuiccChannel( - device, - iface, - it - ) + try { + euiccChannelFactory.tryOpenUsbEuiccChannel(device, iface, it) + } catch (_: IllegalArgumentException) { + null + } } if (channel != null && channel.lpa.valid) { usbChannel = channel diff --git a/app-common/src/main/java/im/angry/openeuicc/core/usb/UsbApduInterface.kt b/app-common/src/main/java/im/angry/openeuicc/core/usb/UsbApduInterface.kt index 31ba333..107395f 100644 --- a/app-common/src/main/java/im/angry/openeuicc/core/usb/UsbApduInterface.kt +++ b/app-common/src/main/java/im/angry/openeuicc/core/usb/UsbApduInterface.kt @@ -53,7 +53,7 @@ class UsbApduInterface( "A9088100820101830107".decodeHex(), le = null, ) - transmitApduByChannel(terminalCapabilities, 0,) + transmitApduByChannel(terminalCapabilities, 0) } override fun disconnect() { diff --git a/app-common/src/main/java/im/angry/openeuicc/util/StringUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/StringUtils.kt index 9f993a3..99cf0b3 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/StringUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/StringUtils.kt @@ -36,6 +36,7 @@ fun formatFreeSpace(size: Int): String = fun parseIsdrAidList(s: String): List = s.split('\n').map(String::trim).filter { !it.startsWith('#') } .map(String::trim) + .filter(String::isNotEmpty) .mapNotNull { try { it.decodeHex() From b090bb007cf33327e4d51de23f58f2e95b567c49 Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 1 Apr 2025 20:39:12 +0800 Subject: [PATCH 2/2] fix: usb isd-r aid fallback --- .../im/angry/openeuicc/core/DefaultEuiccChannelManager.kt | 6 +----- .../java/im/angry/openeuicc/core/usb/UsbApduInterface.kt | 6 +++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/core/DefaultEuiccChannelManager.kt b/app-common/src/main/java/im/angry/openeuicc/core/DefaultEuiccChannelManager.kt index 5a22629..0f6e6b3 100644 --- a/app-common/src/main/java/im/angry/openeuicc/core/DefaultEuiccChannelManager.kt +++ b/app-common/src/main/java/im/angry/openeuicc/core/DefaultEuiccChannelManager.kt @@ -277,11 +277,7 @@ open class DefaultEuiccChannelManager( ) try { val channel = tryOpenChannelFirstValidAid { - try { - euiccChannelFactory.tryOpenUsbEuiccChannel(device, iface, it) - } catch (_: IllegalArgumentException) { - null - } + euiccChannelFactory.tryOpenUsbEuiccChannel(device, iface, it) } if (channel != null && channel.lpa.valid) { usbChannel = channel diff --git a/app-common/src/main/java/im/angry/openeuicc/core/usb/UsbApduInterface.kt b/app-common/src/main/java/im/angry/openeuicc/core/usb/UsbApduInterface.kt index 107395f..8511a0e 100644 --- a/app-common/src/main/java/im/angry/openeuicc/core/usb/UsbApduInterface.kt +++ b/app-common/src/main/java/im/angry/openeuicc/core/usb/UsbApduInterface.kt @@ -70,12 +70,12 @@ class UsbApduInterface( transmitApduByChannel(req, 0) } catch (e: Exception) { e.printStackTrace() - return -1 + return 0 } if (!isSuccessResponse(resp)) { Log.d(TAG, "OPEN LOGICAL CHANNEL failed: ${resp.encodeHex()}") - return -1 + return 0 } val channelId = resp[0].toInt() @@ -87,7 +87,7 @@ class UsbApduInterface( if (!isSuccessResponse(selectAidResp)) { Log.d(TAG, "Select DF failed : ${selectAidResp.encodeHex()}") - return -1 + return 0 } channels.add(channelId)