aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@netfilter.org>2009-11-14 08:00:53 +0100
committerHarald Welte <laforge@netfilter.org>2009-11-14 08:00:53 +0100
commit98f9c75094fcb54f7e7318a4cbfca04a8db8112f (patch)
treedc7a7cc6327ef29b7ccb663a5594d1488670fe58 /openbsc/src
parent793a1355d6cded7c3b332fd2235b9002b4b80979 (diff)
[VTY] restructure sms and silent sms commands
Diffstat (limited to 'openbsc/src')
-rw-r--r--openbsc/src/vty_interface_layer3.c95
1 files changed, 32 insertions, 63 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;
- struct buffer *b;
- int rc;
-
- receiver = subscr_get_by_extension(gsmnet, argv[0]);
- if (!receiver)
- return CMD_WARNING;
-
- b = argv_to_buffer(argc, argv, 1);
- rc = _send_sms_buffer(receiver, 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")
-{
- struct gsm_subscriber *receiver;
- struct buffer *b;
- int rc;
-
- receiver = subscr_get_by_extension(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;
+ 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(sms_send_imsi,
- sms_send_imsi_cmd,
- "sms send imsi IMSI .LINE",
- "Send a message to a subscriber identified by IMSI")
+DEFUN(subscriber_send_sms,
+ subscriber_send_sms_cmd,
+ "subscriber " SUBSCR_TYPES " EXTEN 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_imsi(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_imsi,
- sms_send_silent_imsi_cmd,
- "sms send silent imsi IMSI .LINE",
- "Send a silent message to a subscriber identified by IMSI")
+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_imsi(gsmnet, argv[0]);
- if (!receiver)
+ if (!subscr)
return CMD_WARNING;
- b = argv_to_buffer(argc, argv, 1);
- rc = _send_sms_buffer(receiver, b, 64);
+ b = argv_to_buffer(argc, argv, 2);
+ rc = _send_sms_buffer(subscr, b, 0);
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);