mirror of https://github.com/jeelabs/esp-link.git
parent
8919ff6a87
commit
f315385534
@ -0,0 +1,79 @@ |
||||
#include <esp8266.h> |
||||
#include "cgi.h" |
||||
#include "config.h" |
||||
#include "serbridge.h" |
||||
|
||||
// Cgi to return choice of Telnet ports
|
||||
int ICACHE_FLASH_ATTR cigTelnetGet(HttpdConnData *connData) { |
||||
if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted
|
||||
|
||||
char buff[1024]; |
||||
int len; |
||||
|
||||
len = os_sprintf(buff, |
||||
"{ \"telnet-port1\":%d, \"telnet-port2\":%d }", |
||||
flashConfig.telnet_port1, flashConfig.telnet_port2); |
||||
|
||||
jsonHeader(connData, 200); |
||||
httpdSend(connData, buff, len); |
||||
return HTTPD_CGI_DONE; |
||||
} |
||||
|
||||
// Cgi to change choice of Telnet ports
|
||||
int ICACHE_FLASH_ATTR cgiTelnetSet(HttpdConnData *connData) { |
||||
if (connData->conn==NULL) { |
||||
return HTTPD_CGI_DONE; // Connection aborted
|
||||
} |
||||
|
||||
int8_t ok = 0; |
||||
int8_t port1, port2; |
||||
ok |= getInt8Arg(connData, "port1", &port1); |
||||
ok |= getInt8Arg(connData, "port2", &port2); |
||||
if (ok < 0) return HTTPD_CGI_DONE; |
||||
|
||||
char *coll; |
||||
if (ok > 0) { |
||||
// check whether ports are different
|
||||
uint16_t pins = 0; |
||||
if (port1 == port2) { coll = "Ports cannot be the same!"; goto collision; } |
||||
|
||||
// we're good, set flashconfig
|
||||
flashConfig.telnet_port1 = port1; |
||||
flashConfig.telnet_port2 = port2; |
||||
os_printf("Ports changed: port1=%d port2=%d\n", |
||||
port1, port2); |
||||
|
||||
// apply the changes
|
||||
serbridgeInitPins(); |
||||
|
||||
// save to flash
|
||||
if (configSave()) { |
||||
httpdStartResponse(connData, 204); |
||||
httpdEndHeaders(connData); |
||||
} else { |
||||
httpdStartResponse(connData, 500); |
||||
httpdEndHeaders(connData); |
||||
httpdSend(connData, "Failed to save config", -1); |
||||
} |
||||
} |
||||
return HTTPD_CGI_DONE; |
||||
|
||||
collision: { |
||||
char buff[128]; |
||||
os_sprintf(buff, "Ports assignment for %s collides with another assignment", coll); |
||||
errorResponse(connData, 400, buff); |
||||
return HTTPD_CGI_DONE; |
||||
} |
||||
} |
||||
|
||||
int ICACHE_FLASH_ATTR cgiTelnet(HttpdConnData *connData) { |
||||
if (connData->conn==NULL) return HTTPD_CGI_DONE; // Connection aborted. Clean up.
|
||||
if (connData->requestType == HTTPD_METHOD_GET) { |
||||
return cgiTelnetGet(connData); |
||||
} else if (connData->requestType == HTTPD_METHOD_POST) { |
||||
return cgiTelnetSet(connData); |
||||
} else { |
||||
jsonHeader(connData, 404); |
||||
return HTTPD_CGI_DONE; |
||||
} |
||||
} |
Loading…
Reference in new issue