diff options
author | Harald Welte <laforge@gnumonks.org> | 2018-07-28 23:02:48 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-07-29 14:39:36 +0000 |
commit | b0d95940818abd5cad17c0b503029faee51cecba (patch) | |
tree | 7d1973da4efc461a3e46519d797687d50df61ba6 /src | |
parent | 88fa5a3e1ee82f456ad121ddfab65e4d76fc14cb (diff) |
USSD: Introduce gsm0480_gen_ussd_resp_7bit()
Contrary to the existing gsm0480_create_ussd_resp(), the new function
only generates the value part of the FACILITY IE, and not the IE
Tag/Length or the 04.08 L3 header. This is needed in the context of
GSUP-encapsulated USSD, as here we don't work with L3 messages, but
only pass on the FACILITY IE value.
Change-Id: Ide240279240322f643e142229eb7829f538c6314
Diffstat (limited to 'src')
-rw-r--r-- | src/gsm/gsm0480.c | 23 | ||||
-rw-r--r-- | src/gsm/libosmogsm.map | 1 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c index ac0fa125..db28f0dc 100644 --- a/src/gsm/gsm0480.c +++ b/src/gsm/gsm0480.c @@ -792,7 +792,11 @@ struct msgb *gsm0480_msgb_alloc_name(const char *name) return msgb_alloc_headroom(1024, 128, name); } -struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const char *text) +/*! Generate a USSD ReturnResult component containing a string in default GSM alphabet. + * \param[in] invoke_id InvokeID of the request to which we respond + * \param[in] text USSD text in ASCII; to be encoded as GSM 7-but alphabet + */ +struct msgb *gsm0480_gen_ussd_resp_7bit(uint8_t invoke_id, const char *text) { struct msgb *msg; uint8_t *ptr8; @@ -829,6 +833,23 @@ struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const /* Wrap this up as a Return Result component */ msgb_wrap_with_TL(msg, GSM0480_CTYPE_RETURN_RESULT); + return msg; +} + +/*! Legacy helper: Generate USSD response including FACILITY IE + L3 header. + * + * This function is just like \ref gsm0480_gen_ussd_resp_7bit, but it generates + * not only the FACILITY value, but the full L3 message including message header + * and FACILITY IE Tag+Length. + */ +struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const char *text) +{ + struct msgb *msg; + + msg = gsm0480_gen_ussd_resp_7bit(invoke_id, text); + if (!msg) + return NULL; + /* Wrap the component in a Facility message */ msgb_wrap_with_TL(msg, GSM0480_IE_FACILITY); diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index 312c9901..d21514ca 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -98,6 +98,7 @@ gsm0480_wrap_invoke; gsm0480_comp_type_names; gsm0480_op_code_names; gsm0480_msgb_alloc_name; +gsm0480_gen_ussd_resp_7bit; gsm0502_calc_paging_group; |