libmsc: Allow to set sender id when sending SMS from the VTY

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
This commit is contained in:
Sylvain Munaut 2012-12-28 00:49:01 +01:00 committed by Holger Hans Peter Freyther
parent 11c1b6e014
commit 01c13a3a45
4 changed files with 55 additions and 17 deletions

View File

@ -29,7 +29,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 gsm_subscriber *receiver, int dcs, const char *text);
struct gsm_sms *sms_from_text(struct gsm_subscriber *receiver, struct gsm_subscriber *sender, int dcs, const char *text);
void _gsm411_sms_trans_free(struct gsm_trans *trans);
int gsm411_send_sms_subscr(struct gsm_subscriber *subscr,

View File

@ -84,7 +84,9 @@ void sms_free(struct gsm_sms *sms)
talloc_free(sms);
}
struct gsm_sms *sms_from_text(struct gsm_subscriber *receiver, int dcs, const char *text)
struct gsm_sms *sms_from_text(struct gsm_subscriber *receiver,
struct gsm_subscriber *sender,
int dcs, const char *text)
{
struct gsm_sms *sms = sms_alloc();
@ -94,8 +96,7 @@ struct gsm_sms *sms_from_text(struct gsm_subscriber *receiver, int dcs, const ch
sms->receiver = subscr_get(receiver);
strncpy(sms->text, text, sizeof(sms->text)-1);
/* FIXME: don't use ID 1 static */
sms->sender = subscr_get_by_id(receiver->net, 1);
sms->sender = subscr_get(sender);
strncpy(sms->src.addr, sms->sender->extension, sizeof(sms->src.addr)-1);
sms->reply_path_req = 0;
sms->status_rep_req = 0;

View File

@ -63,6 +63,7 @@ static int token_subscr_cb(unsigned int subsys, unsigned int signal,
return 0;
if (subscr->flags & GSM_SUBSCRIBER_FIRST_CONTACT) {
struct gsm_subscriber *sender;
uint32_t token;
char *sms_str;
@ -79,7 +80,13 @@ static int token_subscr_cb(unsigned int subsys, unsigned int signal,
goto unauth;
}
sms = sms_from_text(subscr, 0, sms_str);
/* FIXME: don't use ID 1 static */
sender = subscr_get_by_id(subscr->net, 1);
sms = sms_from_text(subscr, sender, 0, sms_str);
subscr_put(sender);
talloc_free(sms_str);
if (!sms) {
rc = -ENOMEM;

View File

@ -144,12 +144,13 @@ DEFUN(sms_send_pend,
return CMD_SUCCESS;
}
static int _send_sms_str(struct gsm_subscriber *receiver, char *str,
uint8_t tp_pid)
static int _send_sms_str(struct gsm_subscriber *receiver,
struct gsm_subscriber *sender,
char *str, uint8_t tp_pid)
{
struct gsm_sms *sms;
sms = sms_from_text(receiver, 0, str);
sms = sms_from_text(receiver, sender, 0, str);
sms->protocol_id = tp_pid;
/* store in database for the queue */
@ -229,24 +230,39 @@ DEFUN(subscriber_send_pending_sms,
DEFUN(subscriber_send_sms,
subscriber_send_sms_cmd,
"subscriber " SUBSCR_TYPES " ID sms send .LINE",
"subscriber " SUBSCR_TYPES " ID sms sender " SUBSCR_TYPES " SENDER_ID send .LINE",
SUBSCR_HELP "SMS Operations\n" "Send SMS\n" "Actual SMS Text")
{
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
struct gsm_subscriber *subscr = get_subscr_by_argv(gsmnet, argv[0], argv[1]);
struct gsm_subscriber *sender = get_subscr_by_argv(gsmnet, argv[2], argv[3]);
char *str;
int rc;
if (!subscr) {
vty_out(vty, "%% No subscriber found for %s %s%s",
argv[0], argv[1], VTY_NEWLINE);
return CMD_WARNING;
rc = CMD_WARNING;
goto err;
}
str = argv_concat(argv, argc, 2);
rc = _send_sms_str(subscr, str, 0);
if (!sender) {
vty_out(vty, "%% No sender found for %s %s%s",
argv[2], argv[3], VTY_NEWLINE);
rc = CMD_WARNING;
goto err;
}
str = argv_concat(argv, argc, 4);
rc = _send_sms_str(subscr, sender, str, 0);
talloc_free(str);
subscr_put(subscr);
err:
if (sender)
subscr_put(sender);
if (subscr)
subscr_put(subscr);
return rc;
}
@ -259,20 +275,34 @@ DEFUN(subscriber_silent_sms,
{
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
struct gsm_subscriber *subscr = get_subscr_by_argv(gsmnet, argv[0], argv[1]);
struct gsm_subscriber *sender = get_subscr_by_argv(gsmnet, argv[2], argv[3]);
char *str;
int rc;
if (!subscr) {
vty_out(vty, "%% No subscriber found for %s %s%s",
argv[0], argv[1], VTY_NEWLINE);
return CMD_WARNING;
rc = CMD_WARNING;
goto err;
}
str = argv_concat(argv, argc, 2);
rc = _send_sms_str(subscr, str, 64);
if (!sender) {
vty_out(vty, "%% No sender found for %s %s%s",
argv[2], argv[3], VTY_NEWLINE);
rc = CMD_WARNING;
goto err;
}
str = argv_concat(argv, argc, 4);
rc = _send_sms_str(subscr, sender, str, 64);
talloc_free(str);
subscr_put(subscr);
err:
if (sender)
subscr_put(sender);
if (subscr)
subscr_put(subscr);
return rc;
}