Search in sources :

Example 1 with ReadBinaryApduCommand

use of es.gob.jmulticard.apdu.iso7816four.ReadBinaryApduCommand in project jmulticard by ctt-gob-es.

the class Iso7816FourCard method readBinary.

/**
 * Lee un contenido binario del fichero actualmente seleccionado.
 * @param msbOffset Octeto más significativo del desplazamiento
 *                  (<i>offset</i>) hasta el punto de inicio de la lectura desde
 *        			el comienzo del fichero.
 * @param lsbOffset Octeto menos significativo del desplazamiento (<i>offset</i>)
 *                  hasta el punto de inicio de la lectura desde el comienzo del
 *                  fichero.
 * @param readLength Longitud de los datos a leer (en octetos).
 * @return APDU de respuesta.
 * @throws ApduConnectionException Si hay problemas en el env&iacute;o de la APDU.
 * @throws RequiredSecurityStateNotSatisfiedException Si la lectura requiere el cumplimiento
 *                        de una condici&oacute;n de seguridad y esta no se ha satisfecho.
 * @throws OffsetOutsideEfException Si el desplazamiento indicado o el tama&ntilde;o indicados
 *                                  para la lectura caen fuera de los l&iacute;mites del fichero.
 */
private ResponseApdu readBinary(final byte msbOffset, final byte lsbOffset, final byte readLength) throws ApduConnectionException, RequiredSecurityStateNotSatisfiedException, OffsetOutsideEfException {
    final CommandApdu apdu = new ReadBinaryApduCommand(getCla(), msbOffset, lsbOffset, readLength);
    final ResponseApdu res = getConnection().transmit(apdu);
    if (res.isOk()) {
        return res;
    }
    if (OFFSET_OUTSIDE_EF.equals(res.getStatusWord())) {
        throw new OffsetOutsideEfException(OFFSET_OUTSIDE_EF, apdu);
    }
    if (UNSATISFIED_SECURITY_STATE.equals(res.getStatusWord())) {
        throw new RequiredSecurityStateNotSatisfiedException(res.getStatusWord());
    }
    if (EOF_REACHED.equals(res.getStatusWord())) {
        // $NON-NLS-1$
        LOGGER.warning("Se ha alcanzado el final de fichero antes de poder leer los octetos indicados");
        return res;
    }
    // $NON-NLS-1$
    throw new ApduConnectionException("Respuesta invalida en la lectura de binario con el codigo: " + res.getStatusWord());
}
Also used : CommandApdu(es.gob.jmulticard.apdu.CommandApdu) ResponseApdu(es.gob.jmulticard.apdu.ResponseApdu) ReadBinaryApduCommand(es.gob.jmulticard.apdu.iso7816four.ReadBinaryApduCommand) ApduConnectionException(es.gob.jmulticard.apdu.connection.ApduConnectionException)

Aggregations

CommandApdu (es.gob.jmulticard.apdu.CommandApdu)1 ResponseApdu (es.gob.jmulticard.apdu.ResponseApdu)1 ApduConnectionException (es.gob.jmulticard.apdu.connection.ApduConnectionException)1 ReadBinaryApduCommand (es.gob.jmulticard.apdu.iso7816four.ReadBinaryApduCommand)1