aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Chemeris <Alexander.Chemeris@gmail.com>2015-10-24 16:02:58 +0300
committerIvan Kluchnikov <kluchnikovi@gmail.com>2017-02-07 18:59:53 +0300
commit1c30463e7687ebddc216e1b7c830481cffb6b289 (patch)
treef37f53d0f68439d8aefc84a753728a9e6919dec5
parentbcc25675791faf908907b5d99e6591cd22530a8f (diff)
libmsc: Create a separate SUP socket for USSD.
-rw-r--r--openbsc/include/openbsc/gsm_data.h1
-rw-r--r--openbsc/src/libmsc/gsm_sup.c2
-rw-r--r--openbsc/src/libmsc/vty_interface_layer3.c25
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;
}