summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/util/shell.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/util/shell.c b/src/util/shell.c
index ae07afc..63261ad 100644
--- a/src/util/shell.c
+++ b/src/util/shell.c
@@ -389,7 +389,7 @@ static int shell_help(void)
"\tsd\tSMS Delete (sd=index,delflg)\n"
"\tsl\tSMS List (sl=stat)\n"
"\tsr\tSMS Read (sr=index)\n"
- "\tss\tSMS Send (ss=number,text)\n"
+ "\tss\tSMS Send (ss=number,text|[\"text\"])\n"
"\tsw\tSMS Write (sw=stat,number,text)\n"
"\tsm\tSMS Storage stats\n"
"\tsM\tSMS Set preferred storage (sM=mem1,mem2,mem3)\n"
@@ -612,16 +612,36 @@ int shell_main(struct lgsm_handle *lgsmh)
lgsm_sms_read(lgsmh, atoi(ptr+1));
} else if ( !strncmp(buf, "ss", 2)) {
- printf("Send SMS\n");
struct lgsm_sms sms;
ptr = strchr(buf, '=');
fcomma = strchr(buf, ',');
- strncpy(sms.addr, ptr+1, fcomma-ptr-1);
- sms.addr[fcomma-ptr-1] = '\0';
- packing_7bit_character(fcomma+1, &sms);
+ if (!ptr || !fcomma) {
+ printf("Wrong command format\n");
+ } else {
+ strncpy(sms.addr, ptr+1, fcomma-ptr-1);
+ sms.addr[fcomma-ptr-1] = '\0';
+
+ /* todo define \" to allow " in text */
+ if (fcomma[1] == '"' &&
+ !strchr(fcomma+2, '"')) {
+ /* read until closing '"' */
+ rc = fscanf(stdin, "%[^\"]\"",
+ fcomma+strlen(fcomma));
+ if (rc == EOF) {
+ printf("EOF\n");
+ return -1;
+ }
+ /* remove brackets */
+ fcomma++;
+ fcomma[strlen(fcomma)] = '\0';
+ }
+
+ printf("Send SMS\n");
+ packing_7bit_character(fcomma+1, &sms);
- lgsm_sms_send(lgsmh, &sms);
+ lgsm_sms_send(lgsmh, &sms);
+ }
} else if ( !strncmp(buf, "sw", 2)) {
printf("Write SMS\n");
struct lgsm_sms_write sms_write;
personal git repositories of Harald Welte. Your mileage may vary