|
@@ -225,6 +225,8 @@ void http_server_netconn_serve(struct netconn *conn) {
|
|
|
uint8_t autoexec_flag=0;
|
|
|
int buflen=MAX_COMMAND_LINE_SIZE+strlen(template)+1;
|
|
|
char * buff = malloc(buflen);
|
|
|
+ char *s = "\"";
|
|
|
+ char *r = "\\\"";
|
|
|
if(!buff)
|
|
|
{
|
|
|
ESP_LOGE(TAG,"Unable to allocate buffer for config.json!");
|
|
@@ -242,7 +244,7 @@ void http_server_netconn_serve(struct netconn *conn) {
|
|
|
do {
|
|
|
snprintf(autoexec_name,sizeof(autoexec_name)-1,"autoexec%u",i);
|
|
|
ESP_LOGD(TAG,"Getting command name %s", autoexec_name);
|
|
|
- autoexec_value= wifi_manager_alloc_get_config(autoexec_name, &l);
|
|
|
+ autoexec_value = wifi_manager_alloc_get_config(autoexec_name, &l);
|
|
|
if(autoexec_value!=NULL ){
|
|
|
if(i>1)
|
|
|
{
|
|
@@ -250,6 +252,7 @@ void http_server_netconn_serve(struct netconn *conn) {
|
|
|
ESP_LOGD(TAG,"%s", array_separator);
|
|
|
}
|
|
|
ESP_LOGI(TAG,"found command %s = %s", autoexec_name, autoexec_value);
|
|
|
+ strreplace(autoexec_value, s, r);
|
|
|
snprintf(buff, buflen-1, template, autoexec_name, autoexec_value);
|
|
|
netconn_write(conn, buff, strlen(buff), NETCONN_NOCOPY);
|
|
|
ESP_LOGD(TAG,"%s", buff);
|
|
@@ -289,13 +292,23 @@ void http_server_netconn_serve(struct netconn *conn) {
|
|
|
}
|
|
|
|
|
|
do {
|
|
|
- snprintf(autoexec_name,sizeof(autoexec_name)-1,"X-Custom-autoexec%u: ",i);
|
|
|
- snprintf(autoexec_key,sizeof(autoexec_key)-1,"autoexec%u",i++);
|
|
|
+ if(snprintf(autoexec_name,sizeof(autoexec_name)-1,"X-Custom-autoexec%u: ",i)<0)
|
|
|
+ {
|
|
|
+ ESP_LOGE(TAG,"Unable to process autoexec%u. Name length overflow.",i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if(snprintf(autoexec_key,sizeof(autoexec_key)-1,"autoexec%u",i++)<0)
|
|
|
+ {
|
|
|
+ ESP_LOGE(TAG,"Unable to process autoexec%u. Name length overflow.",i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
ESP_LOGD(TAG,"Looking for command name %s.", autoexec_name);
|
|
|
autoexec_value = http_server_get_header(save_ptr, autoexec_name, &lenS);
|
|
|
- snprintf(autoexec_value, lenS+1, autoexec_value);
|
|
|
+
|
|
|
|
|
|
if(autoexec_value ){
|
|
|
+ // todo: replace line below, as it causes an error during compile.
|
|
|
+ // snprintf(autoexec_value, lenS+1, autoexec_value);
|
|
|
if(lenS < MAX_COMMAND_LINE_SIZE ){
|
|
|
ESP_LOGD(TAG, "http_server_netconn_serve: config.json/ call, with %s: %s, length %i", autoexec_key, autoexec_value, lenS);
|
|
|
wifi_manager_save_autoexec_config(autoexec_value,autoexec_key,lenS);
|
|
@@ -367,3 +380,23 @@ void http_server_netconn_serve(struct netconn *conn) {
|
|
|
/* free the buffer */
|
|
|
netbuf_delete(inbuf);
|
|
|
}
|
|
|
+
|
|
|
+void strreplace(char *src, char *str, char *rep)
|
|
|
+{
|
|
|
+ char *p = strstr(src, str);
|
|
|
+ if (p)
|
|
|
+ {
|
|
|
+ int len = strlen(src)+strlen(rep)-strlen(str);
|
|
|
+ char r[len];
|
|
|
+ memset(r, 0, len);
|
|
|
+ if ( p >= src ){
|
|
|
+ strncpy(r, src, p-src);
|
|
|
+ r[p-src]='\0';
|
|
|
+ strncat(r, rep, strlen(rep));
|
|
|
+ strncat(r, p+strlen(str), p+strlen(str)-src+strlen(src));
|
|
|
+ strcpy(src, r);
|
|
|
+ strreplace(p+strlen(rep), str, rep);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|