libosmogsm 1.11.0.26-c59d.202505152026
Osmocom GSM library
|
Format functions for GSM 04.80. More...
#include <osmocom/gsm/gsm48.h>
#include <osmocom/gsm/gsm0480.h>
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/core/logging.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/gsm/protocol/gsm_04_80.h>
#include <string.h>
#include <errno.h>
Variables | |
const struct value_string | gsm0480_comp_type_names [] |
const struct value_string | gsm0480_op_code_names [] |
Format functions for GSM 04.80.
References msgb::data, gsm0480_msgb_alloc_name(), GSM_0480_SEQUENCE_TAG, gsm_7bit_encode_n_ussd(), len, and msg.
Create a GSM 04.80 Release complete (see 2.5) message, prefixed by GSM 04.08 L3 header with a given transaction ID.
[in] | trans_id | GSM 04.07 transaction identifier (and TI flag) |
References gsm0480_msgb_alloc_name(), GSM0480_MTYPE_RELEASE_COMPLETE, GSM48_PDISC_NC_SS, gsm48_push_l3hdr_tid, and msg.
References ASN1_OCTET_STRING_TAG, msgb::data, gsm0480_msgb_alloc_name(), GSM_0480_SEQUENCE_TAG, gsm_7bit_encode_n_ussd(), len, and msg.
Referenced by gsm0480_create_ussd_notify().
Deprecated, use gsm0480_create_release_complete() instead.
References gsm0480_msgb_alloc_name(), GSM0480_MTYPE_RELEASE_COMPLETE, GSM48_PDISC_NC_SS, gsm48_push_l3hdr(), and msg.
Legacy helper: Generate USSD response including FACILITY IE + L3 header.
This function is just like 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.
References gsm0480_gen_ussd_resp_7bit(), GSM0480_IE_FACILITY, GSM0480_MTYPE_RELEASE_COMPLETE, GSM48_PDISC_NC_SS, gsm48_push_l3hdr_tid, and msg.
int gsm0480_decode_ss_request | ( | const struct gsm48_hdr * | hdr, |
uint16_t | len, | ||
struct ss_request * | req | ||
) |
Check Protocol Discriminator see TS GSM 04.07 and GSM 04.80
References DLGLOBAL, gsm48_hdr_pdisc(), GSM48_PDISC_NC_SS, hdr, len, LOGL_ERROR, LOGP, parse_ss(), and gsm48_hdr::proto_discr.
int gsm0480_decode_ussd_request | ( | const struct gsm48_hdr * | hdr, |
uint16_t | len, | ||
struct ussd_request * | req | ||
) |
References DLGLOBAL, gsm48_hdr_pdisc(), GSM48_PDISC_NC_SS, hdr, len, LOGL_ERROR, LOGP, parse_ss(), and gsm48_hdr::proto_discr.
int gsm0480_extract_ie_by_tag | ( | const struct gsm48_hdr * | hdr, |
uint16_t | msg_len, | ||
uint8_t ** | ie, | ||
uint16_t * | ie_len, | ||
uint8_t | ie_tag | ||
) |
Get pointer to the IE of a given type.
[in] | hdr | Pointer to the message starting from header |
[in] | msg_len | Length of the whole message + header |
[out] | ie | External pointer to be set |
[out] | ie_len | External IE length variable |
[in] | ie_tag | Tag value of the required IE |
This function iterates over existing IEs within a given message (depending on its type), and looks for the one with given ie_tag value. If the IE is found, the external pointer pointed by ie will be set to its value part (omitting TL), and ie_len will be set to the length. Otherwise, e.g. in case of parsing error, both ie and ie_len are set to NULL and 0 respectively.
References gsm48_hdr::data, GSM0480_IE_FACILITY, GSM0480_MTYPE_FACILITY, GSM0480_MTYPE_REGISTER, GSM0480_MTYPE_RELEASE_COMPLETE, gsm48_hdr_msg_type, gsm48_hdr_pdisc(), GSM48_PDISC_NC_SS, hdr, len, and msg_type.
Generate a Reject component (see section 3.6.1) and given error code (see section 3.6.7).
[in] | invoke_id | InvokeID of the request |
[in] | problem_tag | Problem code tag (table 3.13) |
[in] | problem_code | Problem code (table 3.14-3.17) |
Note: if InvokeID is not available, e.g. when message parsing failed, any incorrect vlue can be passed (0x00 > x > 0xff), so the universal NULL-tag (see table 3.6) will be used instead.
References ASN1_NULL_TYPE_TAG, GSM0480_COMPIDTAG_INVOKE_ID, GSM0480_CTYPE_REJECT, gsm0480_msgb_alloc_name(), len, msg, msgb_tlv1_push(), and msgb_tv_push().
Generate a ReturnError component (see section 3.6.1) and given error code (see section 3.6.6).
[in] | invoke_id | InvokeID of the request |
[in] | error_code | Error code (section 4.5) |
References GSM0480_COMPIDTAG_INVOKE_ID, GSM0480_CTYPE_RETURN_ERROR, gsm0480_msgb_alloc_name(), GSM_0480_ERROR_CODE_TAG, len, msg, and msgb_tlv1_push().
Generate a USSD ReturnResult component containing a string in default GSM alphabet.
[in] | invoke_id | InvokeID of the request to which we respond |
[in] | text | USSD text in ASCII; to be encoded as GSM 7-but alphabet |
References ASN1_OCTET_STRING_TAG, GSM0480_COMPIDTAG_INVOKE_ID, GSM0480_CTYPE_RETURN_RESULT, gsm0480_msgb_alloc_name(), GSM0480_OP_CODE_PROCESS_USS_REQ, GSM0480_OPERATION_CODE, GSM_0480_SEQUENCE_TAG, gsm_7bit_encode_n_ussd(), len, msg, and msgb_tlv1_push().
Referenced by gsm0480_create_ussd_resp().
int gsm0480_parse_facility_ie | ( | const uint8_t * | facility_ie, |
uint16_t | length, | ||
struct ss_request * | req | ||
) |
Parse the components of a given Facility IE.
[in] | facility_ie | The Facility IE |
[in] | length | The length of Facility IE |
[out] | req | Abstract representation of SS message |
The internal functions are using inverted return codes, where '0' means error/failure. While a common approach is to return negative errno in case of any failure, and '0' if all is ok.
References DLGLOBAL, GSM0480_CTYPE_INVOKE, GSM0480_CTYPE_REJECT, GSM0480_CTYPE_RETURN_ERROR, GSM0480_CTYPE_RETURN_RESULT, len, length, LOGL_ERROR, LOGP, parse_ss_invoke(), and parse_ss_return_result().
Referenced by parse_ss_facility(), and parse_ss_info_elements().
References GSM0480_IE_FACILITY, and msg.
Referenced by gsm0480_create_ussd_notify().
References GSM0480_COMPIDTAG_INVOKE_ID, GSM0480_CTYPE_INVOKE, GSM0480_OPERATION_CODE, link_id, msg, and msgb_tlv1_push().
Referenced by gsm0480_create_ussd_notify().
|
static |
References ASN1_IA5_STRING_TAG, DLGLOBAL, GSM0480_USSD_OCTET_STRING_LEN, len, length, LOGL_ERROR, and LOGP.
Referenced by parse_ss_invoke(), and parse_ss_return_result().
|
static |
According to GSM 04.08, 4.4.2 "ASN.1 data types": the USSD-DataCodingScheme shall indicate use of the default alphabet using the 0x0F value.
References ASN1_OCTET_STRING_TAG, dcs, DLGLOBAL, GSM0480_USSD_OCTET_STRING_LEN, GSM_0480_SEQUENCE_TAG, gsm_7bit_decode_n_ussd(), len, length, LOGL_ERROR, and LOGP.
Referenced by parse_ss_invoke(), and parse_ss_return_result().
GSM 04.80 Section 2.5 'Release complete' Table 2.5 payload is optional for 'RELEASE COMPLETE' message
Indicates that there is no decoded message. To be overwriten by the message otherwise.
References gsm48_hdr::data, DLGLOBAL, GSM0480_MTYPE_FACILITY, GSM0480_MTYPE_REGISTER, GSM0480_MTYPE_RELEASE_COMPLETE, hdr, len, LOGL_ERROR, LOGP, msg_type, gsm48_hdr::msg_type, parse_ss_facility(), and parse_ss_info_elements().
Referenced by gsm0480_decode_ss_request(), and gsm0480_decode_ussd_request().
|
static |
References gsm0480_parse_facility_ie(), and len.
Referenced by parse_ss().
|
static |
References ASN1_OCTET_STRING_TAG, GSM_0480_SEQUENCE_TAG, len, and length.
Referenced by parse_ss_invoke().
|
static |
References DLGLOBAL, GSM0480_IE_FACILITY, GSM0480_IE_SS_VERSION, gsm0480_parse_facility_ie(), GSM48_IE_CAUSE, iei, len, LOGL_ERROR, LOGP, and parse_ss_info_elements().
Referenced by parse_ss(), and parse_ss_info_elements().
|
static |
References DLGLOBAL, GSM0480_COMPIDTAG_INVOKE_ID, GSM0480_COMPIDTAG_LINKED_ID, GSM0480_OP_CODE_ACTIVATE_SS, GSM0480_OP_CODE_DEACTIVATE_SS, GSM0480_OP_CODE_INTERROGATE_SS, GSM0480_OP_CODE_PROCESS_USS_DATA, GSM0480_OP_CODE_PROCESS_USS_REQ, GSM0480_OP_CODE_USS_NOTIFY, GSM0480_OP_CODE_USS_REQUEST, GSM0480_OPERATION_CODE, len, length, LOGL_ERROR, LOGP, parse_process_uss_data(), parse_process_uss_req(), and parse_ss_for_bs_req().
Referenced by gsm0480_parse_facility_ie().
|
static |
References DLGLOBAL, GSM0480_COMPIDTAG_INVOKE_ID, GSM0480_OP_CODE_PROCESS_USS_DATA, GSM0480_OP_CODE_PROCESS_USS_REQ, GSM0480_OP_CODE_USS_NOTIFY, GSM0480_OP_CODE_USS_REQUEST, GSM_0480_SEQUENCE_TAG, len, length, LOGL_ERROR, LOGP, parse_process_uss_data(), and parse_process_uss_req().
Referenced by gsm0480_parse_facility_ie().
const struct value_string gsm0480_comp_type_names[] |
Referenced by gsm0480_comp_type_name().
const struct value_string gsm0480_op_code_names[] |
Referenced by gsm0480_op_code_name().