gsm_04_80: Send a Release Complete otherwise the USSD unit stays BUSY

We need to release the USSD unit, otherwise it is staying blocked
and will stop to function (even across LUs on my a1200). This code
should encode the transaction and the direction depending on the
network state but this is omitted right now.
diff --git a/openbsc/include/openbsc/gsm_04_80.h b/openbsc/include/openbsc/gsm_04_80.h
index 8215ca7..0d61dbd 100644
--- a/openbsc/include/openbsc/gsm_04_80.h
+++ b/openbsc/include/openbsc/gsm_04_80.h
@@ -30,5 +30,6 @@
 int gsm0480_wrap_facility(struct msgb *msg);
 
 int gsm0480_send_ussdNotify(struct gsm_subscriber_connection *conn, const char *text);
+int gsm0480_send_releaseComplete(struct gsm_subscriber_connection *conn);
 
 #endif
diff --git a/openbsc/src/gsm_04_80.c b/openbsc/src/gsm_04_80.c
index 28f9b92..a49c8b5 100644
--- a/openbsc/src/gsm_04_80.c
+++ b/openbsc/src/gsm_04_80.c
@@ -469,3 +469,19 @@
 
 	return gsm0808_submit_dtap(conn, msg, 0);
 }
+
+int gsm0480_send_releaseComplete(struct gsm_subscriber_connection *conn)
+{
+	struct gsm48_hdr *gh;
+	struct msgb *msg;
+
+	msg = gsm48_msgb_alloc();
+	if (!msg)
+		return -1;
+
+	gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh));
+	gh->proto_discr = GSM48_PDISC_NC_SS;
+	gh->msg_type = GSM0480_MTYPE_RELEASE_COMPLETE;
+
+	return gsm0808_submit_dtap(conn, msg, 0);
+}
diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c
index 34e61bb..b775af1 100644
--- a/openbsc/src/vty_interface_layer3.c
+++ b/openbsc/src/vty_interface_layer3.c
@@ -408,6 +408,7 @@
 	}
 
 	gsm0480_send_ussdNotify(conn, text);
+	gsm0480_send_releaseComplete(conn);
 
 	subscr_put(subscr);
 	talloc_free(text);