VPCD: partial rewrite of socket communication

- memory for buffer of received data is now reused with realloc
- internal functions now use a similar interface like recv/send/...
- added documentation about memory handling of vicc_getatr/vicc_transmit
- fixed transmit when using send in multiple passes
This commit is contained in:
Frank Morgner
2012-08-13 00:19:58 +02:00
parent 3adf5b1e60
commit 01c9f00a33
4 changed files with 178 additions and 130 deletions

View File

@@ -88,27 +88,32 @@ static int vpcd_transmit(driver_data_t *driver_data,
const unsigned char *send, size_t send_len,
unsigned char *recv, size_t *recv_len)
{
char *rapdu;
int size = vicc_transmit(send_len, (char *) send, &rapdu);
unsigned char *rapdu = NULL;
int r = 0;
ssize_t size = vicc_transmit(send_len, send, &rapdu);
if (size < 0) {
RELAY_ERROR("could not send apdu or receive rapdu\n");
*recv_len = 0;
return 0;
goto err;
}
if (*recv_len < size) {
RELAY_ERROR("Not enough memory for rapdu\n");
*recv_len = 0;
free(rapdu);
return 0;
goto err;
}
*recv_len = size;
memcpy(recv, rapdu, size);
*recv_len = size;
r = 1;
err:
if (!r)
*recv_len = 0;
free(rapdu);
return 1;
return r;
}