diff options
author | Alexander Chemeris <Alexander.Chemeris@gmail.com> | 2015-10-24 16:02:58 +0300 |
---|---|---|
committer | Ivan Kluchnikov <kluchnikovi@gmail.com> | 2017-02-07 18:59:53 +0300 |
commit | 1c30463e7687ebddc216e1b7c830481cffb6b289 (patch) | |
tree | f37f53d0f68439d8aefc84a753728a9e6919dec5 | |
parent | bcc25675791faf908907b5d99e6591cd22530a8f (diff) |
libmsc: Create a separate SUP socket for USSD.
-rw-r--r-- | openbsc/include/openbsc/gsm_data.h | 1 | ||||
-rw-r--r-- | openbsc/src/libmsc/gsm_sup.c | 2 | ||||
-rw-r--r-- | openbsc/src/libmsc/vty_interface_layer3.c | 25 |
3 files changed, 27 insertions, 1 deletions
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h index 778541a1d..4504988b5 100644 --- a/openbsc/include/openbsc/gsm_data.h +++ b/openbsc/include/openbsc/gsm_data.h @@ -324,6 +324,7 @@ struct gsm_network { struct llist_head trans_list; struct bsc_api *bsc_api; struct gprs_gsup_client *hlr_sup_client; + struct gprs_gsup_client *ussd_sup_client; unsigned int num_bts; struct llist_head bts_list; diff --git a/openbsc/src/libmsc/gsm_sup.c b/openbsc/src/libmsc/gsm_sup.c index 40100ed1b..da65977b3 100644 --- a/openbsc/src/libmsc/gsm_sup.c +++ b/openbsc/src/libmsc/gsm_sup.c @@ -90,7 +90,7 @@ int subscr_tx_uss_message(struct ss_request *req, //GSM0480_OP_CODE_PROCESS_USS_REQ subscr_uss_message(msg, req, subscr->extension); - return gprs_gsup_client_send(subscr->group->net->hlr_sup_client, msg); + return gprs_gsup_client_send(subscr->group->net->ussd_sup_client, msg); } diff --git a/openbsc/src/libmsc/vty_interface_layer3.c b/openbsc/src/libmsc/vty_interface_layer3.c index 11d902226..3b5778eac 100644 --- a/openbsc/src/libmsc/vty_interface_layer3.c +++ b/openbsc/src/libmsc/vty_interface_layer3.c @@ -50,6 +50,7 @@ #include <openbsc/sms_queue.h> #include <openbsc/mncc_int.h> #include <openbsc/handover.h> +#include <openbsc/gsm_sup.h> #include <osmocom/vty/logging.h> @@ -1027,6 +1028,29 @@ DEFUN(meas_feed_scenario, meas_feed_scenario_cmd, return CMD_SUCCESS; } +DEFUN(sup_ussd_destination, sup_ussd_destination_cmd, + "sup-ussd destination ADDR <0-65535>", + "Enable SUP USSD socket to a given address/port" "destination\n" "address or hostname\n" "port number\n") +{ + struct gsm_network *gsmnet = gsmnet_from_vty(vty); + + if (gsmnet->ussd_sup_client) { + LOGP(DSUP, LOGL_FATAL, "Can't create two USSD SUP clients\n"); + vty_out(vty, "%%USSD SUP client already configured%s", VTY_NEWLINE); + return CMD_WARNING; + } + + gsmnet->ussd_sup_client = gprs_gsup_client_create( + argv[0], atoi(argv[1]), &sup_read_cb); + if (!gsmnet->ussd_sup_client) { + LOGP(DSUP, LOGL_FATAL, "Cannot set up USSD SUP socket\n"); + vty_out(vty, "%%Cannot set up USSD SUP socket%s", VTY_NEWLINE); + return CMD_WARNING; + } + + return CMD_SUCCESS; +} + DEFUN(logging_fltr_imsi, logging_fltr_imsi_cmd, @@ -1199,6 +1223,7 @@ int bsc_vty_init_extra(void) install_element(NITB_NODE, &cfg_nitb_no_subscr_create_cmd); install_element(NITB_NODE, &cfg_nitb_assign_tmsi_cmd); install_element(NITB_NODE, &cfg_nitb_no_assign_tmsi_cmd); + install_element(NITB_NODE, &sup_ussd_destination_cmd); return 0; } |