aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/include/openbsc/gsm_04_80.h
blob: c240bbe94558823b37dfdcd8ab89230c75b7c2b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#ifndef _GSM_04_80_H
#define _GSM_04_80_H

/* GSM TS 04.80  definitions (Supplementary Services Specification, Formats and Coding) */

/* Section 3.4 */
#define GSM0480_MTYPE_RELEASE_COMPLETE	0x2A
#define GSM0480_MTYPE_FACILITY			0x3A
#define GSM0480_MTYPE_REGISTER			0x3B

/* Section 3.5 */
#define GSM0480_IE_FACILITY			0x1C
#define GSM0480_IE_SS_VERSION			0x7F

/* Section 3.6.2 */
#define GSM0480_CTYPE_INVOKE			0xA1
#define GSM0480_CTYPE_RETURN_RESULT		0xA2
#define GSM0480_CTYPE_RETURN_ERROR		0xA3
#define GSM0480_CTYPE_REJECT			0xA4

/* Section 3.6.3 */
#define GSM0480_COMPIDTAG_INVOKE_ID		0x02
#define GSM0480_COMPIDTAG_LINKED_ID		0x80

/* Section 3.6.4 */
#define GSM0480_OPERATION_CODE			0x02

/* Section 3.6.5 */
#define GSM_0480_SEQUENCE_TAG			0x30
#define GSM_0480_SET_TAG			0x31

/* Section 3.6.6 */
#define GSM_0480_ERROR_CODE_TAG			0x02

/* Section 3.6.7 */
/* Table 3.13 */
#define GSM_0480_PROBLEM_CODE_TAG_GENERAL	0x80
#define GSM_0480_PROBLEM_CODE_TAG_INVOKE	0x81
#define GSM_0480_PROBLEM_CODE_TAG_RETURN_RESULT	0x82
#define GSM_0480_PROBLEM_CODE_TAG_RETURN_ERROR	0x83

/* Table 3.14 */
#define GSM_0480_GEN_PROB_CODE_UNRECOGNISED	0x00
#define GSM_0480_GEN_PROB_CODE_MISTYPED		0x01
#define GSM_0480_GEN_PROB_CODE_BAD_STRUCTURE	0x02

/* Table 3.15 */
#define GSM_0480_INVOKE_PROB_CODE_DUPLICATE_INVOKE_ID		0x00
#define GSM_0480_INVOKE_PROB_CODE_UNRECOGNISED_OPERATION	0x01
#define GSM_0480_INVOKE_PROB_CODE_MISTYPED_PARAMETER		0x02
#define GSM_0480_INVOKE_PROB_CODE_RESOURCE_LIMITATION		0x03
#define GSM_0480_INVOKE_PROB_CODE_INITIATING_RELEASE		0x04
#define GSM_0480_INVOKE_PROB_CODE_UNRECOGNISED_LINKED_ID	0x05
#define GSM_0480_INVOKE_PROB_CODE_UNEXPECTED_LINKED_RESPONSE	0x06
#define GSM_0480_INVOKE_PROB_CODE_UNEXPECTED_LINKED_OPERATION	0x07

/* Table 3.16 */
#define GSM_0480_RESULT_PROB_CODE_UNRECOGNISED_INVOKE_ID	0x00
#define GSM_0480_RESULT_PROB_CODE_RETURN_RESULT_UNEXPECTED	0x01
#define GSM_0480_RESULT_PROB_CODE_MISTYPED_PARAMETER		0x02

/* Table 3.17 */
#define GSM_0480_ERROR_PROB_CODE_UNRECOGNISED_INVOKE_ID		0x00
#define GSM_0480_ERROR_PROB_CODE_RETURN_ERROR_UNEXPECTED	0x01
#define GSM_0480_ERROR_PROB_CODE_UNRECOGNISED_ERROR		0x02
#define GSM_0480_ERROR_PROB_CODE_UNEXPECTED_ERROR		0x03
#define GSM_0480_ERROR_PROB_CODE_MISTYPED_PARAMETER		0x04

/* Section 4.5 */
#define GSM0480_OP_CODE_REGISTER_SS		0x0A
#define GSM0480_OP_CODE_ERASE_SS		0x0B
#define GSM0480_OP_CODE_ACTIVATE_SS		0x0C
#define GSM0480_OP_CODE_DEACTIVATE_SS		0x0D
#define GSM0480_OP_CODE_INTERROGATE_SS		0x0E
#define GSM0480_OP_CODE_NOTIFY_SS		0x10
#define GSM0480_OP_CODE_REGISTER_PASSWORD	0x11
#define GSM0480_OP_CODE_GET_PASSWORD		0x12
#define GSM0480_OP_CODE_PROCESS_USS_DATA	0x13
#define GSM0480_OP_CODE_FORWARD_CHECK_SS_IND	0x26
#define GSM0480_OP_CODE_PROCESS_USS_REQ		0x3B
#define GSM0480_OP_CODE_USS_REQUEST		0x3C
#define GSM0480_OP_CODE_USS_NOTIFY		0x3D
#define GSM0480_OP_CODE_FORWARD_CUG_INFO	0x78
#define GSM0480_OP_CODE_SPLIT_MPTY		0x79
#define GSM0480_OP_CODE_RETRIEVE_MPTY		0x7A
#define GSM0480_OP_CODE_HOLD_MPTY		0x7B
#define GSM0480_OP_CODE_BUILD_MPTY		0x7C
#define GSM0480_OP_CODE_FORWARD_CHARGE_ADVICE	0x7D

#define GSM0480_ERR_CODE_UNKNOWN_SUBSCRIBER			0x01
#define GSM0480_ERR_CODE_ILLEGAL_SUBSCRIBER			0x09
#define GSM0480_ERR_CODE_BEARER_SERVICE_NOT_PROVISIONED		0x0A
#define GSM0480_ERR_CODE_TELESERVICE_NOT_PROVISIONED		0x0B
#define GSM0480_ERR_CODE_ILLEGAL_EQUIPMENT			0x0C
#define GSM0480_ERR_CODE_CALL_BARRED				0x0D
#define GSM0480_ERR_CODE_ILLEGAL_SS_OPERATION			0x10
#define GSM0480_ERR_CODE_SS_ERROR_STATUS			0x11
#define GSM0480_ERR_CODE_SS_NOT_AVAILABLE			0x12
#define GSM0480_ERR_CODE_SS_SUBSCRIPTION_VIOLATION		0x13
#define GSM0480_ERR_CODE_SS_INCOMPATIBILITY			0x14
#define GSM0480_ERR_CODE_FACILITY_NOT_SUPPORTED			0x15
#define GSM0480_ERR_CODE_ABSENT_SUBSCRIBER			0x1B
#define GSM0480_ERR_CODE_SYSTEM_FAILURE				0x22
#define GSM0480_ERR_CODE_DATA_MISSING				0x23
#define GSM0480_ERR_CODE_UNEXPECTED_DATA_VALUE			0x24
#define GSM0480_ERR_CODE_PW_REGISTRATION_FAILURE		0x25
#define GSM0480_ERR_CODE_NEGATIVE_PW_CHECK			0x26
#define GSM0480_ERR_CODE_NUM_PW_ATTEMPTS_VIOLATION		0x2B
#define GSM0480_ERR_CODE_UNKNOWN_ALPHABET			0x47
#define GSM0480_ERR_CODE_USSD_BUSY				0x48
#define GSM0480_ERR_CODE_MAX_MPTY_PARTICIPANTS			0x7E
#define GSM0480_ERR_CODE_RESOURCES_NOT_AVAILABLE		0x7F

/* ASN.1 type-tags */
#define ASN1_BOOLEAN_TAG		0x01
#define ASN1_INTEGER_TAG		0x02
#define ASN1_BIT_STRING_TAG		0x03
#define ASN1_OCTET_STRING_TAG		0x04
#define ASN1_NULL_TYPE_TAG		0x05
#define ASN1_OBJECT_ID_TAG		0x06
#define ASN1_UTF8_STRING_TAG		0x0C
#define ASN1_PRINTABLE_STRING_TAG	0x13
#define ASN1_IA5_STRING_TAG		0x16
#define ASN1_UNICODE_STRING_TAG		0x1E

#include <openbsc/msgb.h>

#define MAX_LEN_USSD_STRING	31

struct ussd_request {
			char text[MAX_LEN_USSD_STRING + 1];
			u_int8_t transaction_id;
			u_int8_t invoke_id;
};

int gsm0480_decode_ussd_request(const struct msgb *msg, 
				struct ussd_request *request); 
int gsm0480_send_ussd_response(const struct msgb *in_msg, const char* response_text, 
						const struct ussd_request *req);
int gsm0480_send_ussd_reject(const struct msgb *msg, 
				const struct ussd_request *request);

#endif