OpenEUICC/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/impl/download/ApduTransmitter.kt

72 lines
2.7 KiB
Kotlin

/*
* Copyright 2022 Peter Cai & Pierre-Hugues Husson
*
* This program is free software: you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program.
* If not, see <https://www.gnu.org/licenses/>.
*/
package com.truphone.lpa.impl.download
import com.truphone.lpa.ApduChannel
import com.truphone.util.LogStub
import com.truphone.lpa.ApduTransmittedListener
import java.util.logging.Logger
class ApduTransmitter(private val apduChannel: ApduChannel) {
companion object {
private val LOG = Logger.getLogger(
ApduTransmitter::class.java.name
)
}
fun transmitApdu(apdu: String): String {
if (LogStub.getInstance().isDebugEnabled) {
LogStub.getInstance()
.logDebug(LOG, LogStub.getInstance().tag + " - APDU to transmit: " + apdu)
}
val apduResponse = apduChannel.transmitAPDU(apdu)
if (LogStub.getInstance().isDebugEnabled) {
LogStub.getInstance().logDebug(
LOG,
LogStub.getInstance().tag + " - Transmit APDU response: " + apduResponse
)
}
// Last 2 bytes are the status code (should be 0x9000)
// TODO: Do this properly
return apduResponse.substring(0, apduResponse.length - 4)
}
fun transmitApdus(apdus: List<String?>): String {
if (LogStub.getInstance().isDebugEnabled) {
LogStub.getInstance()
.logDebug(LOG, LogStub.getInstance().tag + " - APDUs to transmit: " + apdus)
}
val apduResponse = apduChannel.transmitAPDUS(apdus)
if (LogStub.getInstance().isDebugEnabled) {
LogStub.getInstance().logDebug(
LOG,
LogStub.getInstance().tag + " - Transmit APDUs response: " + apduResponse
)
}
// Last 2 bytes are the status code (should be 0x9000)
// TODO: Do this properly
return apduResponse.substring(0, apduResponse.length - 4)
}
fun addApduTransmittedListener(apduTransmittedListener: ApduTransmittedListener?) {
apduChannel.setApduTransmittedListener(apduTransmittedListener)
}
fun removeApduTransmittedListener(apduTransmittedListener: ApduTransmittedListener?) {
apduChannel.removeApduTransmittedListener(apduTransmittedListener)
}
}