libmsc/gsm_09_11.c: inform HLR/EUSE if Paging has failed

Change-Id: Ie2ac06aadb18251310e0cfd85bb0d9865470aab7
Related: (TTCN-3) I1f53c56d569c8ac4071835685bbe3bc9e0ebd7f0
Related: OS#2931
diff --git a/src/libmsc/gsm_09_11.c b/src/libmsc/gsm_09_11.c
index 51cb2fb..f58c106 100644
--- a/src/libmsc/gsm_09_11.c
+++ b/src/libmsc/gsm_09_11.c
@@ -297,9 +297,25 @@
 		/* Count established network-initiated NC SS/USSD sessions */
 		rate_ctr_inc(&net->msc_ctrs->ctr[MSC_CTR_NC_SS_MT_ESTABLISHED]);
 	} else {
+		struct osmo_gsup_message gsup_msg;
+
 		LOG_MSC_A_CAT(msc_a, DSS, LOGL_DEBUG, "Paging expired\n");
 
-		/* TODO: inform HLR about this failure */
+		gsup_msg = (struct osmo_gsup_message){
+			.message_class = OSMO_GSUP_MESSAGE_CLASS_USSD,
+			.message_type = OSMO_GSUP_MSGT_PROC_SS_ERROR,
+
+			.session_state = OSMO_GSUP_SESSION_STATE_END,
+			.session_id = trans->callref,
+			/* FIXME: we need message class specific cause values */
+			.cause = GMM_CAUSE_IMPL_DETACHED,
+		};
+
+		/* Fill in subscriber's IMSI */
+		OSMO_STRLCPY_ARRAY(gsup_msg.imsi, trans->vsub->imsi);
+
+		/* Inform HLR/EUSE about the failure */
+		gsup_client_mux_tx(trans->net->gcm, &gsup_msg);
 
 		msgb_free(trans->ss.msg);
 		trans->ss.msg = NULL;