### Eclipse Workspace Patch 1.0 #P ecos Index: net/athttpd/current/doc/athttpd.sgml =================================================================== RCS file: /cvs/ecos/ecos-opt/net/net/athttpd/current/doc/athttpd.sgml,v retrieving revision 1.5 diff -u -r1.5 athttpd.sgml --- net/athttpd/current/doc/athttpd.sgml 12 Nov 2007 11:32:02 -0000 1.5 +++ net/athttpd/current/doc/athttpd.sgml 12 Nov 2007 15:20:46 -0000 @@ -365,6 +365,40 @@ + +tcl hello world + +end_chunked + +#This will replace print /ram/log as a valid html file w/replacing \n w/<br> +#log.tcl +start_chunked "html"; + +set fp [aio.open "/ram/log" r]; +$fp seek 0 end; +set fsize [$fp tell]; +$fp seek 0 start; +set data "abcxxx"; +set data [$fp read $fsize]; +$fp close; +set data [string map {\n
} $data]; + +set datax ""; +append datax "" $data ""; + +write_chunked $datax; +end_chunked; +
+ +The above is an example of how to convert a log file in /ram/log to +HTML code. Copy the log.tcl above to a file system on your embedded +target and navigate to http://10.0.0.66/cgi-bin/hello.tcl. The tcl script +is then executed, where 10.0.0.66 is the IP and "cgi-bin" is the cgi-bin +directory. + +
+ + Authentication Index: net/athttpd/current/src/forms.c =================================================================== RCS file: /cvs/ecos/ecos-opt/net/net/athttpd/current/src/forms.c,v retrieving revision 1.3 diff -u -r1.3 forms.c --- net/athttpd/current/src/forms.c 27 Nov 2006 15:41:56 -0000 1.3 +++ net/athttpd/current/src/forms.c 12 Nov 2007 15:20:46 -0000 @@ -252,16 +252,6 @@ if (httpstate.mode & CYG_HTTPD_MODE_FORM_DATA) cyg_httpd_store_form_data(httpstate.post_data); - handler h = cyg_httpd_find_handler(); - if (h != 0) - { - // A handler was found. We'll call the function associated to it. - h(&httpstate); - free(httpstate.post_data); - httpstate.post_data = NULL; - return; - } - #if defined(CYGOPT_NET_ATHTTPD_USE_CGIBIN_OBJLOADER) || \ defined(CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL) // See if we are trying to execute a CGI via one of the supported methods. @@ -282,6 +272,17 @@ return; } #endif + + handler h = cyg_httpd_find_handler(); + if (h != 0) + { + // A handler was found. We'll call the function associated to it. + h(&httpstate); + free(httpstate.post_data); + httpstate.post_data = NULL; + return; + } + // No handler of any kind for a post request. Must send 404. cyg_httpd_send_error(CYG_HTTPD_STATUS_NOT_FOUND); Index: net/athttpd/current/src/http.c =================================================================== RCS file: /cvs/ecos/ecos-opt/net/net/athttpd/current/src/http.c,v retrieving revision 1.3 diff -u -r1.3 http.c --- net/athttpd/current/src/http.c 27 Nov 2006 15:41:56 -0000 1.3 +++ net/athttpd/current/src/http.c 12 Nov 2007 15:20:47 -0000 @@ -708,15 +708,7 @@ void cyg_httpd_handle_method_GET(void) { - // Use defined handlers take precedence over other forms of response. - handler h = cyg_httpd_find_handler(); - if (h != 0) - { - h(&httpstate); - return; - } - -#ifdef CYGOPT_NET_ATHTTPD_USE_CGIBIN_OBJLOADER +#if defined(CYGOPT_NET_ATHTTPD_USE_CGIBIN_OBJLOADER) || defined(CYGOPT_NET_ATHTTPD_USE_CGIBIN_TCL) // If the URL is a CGI script, there is a different directory... if (httpstate.url[0] == '/' && !strncmp(httpstate.url + 1, @@ -730,6 +722,15 @@ // will likely generate a 404. #endif + // Use defined handlers take precedence over other forms of response. + handler h = cyg_httpd_find_handler(); + if (h != 0) + { + h(&httpstate); + return; + } + + #ifdef CYGOPT_NET_ATHTTPD_USE_FS // No handler, we'll redirect to the file system. cyg_httpd_send_file(httpstate.url); @@ -940,28 +941,28 @@ } else if (strncasecmp(p, "Digest", 6) == 0) { - p += 6; - while (*p == ' ') - p++; + p += 6; + while (*p == ' ') + p++; while ((*p != '\r') && (*p != '\n')) - { - if (strncasecmp(p, "realm=", 6) == 0) + { + if (strncasecmp(p, "realm=", 6) == 0) p = cyg_httpd_digest_skip(p + 6); - else if (strncasecmp(p, "username=", 9) == 0) + else if (strncasecmp(p, "username=", 9) == 0) p = cyg_httpd_digest_skip(p + 9); else if (strncasecmp(p, "nonce=", 6) == 0) p = cyg_httpd_digest_skip(p + 6); - else if (strncasecmp(p, "response=", 9) == 0) + else if (strncasecmp(p, "response=", 9) == 0) p = cyg_httpd_digest_data(cyg_httpd_md5_response, p + 9); - else if (strncasecmp(p, "cnonce=", 7) == 0) + else if (strncasecmp(p, "cnonce=", 7) == 0) p = cyg_httpd_digest_data(cyg_httpd_md5_cnonce, p + 7); - else if (strncasecmp(p, "qop=", 4) == 0) + else if (strncasecmp(p, "qop=", 4) == 0) p = cyg_httpd_digest_skip(p + 4); - else if (strncasecmp(p, "nc=", 3) == 0) + else if (strncasecmp(p, "nc=", 3) == 0) p = cyg_httpd_digest_data(cyg_httpd_md5_noncecount, p + 3); - else if (strncasecmp(p, "algorithm=", 10) == 0) + else if (strncasecmp(p, "algorithm=", 10) == 0) p = cyg_httpd_digest_skip(p + 10); else if (strncasecmp(p, "opaque=", 7) == 0) p = cyg_httpd_digest_skip(p + 7); Index: net/athttpd/current/ChangeLog =================================================================== RCS file: /cvs/ecos/ecos-opt/net/net/athttpd/current/ChangeLog,v retrieving revision 1.8 diff -u -r1.8 ChangeLog --- net/athttpd/current/ChangeLog 12 Nov 2007 13:33:12 -0000 1.8 +++ net/athttpd/current/ChangeLog 12 Nov 2007 15:20:45 -0000 @@ -1,7 +1,12 @@ 2007-11-12 Oyvind Harboe + * doc/athttpd.sgml: added an example of a tcl script. + * src/http.c, forms.c: serve cgi requests before file system requests, that + way it isn't possible to download the actual cgi/.o script and cgi works + even if the http root directory is above the cgi directory. + * src/http.c: if only tcl cgi is enabled, cgi requests are now forwarded to tcl * include/jim.h: include file order fix; now compiles again. - * doc/athttpd.cdl: Fixed typos in doc. Return value from handler is not + * doc/athttpd.sgml: Fixed typos in doc. Return value from handler is not used, recommend returning 0 in doc. 2006-12-03 Anthony Tonizzo