X-Git-Url: http://git.hcoop.net/clinton/Smoothieware.git/blobdiff_plain/d93a22b62f084d4e539b72d82ea4887d537dbee5..80dd1a8ee3414f728baa9e45dd2b14d7045effea:/src/libs/Network/uip/webserver/httpd.c diff --git a/src/libs/Network/uip/webserver/httpd.c b/src/libs/Network/uip/webserver/httpd.c index dedd4335..f9b91fd3 100644 --- a/src/libs/Network/uip/webserver/httpd.c +++ b/src/libs/Network/uip/webserver/httpd.c @@ -95,9 +95,10 @@ #define ISO_slash 0x2f #define ISO_colon 0x3a -#define DEBUG_PRINTF printf -//#define DEBUG_PRINTF(...) +//#define DEBUG_PRINTF printf +#define DEBUG_PRINTF(...) +extern const char *get_query_string(); // this callback gets the results of a command, line by line. need to check if // we need to stall the upstream sender return 0 if stalled 1 if ok to keep @@ -171,12 +172,6 @@ static int save_file(uint8_t *buf, unsigned int len) { if (fwrite(buf, 1, len, fd) == len) { file_cnt += len; - // HACK alert work around bug causing file corruption when writing large amounts of data - if (file_cnt >= 400) { - file_cnt = 0; - fclose(fd); - fd = fopen(output_filename, "a"); - } return 1; } else { @@ -320,6 +315,16 @@ static PT_THREAD(send_headers(struct httpd_state *s, const char *statushdr)) { return send_headers_3(s, statushdr, 1); } +static PT_THREAD(send_string(struct httpd_state *s, const char *str, int duped)) +{ + PSOCK_BEGIN(&s->sout); + + PSOCK_SEND_STR(&s->sout, str); + if(duped) { + free((void *)str); + } + PSOCK_END(&s->sout); +} /*---------------------------------------------------------------------------*/ static PT_THREAD(handle_output(struct httpd_state *s)) @@ -361,7 +366,12 @@ PT_THREAD(handle_output(struct httpd_state *s)) } else { // Presume method GET - if (!fs_open(s)) { // Note this has the side effect of opening the file + + if (strcmp(s->filename, "/query") == 0) { // query short cut + PT_WAIT_THREAD(&s->outputpt, send_headers(s, http_header_200)); + PT_WAIT_THREAD(&s->outputpt, send_string(s, get_query_string(), 1)); + + } else if (!fs_open(s)) { // Note this has the side effect of opening the file DEBUG_PRINTF("404 file not found\n"); httpd_fs_open(http_404_html, &s->file); strcpy(s->filename, http_404_html);