From d3f5c8978b03f8ed1791c9d385ebb2e439550639 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Mon, 12 Nov 2018 11:13:05 +0100 Subject: [PATCH] Update command WebSend * Change command WebSend Host header field from IP address to hostname (#4331) * Add to command WebSend option to send a direct path when command starts with a slash (#4329) --- sonoff/_changelog.ino | 1 + sonoff/xdrv_01_webserver.ino | 36 +++++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/sonoff/_changelog.ino b/sonoff/_changelog.ino index ce35adbe0..e661b54fb 100644 --- a/sonoff/_changelog.ino +++ b/sonoff/_changelog.ino @@ -2,6 +2,7 @@ * Fix wifi connection errors using wifi disconnect and ESP.reset instead of ESP.restart * Fix Sonoff Pow R2 and Sonoff S31 Serial interface hang caused by Sonoff Basic R2 driver delay implementation (and possibly core bug) * Change command WebSend Host header field from IP address to hostname (#4331) + * Add to command WebSend option to send a direct path when command starts with a slash (#4329) * * 6.3.0.6 20181110 * Change GUI Configure Module by using AJAX for data fetch to cut page size (and memory use) by 40% diff --git a/sonoff/xdrv_01_webserver.ino b/sonoff/xdrv_01_webserver.ino index 6f99b30a1..ed14472cd 100644 --- a/sonoff/xdrv_01_webserver.ino +++ b/sonoff/xdrv_01_webserver.ino @@ -1895,9 +1895,11 @@ String UrlEncode(const String& text) int WebSend(char *buffer) { - // http://192.168.178.86:80/cm?user=admin&password=joker&cmnd=POWER1 ON - // http://192.168.178.86:80/cm?cmnd=POWER1 ON - // [192.168.178.86:80,admin:joker] POWER1 ON + /* [sonoff] POWER1 ON --> Sends http://sonoff/cm?cmnd=POWER1 ON + * [192.168.178.86:80,admin:joker] POWER1 ON --> Sends http://hostname:80/cm?user=admin&password=joker&cmnd=POWER1 ON + * [sonoff] /any/link/starting/with/a/slash.php?log=123 --> Sends http://sonoff/any/link/starting/with/a/slash.php?log=123 + * [sonoff,admin:joker] /any/link/starting/with/a/slash.php?log=123 --> Sends http://sonoff/any/link/starting/with/a/slash.php?log=123 + */ char *host; char *port; @@ -1923,15 +1925,19 @@ int WebSend(char *buffer) if (port) { nport = atoi(port); } String nuri = ""; - if (user && password) { - nuri += F("user="); - nuri += user; - nuri += F("&password="); - nuri += password; - nuri += F("&"); + command = LTrim(command); + if (command[0] != '/') { + nuri = "/cm?"; + if (user && password) { + nuri += F("user="); + nuri += user; + nuri += F("&password="); + nuri += password; + nuri += F("&"); + } + nuri += F("cmnd="); } - nuri += F("cmnd="); - nuri += LTrim(command); + nuri += command; // command = POWER1 ON or /any/link/starting/with/a/slash.php?log=123 String uri = UrlEncode(nuri); IPAddress host_ip; @@ -1947,16 +1953,16 @@ int WebSend(char *buffer) } if (connected) { - String url = F("GET /cm?"); + String url = F("GET "); url += uri; - url += F(" HTTP/1.1\r\n Host: "); + url += F(" HTTP/1.1\r\nHost: "); // url += IPAddress(host_ip).toString(); url += host; // https://tools.ietf.org/html/rfc7230#section-5.4 (#4331) if (port) { - url += F(" \r\n Port: "); + url += F(":"); url += port; } - url += F(" \r\n Connection: close\r\n\r\n"); + url += F("\r\nConnection: close\r\n\r\n"); //snprintf_P(log_data, sizeof(log_data), PSTR("DBG: Url |%s|"), url.c_str()); //AddLog(LOG_LEVEL_DEBUG);