[MERGED] osmo-msc[master]: Permit any Sender MSISDN when sending SMS from VTY

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Mon Apr 9 18:19:59 UTC 2018


Harald Welte has submitted this change and it was merged.

Change subject: Permit any Sender MSISDN when sending SMS from VTY
......................................................................


Permit any Sender MSISDN when sending SMS from VTY

In the old days, OsmoNITB couldn't process any SMS that wasn't between
two subscribers on the same NITB.

We've long re-worked the internals in order to process SMS with
arbitrary sender MSISDN (e.g. from SMPP). However, the VTY command
"subscriber ... sms" was never updated, it seems.

Change-Id: I62b17e0a67989484415f0df2c8cb4ff1f94dbf2b
Closes: OS#3151
---
M include/osmocom/msc/gsm_04_11.h
M src/libmsc/gsm_04_11.c
M src/libmsc/msc_vty.c
M tests/msc_vlr/msc_vlr_tests.c
4 files changed, 32 insertions(+), 26 deletions(-)

Approvals:
  Pau Espin Pedrol: Looks good to me, but someone else must approve
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/msc/gsm_04_11.h b/include/osmocom/msc/gsm_04_11.h
index 3305e3e..e3ff4ba 100644
--- a/include/osmocom/msc/gsm_04_11.h
+++ b/include/osmocom/msc/gsm_04_11.h
@@ -34,7 +34,7 @@
 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 aa60490..077c8d8 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -82,7 +82,7 @@
 }
 
 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 @@
 	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 33613e9..84d4d14 100644
--- a/src/libmsc/msc_vty.c
+++ b/src/libmsc/msc_vty.c
@@ -705,13 +705,13 @@
 }
 
 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 @@
 	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 @@
 		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 @@
 	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 @@
 		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 7c54057..45ab5e1 100644
--- a/tests/msc_vlr/msc_vlr_tests.c
+++ b/tests/msc_vlr/msc_vlr_tests.c
@@ -294,7 +294,7 @@
 	      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);
 }
 

-- 
To view, visit https://gerrit.osmocom.org/7694
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I62b17e0a67989484415f0df2c8cb4ff1f94dbf2b
Gerrit-PatchSet: 1
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de>



More information about the gerrit-log mailing list