summaryrefslogtreecommitdiffstats
path: root/tests/ussd
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2018-06-11 04:58:53 +0700
committerVadim Yanitskiy <axilirator@gmail.com>2018-06-11 23:50:00 +0700
commit5a09f75c1e7f66869da4a17c4cc417d367687b72 (patch)
tree22d58263d546d18c60f6c03f3ed36f4cc41f735b /tests/ussd
parent52e44121dbb6ba278b0fc44a05dc23330457b08e (diff)
gsm/gsm0480: refactor and expose gsm0480_parse_facility_ie()
This function can be used when there is only a part of GSM 04.80 message available - Facility IE, e.g. when a message is carried over GSUP/MAP. Let's expose it. Refactoring includes the following: - adding the 'gsm0480_' prefix; - correcting inverted return value; - cosmetic code style changes. Change-Id: I623c39ffbe6cdee65eade8435a2faa04d0da193e
Diffstat (limited to 'tests/ussd')
-rw-r--r--tests/ussd/ussd_test.c40
-rw-r--r--tests/ussd/ussd_test.ok8
2 files changed, 48 insertions, 0 deletions
diff --git a/tests/ussd/ussd_test.c b/tests/ussd/ussd_test.c
index 23fd7393..80250711 100644
--- a/tests/ussd/ussd_test.c
+++ b/tests/ussd/ussd_test.c
@@ -188,6 +188,43 @@ static void test_extract_ie_by_tag(void)
printf("\n");
}
+static void test_parse_facility_ie(void)
+{
+ struct ss_request req;
+ uint16_t ie_len;
+ uint8_t *ie;
+ int rc;
+
+ printf("[i] Testing gsm0480_parse_facility_ie()\n");
+
+ /* Extract Facility IE from FACILITY message */
+ rc = gsm0480_extract_ie_by_tag((struct gsm48_hdr *) ussd_facility,
+ sizeof(ussd_facility), &ie, &ie_len, GSM0480_IE_FACILITY);
+ OSMO_ASSERT(rc == 0);
+ OSMO_ASSERT(ie != NULL && ie_len > 0);
+ printf("[?] FACILITY message with Facility IE "
+ "(len=%u): %s\n", ie_len, osmo_hexdump(ie, ie_len));
+
+ /* Attempt to decode */
+ memset(&req, 0x00, sizeof(req));
+ rc = gsm0480_parse_facility_ie(ie, ie_len, &req);
+ OSMO_ASSERT(rc == 0);
+
+ /* Verify expected vs decoded data */
+ printf("[?] InvokeID: expected 0x%02x, decoded 0x%02x\n",
+ 0x01, req.invoke_id);
+ printf("[?] Operation code: expected 0x%02x, decoded 0x%02x\n",
+ 0x3c, req.opcode);
+ printf("[?] Data Coding Scheme: expected 0x%02x, decoded 0x%02x\n",
+ 0x0f, req.ussd_data_dcs);
+ printf("[?] Data length: expected 0x%02x, decoded 0x%02x\n",
+ 0x01, req.ussd_data_len);
+ printf("[?] Data: expected %s, decoded %s\n", "32",
+ osmo_hexdump_nospc(req.ussd_data, req.ussd_data_len));
+
+ printf("\n");
+}
+
int main(int argc, char **argv)
{
struct ss_request req;
@@ -201,6 +238,9 @@ int main(int argc, char **argv)
/* Test gsm0480_extract_ie_by_tag() */
test_extract_ie_by_tag();
+ /* Test gsm0480_parse_facility_ie() */
+ test_parse_facility_ie();
+
memset(&req, 0, sizeof(req));
gsm0480_decode_ss_request((struct gsm48_hdr *) ussd_request,
sizeof(ussd_request), &req);
diff --git a/tests/ussd/ussd_test.ok b/tests/ussd/ussd_test.ok
index 8fa4348f..1137080b 100644
--- a/tests/ussd/ussd_test.ok
+++ b/tests/ussd/ussd_test.ok
@@ -4,6 +4,14 @@
[?] FACILITY message with Facility IE (len=18): a2 10 02 01 01 30 0b 02 01 3c 30 06 04 01 0f 04 01 32
[?] RELEASE COMPLETE message with Facility IE (len=8): a3 06 02 01 05 02 01 24
+[i] Testing gsm0480_parse_facility_ie()
+[?] FACILITY message with Facility IE (len=18): a2 10 02 01 01 30 0b 02 01 3c 30 06 04 01 0f 04 01 32
+[?] InvokeID: expected 0x01, decoded 0x01
+[?] Operation code: expected 0x3c, decoded 0x3c
+[?] Data Coding Scheme: expected 0x0f, decoded 0x0f
+[?] Data length: expected 0x01, decoded 0x01
+[?] Data: expected 32, decoded 32
+
Tested if it still works. Text was: **321#
interrogateSS CFU text..'' code 33
Testing parsing a USSD request and truncated versions