libosmogsm 1.10.0.58-6cd7a
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>
Functions | |
int | gsm0480_wrap_invoke (struct msgb *msg, int op, int link_id) |
int | gsm0480_wrap_facility (struct msgb *msg) |
struct msgb * | gsm0480_create_unstructuredSS_Notify (int alertPattern, const char *text) |
struct msgb * | gsm0480_create_notifySS (const char *text) |
static int | parse_ss (const struct gsm48_hdr *hdr, uint16_t len, struct ss_request *req) |
static int | parse_ss_facility (const uint8_t *ss_facility, uint16_t len, struct ss_request *req) |
static int | parse_ss_info_elements (const uint8_t *ss_ie, uint16_t len, struct ss_request *req) |
static int | parse_ss_invoke (const uint8_t *invoke_data, uint16_t length, struct ss_request *req) |
static int | parse_ss_return_result (const uint8_t *rr_data, uint16_t length, struct ss_request *req) |
static int | parse_process_uss_data (const uint8_t *uss_req_data, uint16_t length, struct ss_request *req) |
static int | parse_process_uss_req (const uint8_t *uss_req_data, uint16_t length, struct ss_request *req) |
static int | parse_ss_for_bs_req (const uint8_t *ss_req_data, uint16_t length, struct ss_request *req) |
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. More... | |
int | gsm0480_decode_ussd_request (const struct gsm48_hdr *hdr, uint16_t len, struct ussd_request *req) |
int | gsm0480_decode_ss_request (const struct gsm48_hdr *hdr, uint16_t len, struct ss_request *req) |
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. More... | |
struct msgb * | gsm0480_msgb_alloc_name (const char *name) |
struct msgb * | gsm0480_gen_ussd_resp_7bit (uint8_t invoke_id, const char *text) |
Generate a USSD ReturnResult component containing a string in default GSM alphabet. More... | |
struct msgb * | gsm0480_create_ussd_resp (uint8_t invoke_id, uint8_t trans_id, const char *text) |
Legacy helper: Generate USSD response including FACILITY IE + L3 header. More... | |
struct msgb * | gsm0480_gen_return_error (uint8_t invoke_id, uint8_t error_code) |
Generate a ReturnError component (see section 3.6.1) and given error code (see section 3.6.6). More... | |
struct msgb * | gsm0480_gen_reject (int invoke_id, uint8_t problem_tag, uint8_t problem_code) |
Generate a Reject component (see section 3.6.1) and given error code (see section 3.6.7). More... | |
struct msgb * | gsm0480_create_ussd_notify (int level, const char *text) |
struct msgb * | gsm0480_create_ussd_release_complete (void) |
Deprecated, use gsm0480_create_release_complete() instead. More... | |
struct msgb * | gsm0480_create_release_complete (uint8_t trans_id) |
Create a GSM 04.80 Release complete (see 2.5) message, prefixed by GSM 04.08 L3 header with a given transaction ID. More... | |
Variables | |
const struct value_string | gsm0480_comp_type_names [] |
const struct value_string | gsm0480_op_code_names [] |
Format functions for GSM 04.80.
struct msgb * gsm0480_create_notifySS | ( | const char * | text | ) |
References data, gsm0480_msgb_alloc_name(), GSM_0480_SEQUENCE_TAG, gsm_7bit_encode_n_ussd(), len, msg, msgb_put(), msgb_put_u8(), and msgb_tailroom().
struct msgb * gsm0480_create_release_complete | ( | uint8_t | trans_id | ) |
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.
struct msgb * gsm0480_create_unstructuredSS_Notify | ( | int | alertPattern, |
const char * | text | ||
) |
References ASN1_OCTET_STRING_TAG, data, gsm0480_msgb_alloc_name(), GSM_0480_SEQUENCE_TAG, gsm_7bit_encode_n_ussd(), len, msg, msgb_put(), msgb_put_u8(), and msgb_tailroom().
Referenced by gsm0480_create_ussd_notify().
struct msgb * gsm0480_create_ussd_notify | ( | int | level, |
const char * | text | ||
) |
struct msgb * gsm0480_create_ussd_release_complete | ( | void | ) |
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.
struct msgb * gsm0480_create_ussd_resp | ( | uint8_t | invoke_id, |
uint8_t | trans_id, | ||
const char * | text | ||
) |
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, msg, and msgb_push_tl().
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(), gsm48_hdr::proto_discr, and ss_request::transaction_id.
int gsm0480_decode_ussd_request | ( | const struct gsm48_hdr * | hdr, |
uint16_t | len, | ||
struct ussd_request * | req | ||
) |
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.
struct msgb * gsm0480_gen_reject | ( | int | invoke_id, |
uint8_t | problem_tag, | ||
uint8_t | problem_code | ||
) |
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(), msg, msgb_push_tl(), msgb_tlv1_push(), and msgb_tv_push().
struct msgb * gsm0480_gen_return_error | ( | uint8_t | invoke_id, |
uint8_t | error_code | ||
) |
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, msg, msgb_push_tl(), and msgb_tlv1_push().
struct msgb * gsm0480_gen_ussd_resp_7bit | ( | uint8_t | invoke_id, |
const char * | text | ||
) |
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(), msg, msgb_push_tl(), msgb_put(), msgb_tailroom(), and msgb_tlv1_push().
Referenced by gsm0480_create_ussd_resp().
struct msgb * gsm0480_msgb_alloc_name | ( | const char * | name | ) |
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, length, LOGL_ERROR, LOGP, parse_ss_invoke(), and parse_ss_return_result().
Referenced by parse_ss_facility(), and parse_ss_info_elements().
int gsm0480_wrap_facility | ( | struct msgb * | msg | ) |
References GSM0480_IE_FACILITY, msg, and msgb_push_tl().
Referenced by gsm0480_create_ussd_notify().
int gsm0480_wrap_invoke | ( | struct msgb * | msg, |
int | op, | ||
int | link_id | ||
) |
References GSM0480_COMPIDTAG_INVOKE_ID, GSM0480_CTYPE_INVOKE, GSM0480_OPERATION_CODE, link_id, msg, msgb_push_tl(), and msgb_tlv1_push().
Referenced by gsm0480_create_ussd_notify().
|
static |
References ASN1_IA5_STRING_TAG, DLGLOBAL, GSM0480_USSD_OCTET_STRING_LEN, length, LOGL_ERROR, LOGP, ss_request::ussd_data, ss_request::ussd_data_dcs, ss_request::ussd_data_len, and ss_request::ussd_text.
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(), length, LOGL_ERROR, LOGP, ss_request::ussd_data, ss_request::ussd_data_dcs, ss_request::ussd_data_len, and ss_request::ussd_text.
Referenced by parse_ss_invoke(), and parse_ss_return_result().
|
static |
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(), parse_ss_info_elements(), and ss_request::ussd_text.
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, length, and ss_request::ss_code.
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, ss_request::invoke_id, length, LOGL_ERROR, LOGP, ss_request::opcode, 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, ss_request::invoke_id, length, LOGL_ERROR, LOGP, ss_request::opcode, 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().