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
This commit is contained in:
parent
0e2fa5dcb5
commit
39b5548808
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue