From 98f9c75094fcb54f7e7318a4cbfca04a8db8112f Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 14 Nov 2009 08:00:53 +0100 Subject: [PATCH] [VTY] restructure sms and silent sms commands --- openbsc/src/vty_interface_layer3.c | 101 ++++++++++------------------- 1 file changed, 35 insertions(+), 66 deletions(-) diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c index 6fe209e2e..53b596098 100644 --- a/openbsc/src/vty_interface_layer3.c +++ b/openbsc/src/vty_interface_layer3.c @@ -205,89 +205,60 @@ static int _send_sms_buffer(struct gsm_subscriber *receiver, return CMD_SUCCESS; } -DEFUN(sms_send_ext, - sms_send_ext_cmd, - "sms send extension EXTEN .LINE", - "Send a message to a subscriber identified by EXTEN") +static struct gsm_subscriber *get_subscr_by_argv(const char *type, + const char *id) { - struct gsm_subscriber *receiver; + if (!strcmp(type, "extension")) + return subscr_get_by_extension(gsmnet, id); + else if (!strcmp(type, "imsi")) + return subscr_get_by_imsi(gsmnet, id); + else if (!strcmp(type, "tmsi")) + return subscr_get_by_tmsi(gsmnet, atoi(id)); + else if (!strcmp(type, "id")) + return subscr_get_by_id(gsmnet, atoi(id)); + + return NULL; +} +#define SUBSCR_TYPES "(extension|imsi|tmsi|id)" + +DEFUN(subscriber_send_sms, + subscriber_send_sms_cmd, + "subscriber " SUBSCR_TYPES " EXTEN sms send .LINE", + "Select subscriber based on extension") +{ + struct gsm_subscriber *subscr = get_subscr_by_argv(argv[0], argv[1]); struct buffer *b; int rc; - receiver = subscr_get_by_extension(gsmnet, argv[0]); - if (!receiver) + if (!subscr) return CMD_WARNING; - b = argv_to_buffer(argc, argv, 1); - rc = _send_sms_buffer(receiver, b, 0); + b = argv_to_buffer(argc, argv, 2); + rc = _send_sms_buffer(subscr, b, 0); buffer_free(b); return rc; } -DEFUN(sms_send_silent_ext, - sms_send_silent_ext_cmd, - "sms send silent extension EXTEN .LINE", - "Send a silent message to a subscriber identified by EXTEN") +DEFUN(subscriber_silent_sms, + subscriber_silent_sms_cmd, + "subscriber " SUBSCR_TYPES " EXTEN silent sms send .LINE", + "Select subscriber based on extension") { - struct gsm_subscriber *receiver; + struct gsm_subscriber *subscr = get_subscr_by_argv(argv[0], argv[1]); struct buffer *b; int rc; - receiver = subscr_get_by_extension(gsmnet, argv[0]); - if (!receiver) + if (!subscr) return CMD_WARNING; - b = argv_to_buffer(argc, argv, 1); - rc = _send_sms_buffer(receiver, b, 64); - buffer_free(b); - subscr_put(receiver); - - return rc; -} - -DEFUN(sms_send_imsi, - sms_send_imsi_cmd, - "sms send imsi IMSI .LINE", - "Send a message to a subscriber identified by IMSI") -{ - struct gsm_subscriber *receiver; - struct buffer *b; - int rc; - - receiver = subscr_get_by_imsi(gsmnet, argv[0]); - if (!receiver) - return CMD_WARNING; - - b = argv_to_buffer(argc, argv, 1); - rc = _send_sms_buffer(receiver, b, 0); + b = argv_to_buffer(argc, argv, 2); + rc = _send_sms_buffer(subscr, b, 0); buffer_free(b); return rc; } -DEFUN(sms_send_silent_imsi, - sms_send_silent_imsi_cmd, - "sms send silent imsi IMSI .LINE", - "Send a silent message to a subscriber identified by IMSI") -{ - struct gsm_subscriber *receiver; - struct buffer *b; - int rc; - - receiver = subscr_get_by_imsi(gsmnet, argv[0]); - if (!receiver) - return CMD_WARNING; - - b = argv_to_buffer(argc, argv, 1); - rc = _send_sms_buffer(receiver, b, 64); - buffer_free(b); - subscr_put(receiver); - - return rc; -} - - DEFUN(cfg_subscr_name, cfg_subscr_name_cmd, "name NAME", @@ -336,7 +307,6 @@ DEFUN(cfg_subscr_authorized, return CMD_SUCCESS; } - int bsc_vty_init_extra(struct gsm_network *net) { gsmnet = net; @@ -345,10 +315,9 @@ int bsc_vty_init_extra(struct gsm_network *net) install_element(VIEW_NODE, &show_subscr_cache_cmd); install_element(VIEW_NODE, &sms_send_pend_cmd); - install_element(VIEW_NODE, &sms_send_ext_cmd); - install_element(VIEW_NODE, &sms_send_imsi_cmd); - install_element(VIEW_NODE, &sms_send_silent_ext_cmd); - install_element(VIEW_NODE, &sms_send_silent_imsi_cmd); + + install_element(VIEW_NODE, &subscriber_send_sms_cmd); + install_element(VIEW_NODE, &subscriber_silent_sms_cmd); install_element(CONFIG_NODE, &cfg_subscr_cmd); install_node(&subscr_node, dummy_config_write);