aboutsummaryrefslogtreecommitdiffstats
path: root/src/libmsc/gsm_09_11.c
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2018-06-12 06:26:28 +0700
committerVadim Yanitskiy <axilirator@gmail.com>2018-06-12 23:07:36 +0700
commit9aec25e464865573acc7ccde92f471a1af799cd6 (patch)
treeee4c1b087430e5457bfea3d5eeaf3b9aceb0c5ac /src/libmsc/gsm_09_11.c
parentf5b9e6cdf687351bda631ee98c368e4f318188d8 (diff)
libmsc/gsm_09_11.c: properly indicate transaction errors
Previously it was intended that we are always parsing the whole GSM 04.80 message, including the Invoke ID. But there is no need to do that, since we are going to forward the Facility IE payload to HLR in near future. Moreover, there was a mistake (my bad) - transaction is being established before parsing of the message, so the req structure remains uninitialized until that. Let's just send RELEASE COMPLETE message without any Cause or Facility IEs. We could indicate a problem using the first one, but according to GSM TS 04.80, the Cause IE only makes sense when "its functional handling is specified in the service description or GSM TS 09.11". Change-Id: Iecba2dccada9bbcdeb3a9dfd868719aeedc07022
Diffstat (limited to 'src/libmsc/gsm_09_11.c')
-rw-r--r--src/libmsc/gsm_09_11.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/libmsc/gsm_09_11.c b/src/libmsc/gsm_09_11.c
index 8f7e54fac..fc588f5c2 100644
--- a/src/libmsc/gsm_09_11.c
+++ b/src/libmsc/gsm_09_11.c
@@ -94,9 +94,9 @@ int gsm0911_rcv_nc_ss(struct gsm_subscriber_connection *conn, struct msgb *msg)
LOGP(DMM, LOGL_ERROR, "Unexpected message (msg_type=%s), "
"transaction is not allocated yet\n",
gsm48_pdisc_msgtype_name(pdisc, msg_type));
- gsm0480_send_ussd_reject(conn, &req,
- GSM_0480_PROBLEM_CODE_TAG_GENERAL,
- GSM_0480_GEN_PROB_CODE_UNRECOGNISED);
+ gsm48_tx_simple(conn,
+ GSM48_PDISC_NC_SS | (tid << 4),
+ GSM0480_MTYPE_RELEASE_COMPLETE);
return -EINVAL;
}
@@ -105,8 +105,9 @@ int gsm0911_rcv_nc_ss(struct gsm_subscriber_connection *conn, struct msgb *msg)
pdisc, tid, new_callref++);
if (!trans) {
DEBUGP(DMM, " -> No memory for trans\n");
- gsm0480_send_ussd_return_error(conn, &req,
- GSM0480_ERR_CODE_SYSTEM_FAILURE);
+ gsm48_tx_simple(conn,
+ GSM48_PDISC_NC_SS | (tid << 4),
+ GSM0480_MTYPE_RELEASE_COMPLETE);
return -ENOMEM;
}