Neels Hofmeyr | 17518fe | 2017-06-20 04:35:06 +0200 | [diff] [blame] | 1 | /*! \file gsm0480.h */ |
| 2 | |
Sylvain Munaut | 12ba778 | 2014-06-16 10:13:40 +0200 | [diff] [blame] | 3 | #pragma once |
Holger Hans Peter Freyther | 55aea50 | 2010-09-30 18:30:41 +0800 | [diff] [blame] | 4 | |
Tobias Engel | 419684e | 2012-03-08 13:31:52 +0100 | [diff] [blame] | 5 | #include <osmocom/core/defs.h> |
Pablo Neira Ayuso | 8341934 | 2011-03-22 16:36:13 +0100 | [diff] [blame] | 6 | #include <osmocom/core/msgb.h> |
| 7 | #include <osmocom/gsm/protocol/gsm_04_08.h> |
| 8 | #include <osmocom/gsm/protocol/gsm_04_80.h> |
Holger Hans Peter Freyther | 55aea50 | 2010-09-30 18:30:41 +0800 | [diff] [blame] | 9 | |
Vadim Yanitskiy | fa6c2b9 | 2017-08-09 17:38:39 +0600 | [diff] [blame] | 10 | /** |
| 11 | * According to the GSM 04.80 (version 5.0.0) specification Annex A |
| 12 | * "Expanded ASN.1 Module "SS-Protocol", the maximum size of a USSD |
| 13 | * OCTET STRING field is 160 bytes. |
| 14 | */ |
| 15 | #define GSM0480_USSD_OCTET_STRING_LEN 160 |
| 16 | |
| 17 | /** |
| 18 | * Thus according to ETSI TS 123 038 (version 10.0.0) specification |
| 19 | * 6.1.2.3 "USSD packing of 7 bit characters", in 160 octets, it's |
| 20 | * possible to pack (160 * 8) / 7 = 182.8, that is 182 characters. |
| 21 | * The remaining 6 bits are set to zero. |
| 22 | */ |
| 23 | #define GSM0480_USSD_7BIT_STRING_LEN 182 |
| 24 | |
| 25 | /** |
| 26 | * DEPRECATED: this definition doesn't follow any specification, |
| 27 | * so we only keep it for compatibility reasons. It's strongly |
| 28 | * recommended to use correct definitions above. |
| 29 | */ |
| 30 | #define MAX_LEN_USSD_STRING 31 |
Holger Hans Peter Freyther | 00cb570 | 2010-10-09 01:47:15 +0800 | [diff] [blame] | 31 | |
Tobias Engel | 419684e | 2012-03-08 13:31:52 +0100 | [diff] [blame] | 32 | /* deprecated */ |
Holger Hans Peter Freyther | 00cb570 | 2010-10-09 01:47:15 +0800 | [diff] [blame] | 33 | struct ussd_request { |
Harald Welte | 1f87d75 | 2012-09-07 12:07:10 +0200 | [diff] [blame] | 34 | char text[MAX_LEN_USSD_STRING + 1]; |
Holger Hans Peter Freyther | 00cb570 | 2010-10-09 01:47:15 +0800 | [diff] [blame] | 35 | uint8_t transaction_id; |
| 36 | uint8_t invoke_id; |
| 37 | }; |
| 38 | |
Tobias Engel | 419684e | 2012-03-08 13:31:52 +0100 | [diff] [blame] | 39 | /* deprecated */ |
Holger Hans Peter Freyther | daa653f | 2010-10-11 07:56:06 +0200 | [diff] [blame] | 40 | int gsm0480_decode_ussd_request(const struct gsm48_hdr *hdr, uint16_t len, |
Tobias Engel | 419684e | 2012-03-08 13:31:52 +0100 | [diff] [blame] | 41 | struct ussd_request *request) OSMO_DEPRECATED("Use gsm0480_decode_ss_request() instead"); |
| 42 | |
| 43 | struct ss_request { |
| 44 | uint8_t opcode; |
| 45 | uint8_t ss_code; |
Vadim Yanitskiy | fa6c2b9 | 2017-08-09 17:38:39 +0600 | [diff] [blame] | 46 | uint8_t ussd_text[GSM0480_USSD_OCTET_STRING_LEN]; |
Tobias Engel | 419684e | 2012-03-08 13:31:52 +0100 | [diff] [blame] | 47 | uint8_t transaction_id; |
| 48 | uint8_t invoke_id; |
| 49 | }; |
| 50 | |
| 51 | int gsm0480_decode_ss_request(const struct gsm48_hdr *hdr, uint16_t len, |
| 52 | struct ss_request *request); |
Holger Hans Peter Freyther | 00cb570 | 2010-10-09 01:47:15 +0800 | [diff] [blame] | 53 | |
Holger Hans Peter Freyther | c64970e | 2010-10-18 16:56:43 +0200 | [diff] [blame] | 54 | struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const char *text); |
Holger Hans Peter Freyther | 55aea50 | 2010-09-30 18:30:41 +0800 | [diff] [blame] | 55 | struct msgb *gsm0480_create_unstructuredSS_Notify(int alertPattern, const char *text); |
| 56 | struct msgb *gsm0480_create_notifySS(const char *text); |
Neels Hofmeyr | bc1d758 | 2016-11-26 15:21:15 +0100 | [diff] [blame] | 57 | struct msgb *gsm0480_create_ussd_notify(int level, const char *text); |
| 58 | struct msgb *gsm0480_create_ussd_release_complete(void); |
Holger Hans Peter Freyther | 55aea50 | 2010-09-30 18:30:41 +0800 | [diff] [blame] | 59 | |
| 60 | int gsm0480_wrap_invoke(struct msgb *msg, int op, int link_id); |
| 61 | int gsm0480_wrap_facility(struct msgb *msg); |
Neels Hofmeyr | 25774b9 | 2016-11-26 15:21:05 +0100 | [diff] [blame] | 62 | |
| 63 | struct gsm48_hdr *gsm0480_l3hdr_push(struct msgb *msg, uint8_t proto_discr, |
| 64 | uint8_t msg_type); |