From 013abb2f3540caf585f493189a2a5b05d2e1b08a Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Wed, 26 Jun 2013 11:58:06 +0200 Subject: [PATCH] get cards atr on first try --- virtualsmartcard/src/vpcd/vpcd.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/virtualsmartcard/src/vpcd/vpcd.c b/virtualsmartcard/src/vpcd/vpcd.c index 19794ea..db61a20 100644 --- a/virtualsmartcard/src/vpcd/vpcd.c +++ b/virtualsmartcard/src/vpcd/vpcd.c @@ -248,6 +248,13 @@ ssize_t vicc_transmit(struct vicc_ctx *ctx, int vicc_present(struct vicc_ctx *ctx) { unsigned char *atr = NULL; + if (ctx->client_sock <= 0) + /* Wait up to one microsecond. */ + ctx->client_sock = waitforclient(ctx->server_sock, 0, 1); + + if (ctx->client_sock < 0) + return -1; + if (ctx->client_sock > 0) { if (vicc_getatr(ctx, &atr) <= 0) return 0; @@ -256,14 +263,8 @@ int vicc_present(struct vicc_ctx *ctx) { return 1; } else { - /* Wait up to one microsecond. */ - ctx->client_sock = waitforclient(ctx->server_sock, 0, 1); - - if (ctx->client_sock < 0) - return -1; + return 0; } - - return 0; } ssize_t vicc_getatr(struct vicc_ctx *ctx, unsigned char **atr) {