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:
parent
11c1b6e014
commit
01c13a3a45
|
@ -29,7 +29,7 @@ int gsm0411_rcv_sms(struct gsm_subscriber_connection *conn, struct msgb *msg);
|
||||||
|
|
||||||
struct gsm_sms *sms_alloc(void);
|
struct gsm_sms *sms_alloc(void);
|
||||||
void sms_free(struct gsm_sms *sms);
|
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);
|
void _gsm411_sms_trans_free(struct gsm_trans *trans);
|
||||||
int gsm411_send_sms_subscr(struct gsm_subscriber *subscr,
|
int gsm411_send_sms_subscr(struct gsm_subscriber *subscr,
|
||||||
|
|
|
@ -84,7 +84,9 @@ void sms_free(struct gsm_sms *sms)
|
||||||
talloc_free(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();
|
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);
|
sms->receiver = subscr_get(receiver);
|
||||||
strncpy(sms->text, text, sizeof(sms->text)-1);
|
strncpy(sms->text, text, sizeof(sms->text)-1);
|
||||||
|
|
||||||
/* FIXME: don't use ID 1 static */
|
sms->sender = subscr_get(sender);
|
||||||
sms->sender = subscr_get_by_id(receiver->net, 1);
|
|
||||||
strncpy(sms->src.addr, sms->sender->extension, sizeof(sms->src.addr)-1);
|
strncpy(sms->src.addr, sms->sender->extension, sizeof(sms->src.addr)-1);
|
||||||
sms->reply_path_req = 0;
|
sms->reply_path_req = 0;
|
||||||
sms->status_rep_req = 0;
|
sms->status_rep_req = 0;
|
||||||
|
|
|
@ -63,6 +63,7 @@ static int token_subscr_cb(unsigned int subsys, unsigned int signal,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (subscr->flags & GSM_SUBSCRIBER_FIRST_CONTACT) {
|
if (subscr->flags & GSM_SUBSCRIBER_FIRST_CONTACT) {
|
||||||
|
struct gsm_subscriber *sender;
|
||||||
uint32_t token;
|
uint32_t token;
|
||||||
char *sms_str;
|
char *sms_str;
|
||||||
|
|
||||||
|
@ -79,7 +80,13 @@ static int token_subscr_cb(unsigned int subsys, unsigned int signal,
|
||||||
goto unauth;
|
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);
|
talloc_free(sms_str);
|
||||||
if (!sms) {
|
if (!sms) {
|
||||||
rc = -ENOMEM;
|
rc = -ENOMEM;
|
||||||
|
|
|
@ -144,12 +144,13 @@ DEFUN(sms_send_pend,
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _send_sms_str(struct gsm_subscriber *receiver, char *str,
|
static int _send_sms_str(struct gsm_subscriber *receiver,
|
||||||
uint8_t tp_pid)
|
struct gsm_subscriber *sender,
|
||||||
|
char *str, uint8_t tp_pid)
|
||||||
{
|
{
|
||||||
struct gsm_sms *sms;
|
struct gsm_sms *sms;
|
||||||
|
|
||||||
sms = sms_from_text(receiver, 0, str);
|
sms = sms_from_text(receiver, sender, 0, str);
|
||||||
sms->protocol_id = tp_pid;
|
sms->protocol_id = tp_pid;
|
||||||
|
|
||||||
/* store in database for the queue */
|
/* store in database for the queue */
|
||||||
|
@ -229,24 +230,39 @@ DEFUN(subscriber_send_pending_sms,
|
||||||
|
|
||||||
DEFUN(subscriber_send_sms,
|
DEFUN(subscriber_send_sms,
|
||||||
subscriber_send_sms_cmd,
|
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")
|
SUBSCR_HELP "SMS Operations\n" "Send SMS\n" "Actual SMS Text")
|
||||||
{
|
{
|
||||||
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
|
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
|
||||||
struct gsm_subscriber *subscr = get_subscr_by_argv(gsmnet, argv[0], argv[1]);
|
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;
|
char *str;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (!subscr) {
|
if (!subscr) {
|
||||||
vty_out(vty, "%% No subscriber found for %s %s%s",
|
vty_out(vty, "%% No subscriber found for %s %s%s",
|
||||||
argv[0], argv[1], VTY_NEWLINE);
|
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);
|
talloc_free(str);
|
||||||
|
|
||||||
subscr_put(subscr);
|
err:
|
||||||
|
if (sender)
|
||||||
|
subscr_put(sender);
|
||||||
|
|
||||||
|
if (subscr)
|
||||||
|
subscr_put(subscr);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -259,20 +275,34 @@ DEFUN(subscriber_silent_sms,
|
||||||
{
|
{
|
||||||
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
|
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
|
||||||
struct gsm_subscriber *subscr = get_subscr_by_argv(gsmnet, argv[0], argv[1]);
|
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;
|
char *str;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (!subscr) {
|
if (!subscr) {
|
||||||
vty_out(vty, "%% No subscriber found for %s %s%s",
|
vty_out(vty, "%% No subscriber found for %s %s%s",
|
||||||
argv[0], argv[1], VTY_NEWLINE);
|
argv[0], argv[1], VTY_NEWLINE);
|
||||||
return CMD_WARNING;
|
rc = CMD_WARNING;
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
str = argv_concat(argv, argc, 2);
|
if (!sender) {
|
||||||
rc = _send_sms_str(subscr, str, 64);
|
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);
|
talloc_free(str);
|
||||||
|
|
||||||
subscr_put(subscr);
|
err:
|
||||||
|
if (sender)
|
||||||
|
subscr_put(sender);
|
||||||
|
|
||||||
|
if (subscr)
|
||||||
|
subscr_put(subscr);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue