ranap_common_cn.c: Use call-backs rather than function calls
When we use call-back function pointers with ranap_cn_rx_c{o,l}()
functions, we can (soon) migrate it into libosmo-ranap without an
application having to provide 'magic symbols' that the library expects
to be able to call.
diff --git a/src/tests/dummy_cn_sua.c b/src/tests/dummy_cn_sua.c
index c9acd9f..c852505 100644
--- a/src/tests/dummy_cn_sua.c
+++ b/src/tests/dummy_cn_sua.c
@@ -135,7 +135,7 @@
}
/* Entry point for connection-oriented ANAP message */
-int cn_ranap_handle_co(void *ctx, ranap_message *message)
+static void cn_ranap_handle_co(void *ctx, ranap_message *message)
{
int rc = 0;
@@ -172,11 +172,8 @@
case RANAP_RANAP_PDU_PR_unsuccessfulOutcome:
case RANAP_RANAP_PDU_PR_outcome:
default:
- rc = -1;
break;
}
-
- return rc;
}
static int ranap_handle_cl_reset_req(void *ctx, RANAP_ResetIEs_t *ies)
@@ -196,7 +193,7 @@
}
/* Entry point for connection-less RANAP message */
-int cn_ranap_handle_cl(void *ctx, ranap_message *message)
+static void cn_ranap_handle_cl(void *ctx, ranap_message *message)
{
int rc = 0;
@@ -216,7 +213,6 @@
case RANAP_RANAP_PDU_PR_unsuccessfulOutcome:
case RANAP_RANAP_PDU_PR_outcome:
default:
- rc = -1;
break;
}
}
@@ -272,13 +268,13 @@
resp = make_conn_resp(&prim->u.connect);
osmo_sua_user_link_down(link, resp);
/* then handle the RANAP payload */
- rc = cn_ranap_rx_co(ue, msgb_l2(oph->msg), msgb_l2len(oph->msg));
+ rc = ranap_cn_rx_co(cn_ranap_handle_co, ue, msgb_l2(oph->msg), msgb_l2len(oph->msg));
break;
case OSMO_PRIM(OSMO_SCU_PRIM_N_DISCONNECT, PRIM_OP_INDICATION):
/* indication of disconnect */
printf("N-DISCONNECT.ind(%u)\n", prim->u.disconnect.conn_id);
ue = ue_conn_ctx_find(link, prim->u.disconnect.conn_id);
- rc = cn_ranap_rx_co(ue, msgb_l2(oph->msg), msgb_l2len(oph->msg));
+ rc = ranap_cn_rx_co(cn_ranap_handle_co, ue, msgb_l2(oph->msg), msgb_l2len(oph->msg));
break;
case OSMO_PRIM(OSMO_SCU_PRIM_N_DATA, PRIM_OP_INDICATION):
/* connection-oriented data received */
@@ -286,13 +282,13 @@
osmo_hexdump(msgb_l2(oph->msg), msgb_l2len(oph->msg)));
/* resolve UE context */
ue = ue_conn_ctx_find(link, prim->u.data.conn_id);
- rc = cn_ranap_rx_co(ue, msgb_l2(oph->msg), msgb_l2len(oph->msg));
+ rc = ranap_cn_rx_co(cn_ranap_handle_co, ue, msgb_l2(oph->msg), msgb_l2len(oph->msg));
break;
case OSMO_PRIM(OSMO_SCU_PRIM_N_UNITDATA, PRIM_OP_INDICATION):
/* connection-oriented data received */
printf("N-UNITDATA.ind(%s)\n",
osmo_hexdump(msgb_l2(oph->msg), msgb_l2len(oph->msg)));
- rc = cn_ranap_rx_cl(link, msgb_l2(oph->msg), msgb_l2len(oph->msg));
+ rc = ranap_cn_rx_cl(cn_ranap_handle_cl, link, msgb_l2(oph->msg), msgb_l2len(oph->msg));
break;
}
diff --git a/src/tests/ranap_common_cn.c b/src/tests/ranap_common_cn.c
index 799629e..59186ff 100644
--- a/src/tests/ranap_common_cn.c
+++ b/src/tests/ranap_common_cn.c
@@ -170,7 +170,7 @@
/* receive a connection-oriented RANAP message and call
* cn_ranap_handle_co() with the resulting ranap_message struct */
-int cn_ranap_rx_co(void *ctx, uint8_t *data, size_t len)
+int ranap_cn_rx_co(ranap_handle_cb cb, void *ctx, uint8_t *data, size_t len)
{
RANAP_RANAP_PDU_t *pdu = NULL;
ranap_message message;
@@ -191,7 +191,7 @@
rc = _cn_ranap_rx_co(ctx, pdu, &message);
if (rc == 0)
- cn_ranap_handle_co(ctx, &message);
+ (*cb)(ctx, &message);
else
LOGP(DRANAP, LOGL_ERROR, "Not calling cn_ranap_handle_co() due to rc=%d\n", rc);
@@ -305,7 +305,7 @@
/* receive a connection-oriented RANAP message and call
* cn_ranap_handle_co() with the resulting ranap_message struct */
-int cn_ranap_rx_cl(void *ctx, uint8_t *data, size_t len)
+int ranap_cn_rx_cl(ranap_handle_cb cb, void *ctx, uint8_t *data, size_t len)
{
RANAP_RANAP_PDU_t *pdu = NULL;
ranap_message message;
@@ -326,7 +326,7 @@
rc = _cn_ranap_rx_cl(ctx, pdu, &message);
if (rc == 0)
- cn_ranap_handle_cl(ctx, &message);
+ (*cb)(ctx, &message);
else
LOGP(DRANAP, LOGL_ERROR, "Not calling cn_ranap_handle_cl() due to rc=%d\n", rc);
diff --git a/src/tests/ranap_common_cn.h b/src/tests/ranap_common_cn.h
index 6eb16c2..f0fd09e 100644
--- a/src/tests/ranap_common_cn.h
+++ b/src/tests/ranap_common_cn.h
@@ -5,13 +5,10 @@
#include <osmocom/ranap/ranap_common.h>
#include <osmocom/ranap/ranap_ies_defs.h>
-/* call-back functions to be provided by actual core network node */
-int cn_ranap_handle_co(void *ctx, ranap_message *message);
-int cn_ranap_handle_cl(void *ctx, ranap_message *message);
-
+typedef void (*ranap_handle_cb)(void *ctx, ranap_message *ranap_msg);
/* receive a connections-liess RANAP message */
-int cn_ranap_rx_cl(void *ctx, uint8_t *data, size_t len);
+int ranap_cn_rx_cl(ranap_handle_cb cb, void *ctx, uint8_t *data, size_t len);
/* receive a connection-oriented RANAP message */
-int cn_ranap_rx_co(void *ctx, uint8_t *data, size_t len);
+int ranap_cn_rx_co(ranap_handle_cb cb, void *ctx, uint8_t *data, size_t len);