From 76e267968d713f59b8a4966e509c7f09ad2b4e62 Mon Sep 17 00:00:00 2001 From: Alba Mendez Date: Tue, 14 Mar 2023 17:03:35 +0100 Subject: [PATCH] send length + data at the same time --- .../remotesmartcardreader/app/VPCDWorker.java | 11 +++++------ virtualsmartcard/src/vpcd/vpcd.c | 9 +++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/remote-reader/app/src/main/java/com/vsmartcard/remotesmartcardreader/app/VPCDWorker.java b/remote-reader/app/src/main/java/com/vsmartcard/remotesmartcardreader/app/VPCDWorker.java index 7db54c6..cfa1066 100644 --- a/remote-reader/app/src/main/java/com/vsmartcard/remotesmartcardreader/app/VPCDWorker.java +++ b/remote-reader/app/src/main/java/com/vsmartcard/remotesmartcardreader/app/VPCDWorker.java @@ -179,13 +179,12 @@ class VPCDWorker extends AsyncTask { private void sendToVPCD(byte[] data) throws IOException { /* convert length to network byte order. Note that Java always uses network byte order internally. */ - byte[] length = new byte[2]; - length[0] = (byte) (data.length >> 8); - length[1] = (byte) (data.length & 0xff); - outputStream.write(length); - - outputStream.write(data, 0, data.length); + byte[] packet = new byte[2 + data.length]; + packet[0] = (byte) (data.length >> 8); + packet[1] = (byte) (data.length & 0xff); + System.arraycopy(data, 0, packet, 2, data.length); + outputStream.write(packet); outputStream.flush(); } diff --git a/virtualsmartcard/src/vpcd/vpcd.c b/virtualsmartcard/src/vpcd/vpcd.c index d656744..a2047fe 100644 --- a/virtualsmartcard/src/vpcd/vpcd.c +++ b/virtualsmartcard/src/vpcd/vpcd.c @@ -219,6 +219,7 @@ static ssize_t sendToVICC(struct vicc_ctx *ctx, size_t length, const unsigned ch { ssize_t r; uint16_t size; + char *sendBuffer; if (!ctx || length > 0xFFFF) { errno = EINVAL; @@ -226,11 +227,11 @@ static ssize_t sendToVICC(struct vicc_ctx *ctx, size_t length, const unsigned ch } /* send size of message on 2 bytes */ + sendBuffer = (char *) alloca(length + 2); size = htons((uint16_t) length); - r = sendall(ctx->client_sock, (void *) &size, sizeof size); - if (r == sizeof size) - /* send message */ - r = sendall(ctx->client_sock, buffer, length); + memcpy(sendBuffer, &size, 2); + memcpy(sendBuffer + 2, buffer, length); + r = sendall(ctx->client_sock, sendBuffer, length + 2); if (r < 0) vicc_eject(ctx);