libosmogsm
0.12.0
Osmocom GSM library
|
#include <osmocom/core/defs.h>
#include <osmocom/core/msgb.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/gsm/protocol/gsm_04_80.h>
Go to the source code of this file.
Data Structures | |
struct | ussd_request |
struct | ss_request |
This structure represents some meaningful parts of a decoded and/or to be encoded GSM 04.80 message. More... | |
Macros | |
#define | GSM0480_USSD_OCTET_STRING_LEN 160 |
According to the GSM 04.80 (version 5.0.0) specification Annex A "Expanded ASN.1 Module "SS-Protocol", the maximum size of a USSD OCTET STRING field is 160 bytes. More... | |
#define | GSM0480_USSD_7BIT_STRING_LEN 182 |
Thus according to ETSI TS 123 038 (version 10.0.0) specification 6.1.2.3 "USSD packing of 7 bit characters", in 160 octets, it's possible to pack (160 * 8) / 7 = 182.8, that is 182 characters. More... | |
#define | MAX_LEN_USSD_STRING 31 |
DEPRECATED: this definition doesn't follow any specification, so we only keep it for compatibility reasons. More... | |
Functions | |
static const char * | gsm0480_comp_type_name (uint8_t comp_type) |
static const char * | gsm0480_op_code_name (uint8_t op_code) |
int | gsm0480_decode_ussd_request (const struct gsm48_hdr *hdr, uint16_t len, struct ussd_request *request) OSMO_DEPRECATED("Use gsm0480_decode_ss_request() instead") |
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_parse_facility_ie (const uint8_t *facility_ie, uint16_t length, struct ss_request *req) |
Parse the components of a given Facility IE. More... | |
int | gsm0480_decode_ss_request (const struct gsm48_hdr *hdr, uint16_t len, struct ss_request *request) |
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) |
struct msgb * | gsm0480_create_notifySS (const char *text) |
struct msgb * | gsm0480_create_ussd_notify (int level, const char *text) |
struct msgb * | gsm0480_create_ussd_release_complete (void) |
int | gsm0480_wrap_invoke (struct msgb *msg, int op, int link_id) |
int | gsm0480_wrap_facility (struct msgb *msg) |
struct gsm48_hdr * | gsm0480_l3hdr_push (struct msgb *msg, uint8_t proto_discr, uint8_t msg_type) |
Variables | |
const struct value_string | gsm0480_comp_type_names [] |
const struct value_string | gsm0480_op_code_names [] |
#define GSM0480_USSD_7BIT_STRING_LEN 182 |
Thus according to ETSI TS 123 038 (version 10.0.0) specification 6.1.2.3 "USSD packing of 7 bit characters", in 160 octets, it's possible to pack (160 * 8) / 7 = 182.8, that is 182 characters.
The remaining 6 bits are set to zero.
#define GSM0480_USSD_OCTET_STRING_LEN 160 |
According to the GSM 04.80 (version 5.0.0) specification Annex A "Expanded ASN.1 Module "SS-Protocol", the maximum size of a USSD OCTET STRING field is 160 bytes.
Referenced by parse_process_uss_data(), and parse_process_uss_req().
#define MAX_LEN_USSD_STRING 31 |
DEPRECATED: this definition doesn't follow any specification, so we only keep it for compatibility reasons.
It's strongly recommended to use correct definitions above.
|
inlinestatic |
References gsm0480_comp_type_names, and gsm0480_op_code_names.
struct msgb* gsm0480_create_notifySS | ( | const char * | text | ) |
struct msgb* gsm0480_create_unstructuredSS_Notify | ( | int | alertPattern, |
const char * | text | ||
) |
References ASN1_OCTET_STRING_TAG, data, GSM_0480_SEQUENCE_TAG, gsm_7bit_encode_n_ussd(), and len.
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 | ) |
References gsm0480_l3hdr_push(), GSM0480_MTYPE_RELEASE_COMPLETE, and GSM48_PDISC_NC_SS.
struct msgb* gsm0480_create_ussd_resp | ( | uint8_t | invoke_id, |
uint8_t | trans_id, | ||
const char * | text | ||
) |
References ASN1_OCTET_STRING_TAG, GSM0480_COMPIDTAG_INVOKE_ID, GSM0480_CTYPE_RETURN_RESULT, GSM0480_IE_FACILITY, gsm0480_l3hdr_push(), GSM0480_MTYPE_RELEASE_COMPLETE, GSM0480_OP_CODE_PROCESS_USS_REQ, GSM0480_OPERATION_CODE, GSM48_PDISC_NC_SS, GSM_0480_SEQUENCE_TAG, gsm_7bit_encode_n_ussd(), msgb_push_TLV1(), and msgb_wrap_with_TL().
int gsm0480_decode_ss_request | ( | const struct gsm48_hdr * | hdr, |
uint16_t | len, | ||
struct ss_request * | request | ||
) |
Check Protocol Discriminator see TS GSM 04.07 and GSM 04.80
References gsm48_hdr_pdisc(), GSM48_PDISC_NC_SS, parse_ss(), pdisc, 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 * | request | ||
) |
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 GSM0480_IE_FACILITY, GSM0480_MTYPE_FACILITY, GSM0480_MTYPE_REGISTER, GSM0480_MTYPE_RELEASE_COMPLETE, gsm48_hdr_msg_type, gsm48_hdr_pdisc(), GSM48_PDISC_NC_SS, len, msg_type, and pdisc.
struct gsm48_hdr* gsm0480_l3hdr_push | ( | struct msgb * | msg, |
uint8_t | proto_discr, | ||
uint8_t | msg_type | ||
) |
References msg_type, gsm48_hdr::msg_type, proto_discr, and gsm48_hdr::proto_discr.
Referenced by gsm0480_create_ussd_notify(), gsm0480_create_ussd_release_complete(), gsm0480_create_ussd_resp(), and gsm411_push_cp_header().
|
inlinestatic |
References gsm0480_op_code_names.
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 GSM0480_CTYPE_INVOKE, GSM0480_CTYPE_REJECT, GSM0480_CTYPE_RETURN_ERROR, GSM0480_CTYPE_RETURN_RESULT, 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, and msgb_wrap_with_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, msgb_push_TLV1(), and msgb_wrap_with_TL().
Referenced by gsm0480_create_ussd_notify().
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_comp_type_name(), and gsm0480_op_code_name().