laforge has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/43389?usp=email )
Change subject: xua_msg: return M3UA_ERR in xua_dialect_check_all_mand_ies() ......................................................................
xua_msg: return M3UA_ERR in xua_dialect_check_all_mand_ies()
This way we can provide better information to peer on what went wrong, specially since we'll be adding more checks in follow-up commits. Furthermore, the return values now become much clearer.
Change-Id: I9df00f9b10f7341171912cf32e8ba57344ae8b4a --- M src/m3ua.c M src/sua.c M src/xua_msg.c 3 files changed, 10 insertions(+), 9 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved osmith: Looks good to me, but someone else must approve
diff --git a/src/m3ua.c b/src/m3ua.c index 46e145b..c232f02 100644 --- a/src/m3ua.c +++ b/src/m3ua.c @@ -897,8 +897,8 @@ LOGPASP(asp, DLM3UA, LOGL_DEBUG, "Received M3UA Message (%s)\n", xua_hdr_dump(xua, &xua_dialect_m3ua));
- if (!xua_dialect_check_all_mand_ies(&xua_dialect_m3ua, xua)) { - rc = M3UA_ERR_MISSING_PARAM; + rc = xua_dialect_check_all_mand_ies(&xua_dialect_m3ua, xua); + if (rc > 0) { xua_msg_free(xua); goto out; } diff --git a/src/sua.c b/src/sua.c index f11bc9e..8578647 100644 --- a/src/sua.c +++ b/src/sua.c @@ -780,9 +780,9 @@ LOGPASP(asp, DLSUA, LOGL_DEBUG, "Received SUA Message (%s)\n", xua_hdr_dump(xua, &xua_dialect_sua));
- if (!xua_dialect_check_all_mand_ies(&xua_dialect_sua, xua)) { - /* FIXME: Return error? */ - err = sua_gen_error_msg(SUA_ERR_MISSING_PARAM, msg); + rc = xua_dialect_check_all_mand_ies(&xua_dialect_sua, xua); + if (rc > 0) { + err = sua_gen_error_msg(rc, msg); goto out; }
diff --git a/src/xua_msg.c b/src/xua_msg.c index c254d83..8364a48 100644 --- a/src/xua_msg.c +++ b/src/xua_msg.c @@ -534,6 +534,7 @@ return buf; }
+/* Validate incoming xua_msg. returns 0 on success, M3UA_ERR_* on failure. */ int xua_dialect_check_all_mand_ies(const struct xua_dialect *dialect, const struct xua_msg *xua) { uint8_t msg_class = xua->hdr.msg_class; @@ -544,12 +545,12 @@
/* unknown class? */ if (!xmc) - return 1; + return 0;
ies = xmc->mand_ies[msg_type]; /* no mandatory IEs? */ if (!ies) - return 1; + return 0;
for (ie = *ies; ie; ie = *ies++) { if (!xua_msg_find_tag(xua, ie)) { @@ -559,11 +560,11 @@ dialect->name, xmc->name, xua_class_msg_name(xmc, msg_type), xua_class_iei_name(xmc, ie)); - return 0; + return M3UA_ERR_MISSING_PARAM; } }
- return 1; + return 0; }
char *xua_msg_dump(const struct xua_msg *xua, const struct xua_dialect *dialect)