aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-09-24 14:52:56 +0200
committerHarald Welte <laforge@gnumonks.org>2018-09-24 14:52:56 +0200
commit3e689874ff472c9e11660ad3938188d88a48bc27 (patch)
tree4aec5ba0974ecf4ac83069f6fe26555ace3f1f3d
parentfd47119111375360265d2927c3a204066618d522 (diff)
bankd: Handle errors during PC/SC open/connect
-rw-r--r--src/bankd_main.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/bankd_main.c b/src/bankd_main.c
index f888e9a..7e650d3 100644
--- a/src/bankd_main.c
+++ b/src/bankd_main.c
@@ -255,10 +255,12 @@ static int worker_handle_connectClientReq(struct bankd_worker *worker, const Rsp
{
const struct ComponentIdentity *cid = &pdu->msg.choice.connectClientReq.identity;
struct bankd_slot_mapping *slmap;
+ e_ResultCode res;
+ RsproPDU_t *resp;
+ int rc;
OSMO_ASSERT(pdu->msg.present == RsproPDUchoice_PR_connectClientReq);
-
LOGW(worker, "connectClientReq(T=%lu, N='%s', SW='%s', VER='%s')\n",
cid->type, cid->name.buf, cid->software.buf, cid->swVersion.buf);
/* FIXME: store somewhere? */
@@ -282,6 +284,7 @@ static int worker_handle_connectClientReq(struct bankd_worker *worker, const Rsp
worker->client.clslot.client_id, worker->client.clslot.slot_nr);
worker_set_state(worker, BW_ST_CONN_CLIENT_WAIT_MAP);
/* FIXME: how to update the map in case a map is installed later */
+ res = ResultCode_cardNotPresent;
} else {
LOGW(worker, "slotmap found: C(%u:%u) -> B(%u:%u)\n",
slmap->client.client_id, slmap->client.slot_nr,
@@ -289,10 +292,15 @@ static int worker_handle_connectClientReq(struct bankd_worker *worker, const Rsp
worker->slot = slmap->bank;
worker_set_state(worker, BW_ST_CONN_CLIENT_MAPPED);
/* actually open the mapped reader/card/slot */
- worker_open_card(worker);
+ rc = worker_open_card(worker);
+ if (rc == 0)
+ res = ResultCode_ok;
+ else
+ res = ResultCode_cardNotPresent;
}
- return 0;
+ resp = rspro_gen_ConnectClientRes(&worker->bankd->comp_id, res);
+ return worker_send_rspro(worker, resp);
}
static int worker_handle_tpduModemToCard(struct bankd_worker *worker, const RsproPDU_t *pdu)