diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/util/shell.c | 32 |
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; |