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
This commit is contained in:
Harald Welte 2018-07-28 23:02:48 +02:00
parent 88fa5a3e1e
commit b0d9594081
3 changed files with 24 additions and 1 deletions

View File

@ -109,6 +109,7 @@ int gsm0480_decode_ss_request(const struct gsm48_hdr *hdr, uint16_t len,
struct ss_request *request);
struct msgb *gsm0480_msgb_alloc_name(const char *name);
struct msgb *gsm0480_gen_ussd_resp_7bit(uint8_t invoke_id, const char *text);
struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const char *text);
struct msgb *gsm0480_create_unstructuredSS_Notify(int alertPattern, const char *text);

View File

@ -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);

View File

@ -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;