diff options
author | Vadim Yanitskiy <axilirator@gmail.com> | 2018-01-17 03:42:16 +0600 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-01-17 10:45:40 +0000 |
commit | f07c58cb363f5cd30a6186408dad2b77f66770a9 (patch) | |
tree | 3da0712867db3097b981ee13c9649983e23acda9 /src/gsm | |
parent | fd744ceeae98113841c2323e17eb30aea93bacdc (diff) |
gsm0480: refactor gsm0480_decode_ss_request
Change-Id: Iba734db97ab516f8fce816c4e4225b97b93619f1
Diffstat (limited to 'src/gsm')
-rw-r--r-- | src/gsm/gsm0480.c | 21 |
1 files changed, 14 insertions, 7 deletions
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) |