From f07c58cb363f5cd30a6186408dad2b77f66770a9 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Wed, 17 Jan 2018 03:42:16 +0600 Subject: gsm0480: refactor gsm0480_decode_ss_request Change-Id: Iba734db97ab516f8fce816c4e4225b97b93619f1 --- src/gsm/gsm0480.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src/gsm') diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c index 25f97a21..ca009998 100644 --- a/src/gsm/gsm0480.c +++ b/src/gsm/gsm0480.c @@ -255,17 +255,24 @@ int gsm0480_decode_ussd_request(const struct gsm48_hdr *hdr, uint16_t len, int gsm0480_decode_ss_request(const struct gsm48_hdr *hdr, uint16_t len, struct ss_request *req) { - int rc = 0; + uint8_t pdisc; - if (gsm48_hdr_pdisc(hdr) == GSM48_PDISC_NC_SS) { - req->transaction_id = hdr->proto_discr & 0x70; - rc = parse_ss(hdr, len - sizeof(*hdr), req); + /** + * Check Protocol Discriminator + * see TS GSM 04.07 and GSM 04.80 + */ + pdisc = gsm48_hdr_pdisc(hdr); + if (pdisc != GSM48_PDISC_NC_SS) { + LOGP(0, LOGL_ERROR, "Dropping message with " + "unsupported pdisc=%02x\n", pdisc); + return 0; } - if (!rc) - LOGP(0, LOGL_DEBUG, "Error occurred while parsing received SS!\n"); + /* GSM 04.80 3.3 Transaction Identifier */ + req->transaction_id = hdr->proto_discr & 0x70; - return rc; + /* Parse SS request */ + return parse_ss(hdr, len - sizeof(*hdr), req); } static int parse_ss(const struct gsm48_hdr *hdr, uint16_t len, struct ss_request *req) -- cgit v1.2.3