BOOL net_sms_in(char *caller, char *buf) { // The buf contains an SMS command // and caller contains the caller telephone number char *p; int k; // Convert SMS command (first word) to upper-case for (p=buf; ((*p!=0)&&(*p!=' ')); p++) if ((*p > 0x60) && (*p < 0x7b)) *p=*p-0x20; if (*p==' ') p++; // Command parsing... for (k=0; sms_cmdtable[k][0] != 0; k++) { if (memcmppgm2ram(buf, (char const rom far*)sms_cmdtable[k]+1, strlenpgm((char const rom far*)sms_cmdtable[k])-1) == 0) { BOOL result = FALSE; char *arguments = net_sms_initargs(p); if (!net_sms_checkauth(sms_cmdtable[k][0], caller, &arguments)) return FALSE; // auth error if (vehicle_fn_smshandler != NULL) { if (vehicle_fn_smshandler(TRUE, caller, buf, arguments)) return TRUE; // handled } result = (*sms_hfntable[k])(caller, buf, arguments); if (result) { if (vehicle_fn_smshandler != NULL) vehicle_fn_smshandler(FALSE, caller, buf, arguments); net_send_sms_finish(); } return result; } } if (vehicle_fn_smsextensions != NULL) { // Try passing the command to the vehicle module for handling... if (vehicle_fn_smsextensions(caller, buf, p)) return TRUE; // handled } // SMS didn't match any command pattern, forward to user via net msg net_msg_forward_sms(caller, buf); return FALSE; // unknown command }
void net_sms_in(char *caller, char *buf, unsigned char pos) { // The buf contains an SMS command // and caller contains the caller telephone number char *p; // Convert SMS command (first word) to upper-case for (p=buf; ((*p!=0)&&(*p!=' ')); p++) if ((*p > 0x60) && (*p < 0x7b)) *p=*p-0x20; // Command parsing... if (memcmppgm2ram(buf, (char const rom far*)"REGISTER ", 9) == 0) { // Register phone p = par_get(PARAM_REGPASS); if (strncmp(p,buf+9,strlen(p))==0) { par_set(PARAM_REGPHONE, caller); net_send_sms_rom(caller,NET_MSG_REGISTERED); } else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else if (memcmppgm2ram(buf, (char const rom far*)"PASS ", 5) == 0) { p = par_get(PARAM_REGPHONE); if (strncmp(p,caller,strlen(p)) == 0) { par_set(PARAM_REGPASS, buf+5); net_send_sms_rom(caller,NET_MSG_PASSWORD); } else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else if (memcmppgm2ram(buf, (char const rom far*)"GPS ", 4) == 0) { p = par_get(PARAM_REGPASS); if (strncmp(p,buf+4,strlen(p))==0) net_sms_gps(caller); else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else if (memcmppgm2ram(buf, (char const rom far*)"GPS", 3) == 0) { p = par_get(PARAM_REGPHONE); if (strncmp(p,caller,strlen(p)) == 0) net_sms_gps(caller); else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else if (memcmppgm2ram(buf, (char const rom far*)"STAT ", 5) == 0) { p = par_get(PARAM_REGPASS); if (strncmp(p,buf+5,strlen(p))==0) net_sms_stat(caller); else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else if (memcmppgm2ram(buf, (char const rom far*)"STAT", 4) == 0) { p = par_get(PARAM_REGPHONE); if (strncmp(p,caller,strlen(p)) == 0) net_sms_stat(caller); else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else if (memcmppgm2ram(buf, (char const rom far*)"PARAMS?", 7) == 0) { p = par_get(PARAM_REGPHONE); if (strncmp(p,caller,strlen(p)) == 0) net_sms_params(caller); else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else if (memcmppgm2ram(buf, (char const rom far*)"PARAMS ", 7) == 0) { p = par_get(PARAM_REGPHONE); if (strncmp(p,caller,strlen(p)) == 0) { unsigned char d = PARAM_MILESKM; unsigned char x = 7; unsigned char y = x; while ((y<=(pos+1))&&(d < PARAM_MAX)) { if ((buf[y] == ' ')||(buf[y] == '\0')) { buf[y] = '\0'; if ((buf[x]=='-')&&(buf[x+1]=='\0')) buf[x] = '\0'; // Special case '-' is empty value par_set(d++, buf+x); x=++y; } else y++; } net_send_sms_rom(caller,NET_MSG_PARAMS); net_state_enter(NET_STATE_SOFTRESET); } else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else if (memcmppgm2ram(buf, (char const rom far*)"FEATURE ", 8) == 0) { p = par_get(PARAM_REGPHONE); if (strncmp(p,caller,strlen(p)) == 0) { unsigned char y = 8; unsigned int f; while (y<=(pos+1)) { if ((buf[y] == ' ')||(buf[y] == '\0')) { buf[y] = '\0'; f = atoi(buf+8); if ((f>=0)&&(f<FEATURES_MAX)) sys_features[f] = atoi(buf+y+1); break; // Exit the while loop, as we are done } else y++; } } else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else if (memcmppgm2ram(buf, (char const rom far*)"RESET", 5) == 0) { p = par_get(PARAM_REGPHONE); if (strncmp(p,caller,strlen(p)) == 0) { net_state_enter(NET_STATE_HARDRESET); } else { #ifndef OVMS_SUPPRESS_ACCESSDENIED_SMS net_send_sms_rom(caller,NET_MSG_DENIED); #endif } } else // SMS didn't match any command pattern, forward to user via net msg { net_msg_forward_sms(caller, buf); } }