From 36c7b33ccc66eee29efa98120e00952532c8e122 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Sat, 31 Mar 2018 05:23:09 +0700 Subject: GSUP: introduce new messages for SS/USSD payloads In order to be able to transfer SS/USSD messages via GSUP, this change introduces the following new message types: - OSMO_GSUP_MSGT_PROC_SS_*, and the following new IE: - OSMO_GSUP_SS_INFO_IE which represents an ASN.1 encoded MAP payload coming to/from the mobile station 'as is', without any transcoding. Change-Id: Ie17a78043a35fffbdd59e80fd2b2da39cce5e532 Related: OS#1597 --- tests/gsup/gsup_test.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- tests/gsup/gsup_test.err | 10 ++++++++++ tests/gsup/gsup_test.ok | 4 ++++ 3 files changed, 60 insertions(+), 1 deletion(-) (limited to 'tests/gsup') diff --git a/tests/gsup/gsup_test.c b/tests/gsup/gsup_test.c index 6ead7d28..9712d77b 100644 --- a/tests/gsup/gsup_test.c +++ b/tests/gsup/gsup_test.c @@ -180,6 +180,43 @@ static void test_gsup_messages_dec_enc(void) 0x31, 0x01, 0x01, }; + static const uint8_t send_ussd_req[] = { + 0x20, /* OSMO_GSUP_MSGT_PROC_SS_REQUEST */ + TEST_IMSI_IE, + + /* Session ID and state */ + 0x30, 0x04, 0xde, 0xad, 0xbe, 0xef, + 0x31, 0x01, 0x01, + + /* SS/USSD information IE */ + 0x35, 0x14, + /* ASN.1 encoded MAP payload */ + 0xa1, 0x12, + 0x02, 0x01, /* Component: invoke */ + 0x01, /* invokeID = 1 */ + /* opCode: processUnstructuredSS-Request */ + 0x02, 0x01, 0x3b, 0x30, 0x0a, 0x04, 0x01, 0x0f, + 0x04, 0x05, 0xaa, 0x18, 0x0c, 0x36, 0x02, + }; + + static const uint8_t send_ussd_res[] = { + 0x22, /* OSMO_GSUP_MSGT_PROC_SS_RESULT */ + TEST_IMSI_IE, + + /* Session ID and state */ + 0x30, 0x04, 0xde, 0xad, 0xbe, 0xef, + 0x31, 0x01, 0x03, + + /* SS/USSD information IE */ + 0x35, 0x08, + /* ASN.1 encoded MAP payload */ + 0xa3, 0x06, + 0x02, 0x01, /* Component: returnError */ + 0x01, /* invokeID = 1 */ + /* localValue: unknownAlphabet */ + 0x02, 0x01, 0x47, + }; + static const struct test { char *name; const uint8_t *data; @@ -215,6 +252,10 @@ static void test_gsup_messages_dec_enc(void) send_auth_info_req_auts, sizeof(send_auth_info_req_auts)}, {"Dummy message with session IEs", dummy_session_ies, sizeof(dummy_session_ies)}, + {"SS/USSD processUnstructuredSS-Request / Invoke", + send_ussd_req, sizeof(send_ussd_req)}, + {"SS/USSD processUnstructuredSS-Request / ReturnResult", + send_ussd_res, sizeof(send_ussd_res)}, }; printf("Test GSUP message decoding/encoding\n"); @@ -278,7 +319,11 @@ static void test_gsup_messages_dec_enc(void) osmo_hexdump(t->data + j, ie_end - j)); OSMO_ASSERT(j <= ie_end - 2); - OSMO_ASSERT(t->data[j+0] <= OSMO_GSUP_SESSION_STATE_IE); + /** + * FIXME: share the maximal IE value somehow + * in order to avoid manual updating of this + */ + OSMO_ASSERT(t->data[j+0] <= OSMO_GSUP_SS_INFO_IE); OSMO_ASSERT(t->data[j+1] <= ie_end - j - 2); ie_end = j; diff --git a/tests/gsup/gsup_test.err b/tests/gsup/gsup_test.err index 5c010e6c..ac71ac24 100644 --- a/tests/gsup/gsup_test.err +++ b/tests/gsup/gsup_test.err @@ -43,6 +43,12 @@ generated message: 2b 01 08 21 43 65 87 09 21 43 f5 30 04 de ad be ef 31 01 01 original message: 2b 01 08 21 43 65 87 09 21 43 f5 30 04 de ad be ef 31 01 01 IMSI: 123456789012345 + generated message: 20 01 08 21 43 65 87 09 21 43 f5 30 04 de ad be ef 31 01 01 35 14 a1 12 02 01 01 02 01 3b 30 0a 04 01 0f 04 05 aa 18 0c 36 02 + original message: 20 01 08 21 43 65 87 09 21 43 f5 30 04 de ad be ef 31 01 01 35 14 a1 12 02 01 01 02 01 3b 30 0a 04 01 0f 04 05 aa 18 0c 36 02 + IMSI: 123456789012345 + generated message: 22 01 08 21 43 65 87 09 21 43 f5 30 04 de ad be ef 31 01 03 35 08 a3 06 02 01 01 02 01 47 + original message: 22 01 08 21 43 65 87 09 21 43 f5 30 04 de ad be ef 31 01 03 35 08 a3 06 02 01 01 02 01 47 + IMSI: 123456789012345 message 0: tested 11 truncations, 11 parse failures message 1: tested 14 truncations, 13 parse failures message 2: tested 83 truncations, 81 parse failures @@ -58,6 +64,8 @@ message 12: tested 211 truncations, 209 parse failures message 13: tested 45 truncations, 43 parse failures message 14: tested 20 truncations, 18 parse failures + message 15: tested 42 truncations, 39 parse failures + message 16: tested 30 truncations, 27 parse failures DLGSUP Stopping DLGSUP logging message 0: tested 2816 modifications, 510 parse failures message 1: tested 3584 modifications, 768 parse failures @@ -74,3 +82,5 @@ DLGSUP Stopping DLGSUP logging message 12: tested 54016 modifications, 4622 parse failures message 13: tested 11520 modifications, 1026 parse failures message 14: tested 5120 modifications, 1026 parse failures + message 15: tested 10752 modifications, 1256 parse failures + message 16: tested 7680 modifications, 1265 parse failures diff --git a/tests/gsup/gsup_test.ok b/tests/gsup/gsup_test.ok index 1f599025..d63dd2d6 100644 --- a/tests/gsup/gsup_test.ok +++ b/tests/gsup/gsup_test.ok @@ -29,4 +29,8 @@ Test GSUP message decoding/encoding Send Authentication Info Request with AUTS and RAND (UMTS) OK Testing Dummy message with session IEs Dummy message with session IEs OK + Testing SS/USSD processUnstructuredSS-Request / Invoke + SS/USSD processUnstructuredSS-Request / Invoke OK + Testing SS/USSD processUnstructuredSS-Request / ReturnResult + SS/USSD processUnstructuredSS-Request / ReturnResult OK Done. -- cgit v1.2.3