diff options
author | Sergey.Kostanbaev <Sergey.Kostanbaev@gmail.com> | 2016-02-09 17:33:17 +0300 |
---|---|---|
committer | Ivan Kluchnikov <kluchnikovi@gmail.com> | 2017-02-07 17:29:16 +0300 |
commit | ab7fc21b9e845892b5608caea34e6d7da1ec596a (patch) | |
tree | ba31a76e8ebda9cef763a0916cd1e2a1b5ebc285 /tests | |
parent | 3859958b438b40ed35642bf911276caaff0b99dc (diff) |
ss wip
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ussd/ussd_test.c | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/tests/ussd/ussd_test.c b/tests/ussd/ussd_test.c index 40b4317a..d10b3d18 100644 --- a/tests/ussd/ussd_test.c +++ b/tests/ussd/ussd_test.c @@ -45,12 +45,18 @@ static int parse_ussd(const uint8_t *_data, int len) uint8_t *data; int rc; struct ss_request req; + struct ss_header reqhdr; struct gsm48_hdr *hdr; data = malloc(len); memcpy(data, _data, len); hdr = (struct gsm48_hdr *) &data[0]; - rc = gsm0480_decode_ss_request(hdr, len, &req); + rc = gsm0480_decode_ss_request(hdr, len, &reqhdr); + if (rc) { + rc = gsm0480_parse_ss_facility(hdr->data + reqhdr.component_offset, + reqhdr.component_length, + &req); + } free(data); return rc; @@ -61,13 +67,20 @@ static int parse_mangle_ussd(const uint8_t *_data, int len) uint8_t *data; int rc; struct ss_request req; + struct ss_header reqhdr; struct gsm48_hdr *hdr; data = malloc(len); memcpy(data, _data, len); hdr = (struct gsm48_hdr *) &data[0]; hdr->data[1] = len - sizeof(*hdr) - 2; - rc = gsm0480_decode_ss_request(hdr, len, &req); + rc = gsm0480_decode_ss_request(hdr, len, &reqhdr); + if (rc) { + rc = gsm0480_parse_ss_facility(hdr->data + reqhdr.component_offset, + reqhdr.component_length, + &req); + } + free(data); return rc; @@ -120,18 +133,29 @@ static void test_7bit_ussd(const char *text, const char *encoded_hex, const char int main(int argc, char **argv) { struct ss_request req; + struct ss_header reqhdr; const int size = sizeof(ussd_request); + const int size_ss = sizeof(interrogate_ss); int i; struct msgb *msg; + struct gsm48_hdr *hdr; + char ussd_text[MAX_LEN_USSD_STRING + 1]; osmo_init_logging(&info); + memset(&reqhdr, 0, sizeof(reqhdr)); memset(&req, 0, sizeof(req)); - gsm0480_decode_ss_request((struct gsm48_hdr *) ussd_request, size, &req); - printf("Tested if it still works. Text was: %s\n", req.ussd_text); + hdr = (struct gsm48_hdr *) &ussd_request[0]; + gsm0480_decode_ss_request(hdr, size, &reqhdr); + gsm0480_parse_ss_facility(hdr->data + reqhdr.component_offset, reqhdr.component_length, &req); + gsm_7bit_decode_n_ussd(ussd_text, sizeof(ussd_text), req.ussd_text, req.ussd_text_len); + printf("Tested if it still works. Text was: %s\n", ussd_text); + memset(&reqhdr, 0, sizeof(reqhdr)); memset(&req, 0, sizeof(req)); - gsm0480_decode_ss_request((struct gsm48_hdr *) interrogate_ss, size, &req); + hdr = (struct gsm48_hdr *) &interrogate_ss[0]; + gsm0480_decode_ss_request(hdr, size_ss, &reqhdr); + gsm0480_parse_ss_facility(hdr->data + reqhdr.component_offset, reqhdr.component_length, &req); OSMO_ASSERT(strlen((char *) req.ussd_text) == 0); OSMO_ASSERT(req.ss_code == 33); printf("interrogateSS CFU text..'%s' code %d\n", req.ussd_text, req.ss_code); |