<LI>Altered cgi-bin.info to display the contents of the HTTP$ variables.
<BR><B>02 Jan 1997</B>
<LI>System variable stuff sorted out, as certain filenames were being set literally, when they contained system variable references.
<LI>Readheader WHILE loop altered so that socket_readinputsize doesn't get called when a socket may no longer be active.
<BR><B>21 Dec 1996</B>
<LI>Problem with requesting 'cgi-bin/prog' that it didn't match the cgi-check for '/cgi-bin/' and the file was served rather than CGI'd.
<LI>CGI programs now cause persistent connections to close, instead of idling until timeout. Still a problem with it saying Keep-Alive in the header, and then not doing that.
<BR><B>20 Dec 1996</B>
<LI>Can't remember everything I've done over the last few days but ...
<LI>Choices code separated out into <I>Netplex Choices</I> application (!NpChoices) which resides inside the Netplex application directory. This allows me to add nice stuff which would have otherwise dragged against the server. For example, the new 'Web Pages' choices section allows you to reconfigure the server report format.
<LI>To accommodate this, changed icon bar menu to have four entries, Status, Log, Choices and Help. The first of these opens the Status window, and the last three simply Filer_Run the log file, !NpChoices and !Help respectively.
<LI>Poll mask changed - had some unused and queued events masked out.
<LI>Main !RunImage reformatting
<LI>Templates fixed - some display fields increased to 256 chars.
<LI>New code to run NpChoices if no Choices file is found and some declarations to enable the server to work without being configued first.
<LI>Removed session logs because of the performance hit.
<LI>All this fd_set and Socket_Select stuff wasn't needed! Removed it. :)
<LI>Compressed server slotsize reduced to 40K
<LI>Altered the !Run file's Inet stack check so that VStack is checked for. Do Argonet users not speak or something. ;)
<LI>Nicer error handling, care of the new handy swi_exists function. Reordered the error handling so that the <I>Internal Server Error</I> reporting comes last.
<LI>Hacky changes to readheader_line - early ENDPROCs in two places.
<LI>Created the socket_error function which factors out a fair bit of error-checking code.
<LI>New, 'friendy', log levels. ;)
<LI>Records the Referrer and User-Agent in the Who & What log.
<LI>Server_protocol function which returns 'HTTP/1.0' strings etc.
<LI>Moved common 'Connection:' code into begin_header.
<LI>Socket_writestring/writeblock still dodgy. ;)
<LI>Code to cope with the changed server reports.
<LI>Status_update now highlights multiple lights - i.e. everything is now to scale.
<BR><B>15 Dec 1996</B>
<LI>Discovery of hideous bug in SysLog 0.10 - it claims >32K per session log and doesn't give it back when the session log is closed. So it gradually eats up all of the memory in the machine. Wonderful. :(
<LI>Slightly better versions of writestring/block which tell you when they lose data.
<BR><B>14 Dec 1996</B>
<LI>HTTP/1.1 support - although not completely compliant yet. Already unconvered one bug with the 1.1-capable ArcWeb. :-)
<LI>Connection_kill has a second parameter now, indicating whether to force the connection shut. Appropriate changes throughout the program.
<LI>Session logs. Finally!
<LI>Started designing (virtually done really) the new Templates and Sprites for the new choices windows. Includes options for timeout adjustment and server report page design.
<LI>Did lots and lots of fiddling until I was satisfied with the statistics output - only writes out at the end of a connection (so the stats may apply to an entire persistent connection set).
<LI>Start log message gives port number.
<LI>Over-sized header fields now generate the error <I>Request URI Too Long</I>.
<LI>Unfixed bug: Integer overflow in the stats dump code.
<LI>Should I remove the Bandwidth display? - It's too damn optimistic!
<BR><B>02 Dec 1996</B>
<LI>Send/Receive statistics generated on new log level 79.
<LI>More entries in the Glossary.
<LI>On an untrapped error, won't send an Internal Error Report if a header has already been sent.
<LI>I seem to be randomly loosing file handles, resulting in aborted transfers - is this my setup (the finger of suspicion points towards IRClient 0.24 atm) or is Np itself loosing them?
<BR><B>31 Nov 1996</B>
<LI>Made the OS_Find close call an XOS_Find so that file handle problems won't cause an error loop.
<BR><B>25 Nov 1996</B>
<LI>Removed ideas document.
<BR><B>24 Nov 1996</B>
<LI>New <I>Allow persistent connections</I> option for the server choices window. When on it allows the use of HTTP/1.0 Keep-Alive connections.
<BR><B>23 Nov 1996</B>
<LI>Requesting the HEAD of an object which generated a server report gave the wrong Content-Length as the text message wasn't being built.
<LI>While testing the Keep-Alive support, with Gerph helping using Netscape 3, I noticed that things were not working as they should. Netscape sent 'Connection: Keep-Alive' and the HTML page was sent to it, however it then chose to ignore the connection that was kept alive and attempted more connections to the server in order to retrieve the images. As I had Netplex configured to only use one connection this meant that the first connection would sit idling until it timed out, upon which the next connection would connect, serve the file and idle until <I>that</I> timed out... This is most confusing, and will require additional testing to see if Netscape clients/servers are playing silly buggers. :-(
<LI>Docs...
<BR><B>22 Nov 1996</B>
<LI>Implemented a preliminary version of the Keep-Alive support - i.e. persistent connections.
<LI>Factored out the start-of-header code to a new procedure, begin_header(code%).
<BR><B>20 Nov 1996</B>
<LI>rd%() wasn't being initialised, resulting in a CLOSE#0 happening on a connection_kill. Also changed the not-in-use rd%() code to 0 from -1.
<LI>Imagemap is done. Cured some problems with the CGI library.
<LI>Introduced the Netplex$WebPagesDir variable.
<BR><B>19 Nov 1996</B>
<LI>Started coding the BASIC version of imagemap. (BASIC rather than C, as the resulting file will be smaller). May assembler code it later (via C).
<BR><B>17 Nov 1996</B>
<LI>Fixed problem with empty POSTs relating to the rd%() gubbins.
<LI>The sendentity timeout line was in the wrong place, fixed.
<LI>Yet more destructuring, comments and general !RunImage cleaning.
<BR><B>16 Nov 1996</B>
<LI>Reimplemented the timeout code - it now should work correctly in all circumstances, never timing out after CGI programs etc.
<LI>Certain error-reporting calls had bytes% etc. instead of r0%.
<LI>Now reserves disc space on PUT and POST methods - this can be done as Content-Length is always known. If insufficient disc space is available, then the report <I>Request Entity Too Large</I> is returned.
<BR><B>15 Nov 1996</B>
<LI>Changes for the rd%() system - PUT and DELETE checks etc such that PUTs and DELETEs on a file which is being served will be refused.
<BR><B>14 Nov 1996</B>
<LI>(Over the last few days) While testing with several large files, I noticed a nasty but apparently rare bug in writeresponse_sendentity. It meant that transfers that had cause to block would corrupt the file ptr% which would result in chunks of files going missing.
<LI>Removed the EHeld message - the log could quite reasonably be filled with this message through no fault of the user.
<LI>Fixed first line of server_error which had a >=0 missing.
<LI>Creating new files with PUT wasn't working as the attr% checks made incorrect assumptions.
<LI>Decided to replace the rd%() system - i.e. files are now kept open when serving like they used to be. This means that they are now properly buffered resulting in much less disc crunching. :-)
<A NAME="011"><H2>0.11</H2></A>
<BR><B>08 Nov 1996</B>
<LI>Docs: New icon bar graphic for the icon bar page; Corrections; Reorganisations.
<BR><B>04 Nov 1996</B>
<LI>connection_verifyall and the socket timeout code merged together into communication_breakdown. ;-)
<LI>The timeout code also now only times out when the client is sending something - so the server can now take as long as it likes. :-)
<LI>Docs: The buttonbar at the bottom of the pages has been replaced with (up to) three arrow buttons. Also, the index page Netplex graphic has been re-done as it looked distinctly un-curved in places.
<BR><B>02 Nov 1996</B>
<LI>The default CGI directory name ('cgi-bin') can now be changed by altering the Messages file.
<BR><B>01 Nov 1996</B>
<LI>Removed the RISC OS/v.vv bit from the Server: id string, until I can find a decent way of finding out the machine's OS version.
<BR><B>30 Oct 1996</B>
<LI>The default filename for realm configuration ('realms') can now be changed by editing the Messages file. Likewise, the timeout period and the maximum number of realms can be altered.
<LI>The template HTML for the server reports is now contained in the Messages file and can be altered. Bear in mind that each line must not exceed 255 characters after the substitutions have been made.
<LI>Now checks PUT requests to existing files for Write-permisson, which would have previously failed on CD-ROMs and other read-only devices.
<LI>Error reporting rationalised - changes to the log messages, of which there are now fewer.
<LI>Known-but-not-acted-on requests weren't being faulted, and ended up trapped in readheader. They are now reported as <I>Not Implemented</I>.
<LI>Tried doing some nasty things to Netplex to see what would happen, one was dumping binary files into FreeTerms' window (I do about half of Netplex's testing by opening a telnet session to the server's port and typing in requests). Found that yet again method_fromstring is pants and wasn't faulting empty lines. It now should be a lot better at faulting bad requests.
<LI>Changed the end-of-header code such that empty first lines will be correctly decoded rather than dropping straight into the client_request despatcher, which is what was happening.
<BR><B>26 Oct 1996</B>
<LI>Added code to check for Locked files; applies only to PUT and DELETE methods. PUT to a locked file now returns a Forbidden report. DELETE on a locked file now returns a Method Not Allowed report.
<LI>Reversed the order of the logs on the page, so that the most recent changes appear at the top.
<BR><B>25 Oct 1996</B>
<LI>Continued the de-structurising.
<LI>When an unanticipated error occurs Netplex will now automatically send an <I>Internal Server Error</I> report to the client and close the connection. This aids the server's stability greatly as serious errors (for example, Address exceptions) do not get a chance to endlessly repeat until the server self-terminates.
<LI>Replaced the line which closes the connection if the first line from the client is invalid or contains an unknown method.
<BR><B>24 Oct 1996</B>
<LI>Netplex has now had time to prove itself and bug reports have been virtually non-existant. For these reasons Netplex is now out of beta testing.
<LI>I went through the code and replaced a lot of the nice structured code with lots of hacky early routine exits. I did this because hacky-exits are often at least twice as fast.
</UL>
<HR>
<H2>Thanks</H2>
<P>Thanks are due to :</P>
<UL>
<LI>Thom Stuart (th0m) - it was upon thom's original suggestion that I wrote Netplex - he was complaining that DeltaNet didn't do POST :-)
<LI>Justin Fletcher (Gerph) - for <I>InetServices</I>, <I>WebSize</I>, <I>Imagen</I>, spotting bugs and constructive criticism
<LI>Jon Ribbens (Salmon) - for the excellent <I>SysLog</I>
<LI>Joe Oldak - for helpful comments, suggestions and enthusiasm
<LI>Dave Lomax (DaveyBabe) - for help with testing and finding a bug in cgi-bin.dir
<LI>Mark Hoyle (skeeve) - for letting me crash various incarnations of Netplex on his machine ;-)
<LI>Alex Howarth (zarni) - for complaining about having to load ArcWeb :-p
<LI>Kaustav Bhattacharya (Kozzey) - for trying to run Netplex with Termite :-)
<LI>& the other #acorn and #argonet bods for, erm, stuff.
</UL>
<H2>and...</H2>
<P>The following have been instrumental in Netplex's development :</P>
<UL>
<LI>Dire Straits: Communiqué, Love Over Gold & Live at the BBC,