diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gsm/gsm0480.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c index 71470e54..d7c29787 100644 --- a/src/gsm/gsm0480.c +++ b/src/gsm/gsm0480.c @@ -249,11 +249,18 @@ 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) { + uint8_t msg_type = hdr->msg_type & 0x3F; int rc = 0; - if (len < sizeof(*hdr) + 2) { - LOGP(0, LOGL_DEBUG, "SS Request is too short.\n"); - return 0; + /** + * GSM 04.80 Section 2.5 'Release complete' Table 2.5 + * payload is optional for 'RELEASE COMPLETE' message + */ + if (msg_type != GSM0480_MTYPE_RELEASE_COMPLETE) { + if (len < sizeof(*hdr) + 2) { + LOGP(0, LOGL_DEBUG, "SS Request is too short.\n"); + return 0; + } } if (gsm48_hdr_pdisc(hdr) == GSM48_PDISC_NC_SS) { |