Changelog for zjhttpd =================== 2003-09-07 The config file parsing is done, the files are created (README, CHANGES and the like), nothing interessing happened. 2003-09-26 The request-stuff is done, but only for the first line. It is parsed into path, host, port and uri_data, so httpd will be able to deal with stuff like "http://www.foo.bar:8080/gnarf" as URI. Note that this isn't usual, because in the GET request most often only the path is provided. RFC2616 tells us, that the user MAY put the whole URI there, so it is a good idea to be able to understand it. The code is still good commented and clean. I used enums and defines wherever it was possible. The parsing functions return as error code the appropriate HTTP-error-code (should be better for logging, that was a problem in Smeagol when I tried to implement the w3c-standard for logfiles). There are new DEBUG functions, but in print_out_request there is currently no special code, it's marked as TODO. I noticed that it is difficult to be concentrated for more than 2,5 hours, so I will take a pause in order to avoid slips of the pen. 2003-09-27 The request-stuff is finished for now (I will add the password-stuff later, I think), but not tested. The debug function prints out the stuff from the request-struct, ready for testing everything. I have to add a function that cleans up after processing the request, since we have a loop that may run a long time and the request-stuff uses heavily strdup(3) und *alloc(3). 2003-09-28 Wow, it's getting useable ;-) I've added a bit to the request-stuff (Host: is now parsed into host and port), the command line arguments are now complete, the conf-file parsing works AND it sets the values (I wonder why I forget to set them). The sanity checks are done (Host for HTTP/1.1, Keep-Alive per default on, etc.), but I think there is something missing. The freeing-stuff is done, all the strdups and *allocs (for the ranges, btw.) are freed. I also added the send_error-functions. It is one function, that looks whether to send HTML or plain text (depending on req->error_file_path or something like this). There are some useful function in misc like http_datestring(time_t) and http_serverstring(void). I tested the parsing things a little bit (also with Opera as a real-world-client), it still seems to work. A TODO list is added. 2003-09-29 2003-09-30 2003-10-01 2003-10-02 Fuck, I didn't log the changes ;-) Well, the GET now works, with the full byte ranges (what an ache!) and boundary-stuff. Logging also works (was a little tricky to pass the sent bytes back to the toplevel of the request-functions). Manpage is written (on the night 2003-09-29/2003-09-30), Makefile is improved. This reads a little shorter, but the last 3 days I added about 1500 lines of code. It's getting huge, all together about 65 KB of source. 2003-10-05 Dotfile-behaviuor fixed Directory-Browsing support implemented HTTP/0.9 disabled New config items: default_ct, dotfiles, dirlisting Memory Leak for HEAD / Ranges fixed Future Timestamps fixed Extended Logging enabled 2003-10-07 We now support all three timeformats Every source file has now a comment that introduces to the file and tells what is done there (and how). I hope this makes the things a little bit more transparent. The documentation has been updated and the package is prepared for release. The only thing left is: testing, testing, testing. I'm going to write a test suite for that purpose, and depending on its size it may be distributed as a standalone package. This would be useful for other developers of webservers, since they can test their servers as well. I think I'll use perl for this, but at the moment I'm not good in that, so the test suite may take a while. 2003-10-08 Hehe, there are some fflush(stdout) missing, added a few, I hope I got them all. Package seems ready to be released, install and uninstall targets are added to Makefile. 2003-11-14 http_send_error() now clears the keep-alive flag, damn, I was sure to have already done this. It is so stupid... Ah, the project is now renamed into zjhttpd - sorry fokls, but it doesn't seem that I will find a better name. ************************************* * First unofficial release: 0.1-rc1 * ************************************* 2003-11-15 Not everything was renamed from httpd to zjhttpd: several values in zjhttpd.h (and zjhttpd.conf) haven't been changed, becuase I searched with "grep httpd *.c | grep -v zjhttpd" and, of course, every file with zjhttpd in the name was skipped ;-) The real problem caused by this was, that the default config file wasn't read and thus the server didn't behave like the user expected. The dirlistings now display directories as "dir/", not as "dir". They also don't show dotfiles (which does not mean that you cannot reach them, this depends on view_dotfiles from the configuration) now. There seem to be a problem with the Moved Permanently-messages generated if a directory is requested without trailing slash. It doesn't occure on my machine, but on my cousin's. Perhaps a difference in realpath(3) on Linux? ************************************** * Second unofficial release: 0.1-rc2 * ************************************** 2003-12-30 Fixed a possible Buffer Overflow in get_head.c, generate_chunk_header() 2004-01-03 Add an "#include " in response.c, fixed a spelling mistake in a comment (uuuuuh ;-)) 2004-01-09 Added some failure checking in get_head.c, replaced the malloc-and-memcpy stuff with strdup (in generate_chunk_list()). %F replaced with %Y-%m-%d (misc.c, generate_dirlisting), because the compiler complains about this (but it IS valid, POSIX says). *************************************** * First official release: 0.1-RELEASE * ***************************************