mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-10-29 17:54:14 +08:00
httpd: answer /cmd with the shared text header
The /cmd path carried its own copy of the plain-text response header, which was the same string page_impl.c already keeps in HTTP_RESPONCE_TXT, minus one difference: the shared one never said Connection: close. This httpd closes after every response, so a reply that does not advertise it invites the browser to reuse the socket and lose the next request. HTTP_RESPONCE_JSON has always said so; the text one was the odd one out, and send_config() and send_cmd_log() were answering without it. The copy is gone and the shared string carries the header. The check for a command that printed nothing now compares against the length strtox() returned instead of sizeof() on the macro.
This commit is contained in:
1 parent
a259587bf9
commit
b57b7d1a3d
3 files changed
+7
-8
No files matched your search
+4
-7
@@ -16,11 +16,6 @@
|
|||||||
|
|
||||||
#define CMARK_S 6
|
#define CMARK_S 6
|
||||||
|
|
||||||
/* Answer to POST /cmd. Kept as a macro so that its length is known at compile
|
|
||||||
* time: an unchanged slen afterwards means the command printed nothing. */
|
|
||||||
#define CMD_RESPONSE_HEADER "HTTP/1.1 200 OK\r\nConnection: close\r\n" \
|
|
||||||
"Content-Type: text/plain\r\n\r\n"
|
|
||||||
|
|
||||||
#pragma codeseg BANK1
|
#pragma codeseg BANK1
|
||||||
#pragma constseg BANK1
|
#pragma constseg BANK1
|
||||||
|
|
||||||
@@ -631,7 +626,9 @@ static void handle_firmware_fragment(__xdata uint8_t *p)
|
|||||||
|
|
||||||
static void run_cmd_body(__xdata uint8_t *body)
|
static void run_cmd_body(__xdata uint8_t *body)
|
||||||
{
|
{
|
||||||
slen = strtox(outbuf, CMD_RESPONSE_HEADER);
|
uint16_t hdr_len = strtox(outbuf, HTTP_RESPONCE_TXT);
|
||||||
|
|
||||||
|
slen = hdr_len;
|
||||||
cmd_capture = 1;
|
cmd_capture = 1;
|
||||||
execute_commands(body);
|
execute_commands(body);
|
||||||
if (cmd_capture == 2)
|
if (cmd_capture == 2)
|
||||||
@@ -640,7 +637,7 @@ static void run_cmd_body(__xdata uint8_t *body)
|
|||||||
/* Commands that configure something print nothing at all. Saying
|
/* Commands that configure something print nothing at all. Saying
|
||||||
* so beats an empty body, which reads the same as "nothing ran".
|
* so beats an empty body, which reads the same as "nothing ran".
|
||||||
* Only on success: a silent failure must not answer with "OK". */
|
* Only on success: a silent failure must not answer with "OK". */
|
||||||
if (err_status == ERR_OK && slen == sizeof(CMD_RESPONSE_HEADER) - 1)
|
if (err_status == ERR_OK && slen == hdr_len)
|
||||||
slen += strtox(outbuf + slen, "OK\n");
|
slen += strtox(outbuf + slen, "OK\n");
|
||||||
/* On a parse error keep what the parser printed, because that text
|
/* On a parse error keep what the parser printed, because that text
|
||||||
* is the explanation, and only restate the status. "400 NO" is as
|
* is the explanation, and only restate the status. "400 NO" is as
|
||||||
|
|||||||
+1
-1
@@ -48,7 +48,7 @@ extern __xdata char sfp_module_serial[2][17];
|
|||||||
extern __xdata uint8_t sfp_options[2];
|
extern __xdata uint8_t sfp_options[2];
|
||||||
|
|
||||||
__code uint8_t * __code HTTP_RESPONCE_JSON = "HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: application/json\r\n\r\n";
|
__code uint8_t * __code HTTP_RESPONCE_JSON = "HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: application/json\r\n\r\n";
|
||||||
__code uint8_t * __code HTTP_RESPONCE_TXT = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n";
|
__code uint8_t * __code HTTP_RESPONCE_TXT = "HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\n";
|
||||||
|
|
||||||
// Convert uint8_t to ascii HEX char push on html-buffer.
|
// Convert uint8_t to ascii HEX char push on html-buffer.
|
||||||
void charhex_to_html(char c)
|
void charhex_to_html(char c)
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
extern __code uint8_t * __code HTTP_RESPONCE_TXT;
|
||||||
|
|
||||||
bool send_counters(uint8_t phys_port);
|
bool send_counters(uint8_t phys_port);
|
||||||
void send_status(void);
|
void send_status(void);
|
||||||
void send_vlan(uint16_t vlan);
|
void send_vlan(uint16_t vlan);
|
||||||
|
|||||||
Reference in new issue
Block a user