aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-08-16 14:44:37 +0200
committerHarald Welte <laforge@gnumonks.org>2018-08-16 14:44:37 +0200
commitcce2aadbb37811f287dd961151feab84f0e5c106 (patch)
treefc0e67e0b13f7ed503b66f9418cbb10779cc81de
parent7f684a00215cb58470dbd3ce04e02d51ad3f85e2 (diff)
bankd: Add client.id to bankd_worker
-rw-r--r--src/bankd.h1
-rw-r--r--src/bankd_main.c36
2 files changed, 34 insertions, 3 deletions
diff --git a/src/bankd.h b/src/bankd.h
index bf976d0..e97b702 100644
--- a/src/bankd.h
+++ b/src/bankd.h
@@ -103,6 +103,7 @@ struct bankd_worker {
int fd;
struct sockaddr_storage peer_addr;
socklen_t peer_addr_len;
+ unsigned int id;
} client;
struct {
diff --git a/src/bankd_main.c b/src/bankd_main.c
index 491958f..55d7155 100644
--- a/src/bankd_main.c
+++ b/src/bankd_main.c
@@ -196,12 +196,41 @@ static int blocking_ipa_read(int fd, uint8_t *buf, unsigned int buf_size)
return len;
}
+static int worker_handle_connectClientReq(struct bankd_worker *worker, const RsproPDU_t *pdu)
+{
+ OSMO_ASSERT(pdu->msg.present == RsproPDUchoice_PR_connectClientReq);
+
+ const struct ComponentIdentity *cid = &pdu->msg.choice.connectClientReq.identity;
+
+ 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? */
+
+ if (worker->state != BW_ST_CONN_WAIT_ID) {
+ LOGW(worker, "Unexpected connectClientReq\n");
+ return -102;
+ }
+
+ if (!pdu->msg.choice.connectClientReq.clientId) {
+ LOGW(worker, "missing clientID, aborting\n");
+ return -103;
+ }
+ worker->client.id = *pdu->msg.choice.connectClientReq.clientId;
+ worker_set_state(worker, BW_ST_CONN_CLIENT);
+
+ /* FIXME: resolve mapping */
+
+ return 0;
+}
+
/* handle one incoming RSPRO message from a client inside a worker thread */
static int worker_handle_rspro(struct bankd_worker *worker, const RsproPDU_t *pdu)
{
+ int rc = -100;
+
switch (pdu->msg.present) {
case RsproPDUchoice_PR_connectClientReq:
- /* FIXME */
+ rc = worker_handle_connectClientReq(worker, pdu);
break;
case RsproPDUchoice_PR_tpduModemToCard:
/* FIXME */
@@ -210,10 +239,11 @@ static int worker_handle_rspro(struct bankd_worker *worker, const RsproPDU_t *pd
/* FIXME */
break;
default:
- return -100;
+ rc = -101;
+ break;
}
- return 0;
+ return rc;
}
/* body of the main transceive loop */