diff options
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/include/openbsc/gsm_04_80.h | 4 | ||||
-rw-r--r-- | openbsc/src/gsm_04_80.c | 14 | ||||
-rw-r--r-- | openbsc/src/vty_interface_layer3.c | 9 |
3 files changed, 18 insertions, 9 deletions
diff --git a/openbsc/include/openbsc/gsm_04_80.h b/openbsc/include/openbsc/gsm_04_80.h index 0d61dbd07..bbf15ef79 100644 --- a/openbsc/include/openbsc/gsm_04_80.h +++ b/openbsc/include/openbsc/gsm_04_80.h @@ -24,12 +24,12 @@ int gsm0480_send_ussd_reject(struct gsm_subscriber_connection *conn, const struct ussd_request *request); struct msgb *gsm0480_create_notifySS(const char *text); -struct msgb *gsm0480_create_unstructuredSS_Notify(const char *text); +struct msgb *gsm0480_create_unstructuredSS_Notify(int alertLevel, const char *text); int gsm0480_wrap_invoke(struct msgb *msg, int op, int link_id); int gsm0480_wrap_facility(struct msgb *msg); -int gsm0480_send_ussdNotify(struct gsm_subscriber_connection *conn, const char *text); +int gsm0480_send_ussdNotify(struct gsm_subscriber_connection *conn, int level, 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 4173aded6..a7c8bd7bc 100644 --- a/openbsc/src/gsm_04_80.c +++ b/openbsc/src/gsm_04_80.c @@ -314,7 +314,7 @@ struct msgb *gsm0480_create_notifySS(const char *text) return msg; } -struct msgb *gsm0480_create_unstructuredSS_Notify(const char *text) +struct msgb *gsm0480_create_unstructuredSS_Notify(int alertPattern, const char *text) { struct msgb *msg; uint8_t *seq_len_ptr, *ussd_len_ptr, *data; @@ -343,7 +343,13 @@ struct msgb *gsm0480_create_unstructuredSS_Notify(const char *text) ussd_len_ptr[0] = len; /* USSD-String } */ - seq_len_ptr[0] = 3 + 2 + ussd_len_ptr[0]; + /* alertingPattern { */ + msgb_put_u8(msg, ASN1_OCTET_STRING_TAG); + msgb_put_u8(msg, 1); + msgb_put_u8(msg, alertPattern); + /* } alertingPattern */ + + seq_len_ptr[0] = 3 + 2 + ussd_len_ptr[0] + 3; /* } SEQUENCE */ return msg; @@ -456,12 +462,12 @@ int gsm0480_send_ussd_reject(struct gsm_subscriber_connection *conn, return gsm0808_submit_dtap(conn, msg, 0); } -int gsm0480_send_ussdNotify(struct gsm_subscriber_connection *conn, const char *text) +int gsm0480_send_ussdNotify(struct gsm_subscriber_connection *conn, int level, const char *text) { struct gsm48_hdr *gh; struct msgb *msg; - msg = gsm0480_create_unstructuredSS_Notify(text); + msg = gsm0480_create_unstructuredSS_Notify(level, text); if (!msg) return -1; diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c index b775af139..55fe1c065 100644 --- a/openbsc/src/vty_interface_layer3.c +++ b/openbsc/src/vty_interface_layer3.c @@ -375,9 +375,10 @@ DEFUN(subscriber_silent_call_stop, DEFUN(subscriber_ussd_notify, subscriber_ussd_notify_cmd, - "subscriber " SUBSCR_TYPES " ID ussd-notify .TEXT", + "subscriber " SUBSCR_TYPES " ID ussd-notify (0|1|2) .TEXT", SUBSCR_HELP "USSD Notify\n" "Subscriber ID\n" + "Alerting Level\n" "Text Message to send\n") { char *text; @@ -385,6 +386,7 @@ DEFUN(subscriber_ussd_notify, struct gsm_network *gsmnet = gsmnet_from_vty(vty); struct gsm_subscriber *subscr = get_subscr_by_argv(gsmnet, argv[0], argv[1]); int rc; + int level; if (!subscr) { vty_out(vty, "%% No subscriber found for %s %s%s", @@ -392,7 +394,8 @@ DEFUN(subscriber_ussd_notify, return CMD_WARNING; } - text = argv_concat(argv, argc, 2); + level = atoi(argv[2]); + text = argv_concat(argv, argc, 3); if (!text) { subscr_put(subscr); return CMD_WARNING; @@ -407,7 +410,7 @@ DEFUN(subscriber_ussd_notify, return CMD_WARNING; } - gsm0480_send_ussdNotify(conn, text); + gsm0480_send_ussdNotify(conn, level, text); gsm0480_send_releaseComplete(conn); subscr_put(subscr); |