pcsc-relay: allow no-ops when sending/receiving
This commit is contained in:
@@ -207,13 +207,15 @@ static int lnfc_receive_capdu(driver_data_t *driver_data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (data->iCapduLen) {
|
||||||
p = realloc(*capdu, data->iCapduLen);
|
p = realloc(*capdu, data->iCapduLen);
|
||||||
if (!p) {
|
if (!p) {
|
||||||
RELAY_ERROR("Error allocating memory for C-APDU\n");
|
RELAY_ERROR("Error allocating memory for C-APDU (%d bytes)\n", data->iCapduLen);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
memcpy(p, data->abtCapdu, data->iCapduLen);
|
memcpy(p, data->abtCapdu, data->iCapduLen);
|
||||||
*capdu = p;
|
*capdu = p;
|
||||||
|
}
|
||||||
*len = data->iCapduLen;
|
*len = data->iCapduLen;
|
||||||
|
|
||||||
|
|
||||||
@@ -230,6 +232,7 @@ static int lnfc_send_rapdu(driver_data_t *driver_data,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
|
if (len) {
|
||||||
r = nfc_target_send_bytes(data->pndTarget, rapdu, len, -1);
|
r = nfc_target_send_bytes(data->pndTarget, rapdu, len, -1);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
RELAY_ERROR ("nfc_target_send_bytes: %s\n", nfc_strerror(data->pndTarget));
|
RELAY_ERROR ("nfc_target_send_bytes: %s\n", nfc_strerror(data->pndTarget));
|
||||||
@@ -237,6 +240,7 @@ static int lnfc_send_rapdu(driver_data_t *driver_data,
|
|||||||
}
|
}
|
||||||
if (r < len)
|
if (r < len)
|
||||||
INFO ("Transmitted %u less bytes than desired: %s\n", (unsigned int) len-r, nfc_strerror(data->pndTarget));
|
INFO ("Transmitted %u less bytes than desired: %s\n", (unsigned int) len-r, nfc_strerror(data->pndTarget));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -208,7 +208,6 @@ static int picc_receive_capdu(driver_data_t *driver_data,
|
|||||||
|
|
||||||
/* read C-APDU */
|
/* read C-APDU */
|
||||||
linelen = getline(&data->line, &data->linemax, data->fd);
|
linelen = getline(&data->line, &data->linemax, data->fd);
|
||||||
if (linelen <= 0) {
|
|
||||||
if (linelen < 0) {
|
if (linelen < 0) {
|
||||||
RELAY_ERROR("Error reading from %s: %s\n", PICCDEV, strerror(errno));
|
RELAY_ERROR("Error reading from %s: %s\n", PICCDEV, strerror(errno));
|
||||||
return 0;
|
return 0;
|
||||||
@@ -217,7 +216,6 @@ static int picc_receive_capdu(driver_data_t *driver_data,
|
|||||||
*len = 0;
|
*len = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (fflush(data->fd) != 0)
|
if (fflush(data->fd) != 0)
|
||||||
RELAY_ERROR("Warning, fflush failed: %s\n", strerror(errno));
|
RELAY_ERROR("Warning, fflush failed: %s\n", strerror(errno));
|
||||||
|
|
||||||
@@ -237,6 +235,9 @@ static int picc_send_rapdu(driver_data_t *driver_data,
|
|||||||
if (!data || !rapdu)
|
if (!data || !rapdu)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (!len)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
|
||||||
/* encode R-APDU */
|
/* encode R-APDU */
|
||||||
if (!picc_encode_rapdu(rapdu, len, &data->e_rapdu, &buflen))
|
if (!picc_encode_rapdu(rapdu, len, &data->e_rapdu, &buflen))
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ static int vicc_receive_capdu(driver_data_t *driver_data,
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// finaly we got the capdu
|
// finally we got the C-APDU
|
||||||
*len = size;
|
*len = size;
|
||||||
r = 1;
|
r = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user