[PATCH] osmo-msc[master]: Make sending an SMS to an unknown subscriber B work over SMPP.

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/.

Stefan Sperling gerrit-no-reply at lists.osmocom.org
Tue Jan 30 11:23:04 UTC 2018


Review at  https://gerrit.osmocom.org/6192

Make sending an SMS to an unknown subscriber B work over SMPP.

Make the submit_to_sms() funcion aware of the message mode. If the
message does not require real-time "transactional/forward mode" we
can store it in the SMS database even if subscriber B cannot be
found in the VLR at this point in time.

This should should make the esme_ms_sms_storeforward test in
osmo-gsm-tester pass (a tweak to this test's expectations will
be needed as well, because the test currently assumes that an
invalid phone number for subscriber B will fail immediately,
rather than cause the message to eventually expire).

Change-Id: Ic3d78919568ad9252b4d19c3ddab5068d1c52db2
Related: OS#2354
---
M src/libmsc/smpp_openbsc.c
1 file changed, 9 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/92/6192/1

diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c
index 4e2fb55..b0469f9 100644
--- a/src/libmsc/smpp_openbsc.c
+++ b/src/libmsc/smpp_openbsc.c
@@ -99,11 +99,12 @@
 	struct gsm_sms *sms;
 	struct tlv_t *t;
 	int mode;
+	int can_store_sms = ((submit->esm_class & SMPP34_MSG_MODE_MASK) != 2); /* != forward mode */
 
 	dest = subscr_by_dst(net, submit->dest_addr_npi,
 			     submit->dest_addr_ton,
 			     (const char *)submit->destination_addr);
-	if (!dest) {
+	if (!dest && !can_store_sms) {
 		LOGP(DLSMS, LOGL_NOTICE, "SMPP SUBMIT-SM for unknown subscriber: "
 		     "%s (NPI=%u)\n", submit->destination_addr,
 		     submit->dest_addr_npi);
@@ -115,7 +116,8 @@
 		case TLVID_message_payload:
 			if (smpp34_submit_tlv_msg_payload(t, submit, &sms_msg,
 							  &sms_msg_len) < 0) {
-				vlr_subscr_put(dest);
+				if (dest)
+					vlr_subscr_put(dest);
 				return ESME_ROPTPARNOTALLWD;
 			}
 			break;
@@ -149,7 +151,11 @@
 	sms->receiver = dest;
 	sms->dst.ton = submit->dest_addr_ton;
 	sms->dst.npi = submit->dest_addr_npi;
-	osmo_strlcpy(sms->dst.addr, dest->msisdn, sizeof(sms->dst.addr));
+	if (dest)
+		osmo_strlcpy(sms->dst.addr, dest->msisdn, sizeof(sms->dst.addr));
+	else
+		osmo_strlcpy(sms->dst.addr, (const char *)submit->destination_addr,
+			     sizeof(sms->dst.addr));
 
 	/* fill in the source address */
 	sms->src.ton = submit->source_addr_ton;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic3d78919568ad9252b4d19c3ddab5068d1c52db2
Gerrit-PatchSet: 1
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Owner: Stefan Sperling <ssperling at sysmocom.de>



More information about the gerrit-log mailing list