diff options
author | Max <msuraev@sysmocom.de> | 2018-01-24 12:33:05 +0100 |
---|---|---|
committer | Max <msuraev@sysmocom.de> | 2018-02-05 13:03:42 +0100 |
commit | 80f4c4eb089e87cb1a9c6843b60836b7a6952164 (patch) | |
tree | a236b8f0384fbd95b91ddcfca5d12b4cc9dab7ac /src | |
parent | 18c014de6771a3032308123af9969c966e20b7c8 (diff) |
GSUP: change osmo_gsup_encode() return type
* match return type of osmo_gsup_encode() with osmo_gsup_decode() to allow
propagating error to caller
* check return value of osmo_gsup_encode() in GSUP test
* return errors instead of braking app with aseert
Change-Id: Idaa1deecb6d9e15329bd51867b4f6a03357461f0
Related: OS#2864
Diffstat (limited to 'src')
-rw-r--r-- | src/gsm/gsup.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/gsm/gsup.c b/src/gsm/gsup.c index eb829f7c..b6ac56d9 100644 --- a/src/gsm/gsup.c +++ b/src/gsm/gsup.c @@ -475,8 +475,9 @@ static void encode_auth_info(struct msgb *msg, enum osmo_gsup_iei iei, /*! Encode a GSUP message * \param[out] msg message buffer to which encoded message is written * \param[in] gsup_msg \ref osmo_gsup_message data to be encoded + * \returns 0 on success; negative otherwise */ -void osmo_gsup_encode(struct msgb *msg, const struct osmo_gsup_message *gsup_msg) +int osmo_gsup_encode(struct msgb *msg, const struct osmo_gsup_message *gsup_msg) { uint8_t u8; int idx; @@ -484,14 +485,16 @@ void osmo_gsup_encode(struct msgb *msg, const struct osmo_gsup_message *gsup_msg size_t bcd_len; /* generic part */ - OSMO_ASSERT(gsup_msg->message_type); + if(!gsup_msg->message_type) + return -ENOMEM; + msgb_v_put(msg, gsup_msg->message_type); bcd_len = gsm48_encode_bcd_number(bcd_buf, sizeof(bcd_buf), 0, gsup_msg->imsi); - OSMO_ASSERT(bcd_len > 1); - OSMO_ASSERT(bcd_len <= sizeof(bcd_buf)); + if (bcd_len <= 0 || bcd_len > sizeof(bcd_buf)) + return -EINVAL; /* Note that gsm48_encode_bcd_number puts the length into the first * octet. Since msgb_tlv_put will add this length byte, we'll have to @@ -560,6 +563,8 @@ void osmo_gsup_encode(struct msgb *msg, const struct osmo_gsup_message *gsup_msg msgb_tlv_put(msg, OSMO_GSUP_CHARG_CHAR_IE, gsup_msg->pdp_charg_enc_len, gsup_msg->pdp_charg_enc); } + + return 0; } /*! @} */ |