aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/msc/gsm_04_11.h2
-rw-r--r--src/libmsc/gsm_04_11.c4
-rw-r--r--src/libmsc/msc_vty.c50
-rw-r--r--tests/msc_vlr/msc_vlr_tests.c2
4 files changed, 32 insertions, 26 deletions
diff --git a/include/osmocom/msc/gsm_04_11.h b/include/osmocom/msc/gsm_04_11.h
index 3305e3e61..e3ff4baaf 100644
--- a/include/osmocom/msc/gsm_04_11.h
+++ b/include/osmocom/msc/gsm_04_11.h
@@ -34,7 +34,7 @@ int gsm0411_rcv_sms(struct gsm_subscriber_connection *conn, struct msgb *msg);
struct gsm_sms *sms_alloc(void);
void sms_free(struct gsm_sms *sms);
struct gsm_sms *sms_from_text(struct vlr_subscr *receiver,
- struct vlr_subscr *sender,
+ const char *sender_msisdn,
int dcs, const char *text);
void _gsm411_sms_trans_free(struct gsm_trans *trans);
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index aa6049002..077c8d8ce 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -82,7 +82,7 @@ void sms_free(struct gsm_sms *sms)
}
struct gsm_sms *sms_from_text(struct vlr_subscr *receiver,
- struct vlr_subscr *sender,
+ const char *sender_msisdn,
int dcs, const char *text)
{
struct gsm_sms *sms = sms_alloc();
@@ -93,7 +93,7 @@ struct gsm_sms *sms_from_text(struct vlr_subscr *receiver,
sms->receiver = vlr_subscr_get(receiver);
OSMO_STRLCPY_ARRAY(sms->text, text);
- OSMO_STRLCPY_ARRAY(sms->src.addr, sender->msisdn);
+ OSMO_STRLCPY_ARRAY(sms->src.addr, sender_msisdn);
sms->reply_path_req = 0;
sms->status_rep_req = 0;
sms->ud_hdr_ind = 0;
diff --git a/src/libmsc/msc_vty.c b/src/libmsc/msc_vty.c
index 33613e959..84d4d1416 100644
--- a/src/libmsc/msc_vty.c
+++ b/src/libmsc/msc_vty.c
@@ -705,13 +705,13 @@ DEFUN(sms_delete_expired,
}
static int _send_sms_str(struct vlr_subscr *receiver,
- struct vlr_subscr *sender,
+ const char *sender_msisdn,
char *str, uint8_t tp_pid)
{
struct gsm_network *net = receiver->vlr->user_ctx;
struct gsm_sms *sms;
- sms = sms_from_text(receiver, sender, 0, str);
+ sms = sms_from_text(receiver, sender_msisdn, 0, str);
sms->protocol_id = tp_pid;
/* store in database for the queue */
@@ -813,7 +813,7 @@ DEFUN(subscriber_send_sms,
SUBSCR_HELP "SMS Operations\n" SUBSCR_HELP "Send SMS\n" "Actual SMS Text\n")
{
struct vlr_subscr *vsub = get_vsub_by_argv(gsmnet, argv[0], argv[1]);
- struct vlr_subscr *sender = get_vsub_by_argv(gsmnet, argv[2], argv[3]);
+ const char *sender_msisdn;
char *str;
int rc;
@@ -824,21 +824,24 @@ DEFUN(subscriber_send_sms,
goto err;
}
- if (!sender) {
- vty_out(vty, "%% No sender found for %s %s%s",
- argv[2], argv[3], VTY_NEWLINE);
- rc = CMD_WARNING;
- goto err;
+ if (!strcmp(argv[2], "msisdn"))
+ sender_msisdn = argv[3];
+ else {
+ struct vlr_subscr *sender = get_vsub_by_argv(gsmnet, argv[2], argv[3]);
+ if (!sender) {
+ vty_out(vty, "%% No sender found for %s %s%s", argv[2], argv[3], VTY_NEWLINE);
+ rc = CMD_WARNING;
+ goto err;
+ }
+ sender_msisdn = sender->msisdn;
+ vlr_subscr_put(sender);
}
str = argv_concat(argv, argc, 4);
- rc = _send_sms_str(vsub, sender, str, 0);
+ rc = _send_sms_str(vsub, sender_msisdn, str, 0);
talloc_free(str);
err:
- if (sender)
- vlr_subscr_put(sender);
-
if (vsub)
vlr_subscr_put(vsub);
@@ -852,7 +855,7 @@ DEFUN(subscriber_silent_sms,
SUBSCR_HELP "Silent SMS Operations\n" SUBSCR_HELP "Send SMS\n" "Actual SMS Text\n")
{
struct vlr_subscr *vsub = get_vsub_by_argv(gsmnet, argv[0], argv[1]);
- struct vlr_subscr *sender = get_vsub_by_argv(gsmnet, argv[2], argv[3]);
+ const char *sender_msisdn;
char *str;
int rc;
@@ -863,21 +866,24 @@ DEFUN(subscriber_silent_sms,
goto err;
}
- if (!sender) {
- vty_out(vty, "%% No sender found for %s %s%s",
- argv[2], argv[3], VTY_NEWLINE);
- rc = CMD_WARNING;
- goto err;
+ if (!strcmp(argv[2], "msisdn")) {
+ sender_msisdn = argv[3];
+ } else {
+ struct vlr_subscr *sender = get_vsub_by_argv(gsmnet, argv[2], argv[3]);
+ if (!sender) {
+ vty_out(vty, "%% No sender found for %s %s%s", argv[2], argv[3], VTY_NEWLINE);
+ rc = CMD_WARNING;
+ goto err;
+ }
+ sender_msisdn = sender->msisdn;
+ vlr_subscr_put(sender);
}
str = argv_concat(argv, argc, 4);
- rc = _send_sms_str(vsub, sender, str, 64);
+ rc = _send_sms_str(vsub, sender_msisdn, str, 64);
talloc_free(str);
err:
- if (sender)
- vlr_subscr_put(sender);
-
if (vsub)
vlr_subscr_put(vsub);
diff --git a/tests/msc_vlr/msc_vlr_tests.c b/tests/msc_vlr/msc_vlr_tests.c
index 7c54057ab..45ab5e113 100644
--- a/tests/msc_vlr/msc_vlr_tests.c
+++ b/tests/msc_vlr/msc_vlr_tests.c
@@ -294,7 +294,7 @@ void send_sms(struct vlr_subscr *receiver,
struct vlr_subscr *sender,
char *str)
{
- struct gsm_sms *sms = sms_from_text(receiver, sender, 0, str);
+ struct gsm_sms *sms = sms_from_text(receiver, sender->msisdn, 0, str);
gsm411_send_sms_subscr(receiver, sms);
}