summaryrefslogtreecommitdiffstats
path: root/src/gsm/gsm0480.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gsm/gsm0480.c')
-rw-r--r--src/gsm/gsm0480.c13
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) {