aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorSergey Kostanbaev <sergey.kostanbaev@gmail.com>2015-10-28 14:48:51 +0300
committerIvan Kluchnikov <kluchnikovi@gmail.com>2017-02-07 18:59:54 +0300
commitb2679b822ecf87dd17f4455e1383d037040402e5 (patch)
tree05314b2011cc1dc2d444d511523c01e14db3c051 /openbsc
parent0ce3516a472c921ea718990f49a887003536ab7d (diff)
ussd: send reject to sup
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/src/libmsc/ussd.c73
1 files changed, 14 insertions, 59 deletions
diff --git a/openbsc/src/libmsc/ussd.c b/openbsc/src/libmsc/ussd.c
index 2bad560d5..ad838f503 100644
--- a/openbsc/src/libmsc/ussd.c
+++ b/openbsc/src/libmsc/ussd.c
@@ -186,64 +186,19 @@ int on_ussd_response(const struct ss_request *req, const char *extention)
ussd_session_free(ussdq);
msc_release_connection(ussdq->conn);
}
+}
-#if 0
- switch (req->opcode) {
- case GSM0480_OP_CODE_USS_NOTIFY:
- DEBUGP(DMM, "Network originated USSD Notify is not supported yet!\n");
-
- if (!ussdq) {
- mtype = GSM0480_MTYPE_REGISTER;
- } else {
- mtype = GSM0480_MTYPE_FACILITY;
- }
-
- return -ENOTSUP;
- case GSM0480_OP_CODE_PROCESS_USS_REQ:
- if (!ussdq) {
- DEBUGP(DMM, "Network originated Process USSD Request is not supported yet!\n");
- // TODO SUP Reject
- return -ENOTSUP;
- }
-
- mtype = GSM0480_MTYPE_RELEASE_COMPLETE;
- ussd_req.transaction_id = ussdq->transaction_id;
- break;
- case GSM0480_OP_CODE_USS_REQUEST:
- if (!ussdq) {
- DEBUGP(DMM, "No session was found for invoke_id: %d\n", req->invoke_id);
- return -EINVAL;
- }
-
- mtype = GSM0480_MTYPE_FACILITY;
- ussd_req.transaction_id = ussdq->transaction_id;
- break;
- default:
- // TODO SUP Reject
- return -EINVAL;
- }
-
- ussd_req.invoke_id = ussdq->invoke_id;
-
- if (req->ussd_text[0]) {
- rc = gsm0480_send_ussd_response(ussdq->conn,
- NULL,
- (const char *)req->ussd_text,
- &ussd_req,
- req->opcode,
- req->component_type,
- mtype);
- } else {
- rc = gsm0480_send_ussd_reject(ussdq->conn, NULL, &ussd_req);
- }
- if (rc || mtype == GSM0480_MTYPE_RELEASE_COMPLETE) {
- ussd_session_free(ussdq);
- msc_release_connection(ussdq->conn);
- }
-
- return rc;
-
-#endif
+static int ussd_sup_send_reject(struct gsm_subscriber_connection *conn,
+ uint8_t uniq_id, uint8_t opcode)
+{
+ struct ss_request rej;
+ rej.message_type = GSM0480_MTYPE_RELEASE_COMPLETE;
+ rej.component_type = GSM0480_CTYPE_REJECT;
+ rej.invoke_id = uniq_id;
+ rej.opcode = opcode;
+ rej.ussd_text_len = 0;
+
+ return subscr_tx_uss_message(&rej, conn->subscr);
}
/* Entrypoint - handler function common to all mobile-originated USSDs */
@@ -266,7 +221,7 @@ int handle_rcv_ussd(struct gsm_subscriber_connection *conn, struct msgb *msg)
DEBUGP(DMM, "Unhandled SS\n");
ussdq = get_by_tid(conn, req.transaction_id);
if (ussdq) {
- // TODO send notification to SUP
+ ussd_sup_send_reject(conn, ussdq->uniq_id, 0);
goto failed_transaction;
}
@@ -303,7 +258,7 @@ int handle_rcv_ussd(struct gsm_subscriber_connection *conn, struct msgb *msg)
}
ussd_session_free(ussdq);
- // TODO send notification to SUP
+ ussd_sup_send_reject(conn, ussdq->uniq_id, req.opcode);
goto release_conn;
}