This is the history of all changes that were made to NetForge since the first public release (0.14). The versions are listed latest to earliest. The changes are marked as either BUG (bug fixed), SEC (security bug fixed), FEA (new feature) or MIS (miscellaneous). [FEA] Date headers are now parsed with com.novocode.tk.net.HTTPDateFormat instead of java.util.Date's parse() method (which is buggy, deprecated and much slower). *********************************************** RELEASE 1.0.3 (Jun/22/1999) [FEA] Added configuration actions to ServletFrontend for manually removing and reloading Servlets. [FEA] Added class MetaFilesysBackend. [BUG] HttpServletRequest.getPathInfo() returned an empty string for the virtual path "/". [BUG] ServletFrontend: Session cookies are now refreshed only when required (i.e. when a cookie has a maximum age, is new or needs to be deleted). [MIS] NetForge is now using the open source version of the Novocode Toolkit. ************************************************* RELEASE 1.0 (Feb/18/1999) [BUG] ServletFrontend: The Servlet loader couldn't load referenced classes in packages because the package separator '.' was not translated to the NFile path separator '/'. [BUG] HTTP core: Error response messages now include a stack trace for all Throwables instead of only Exceptions. [BUG] HTTP core: Writer auto-flushing did not work in all cases. [BUG] HTTP core: A bug caused Writer buffering to fail with an ArrayIndexOutOfBoundsException under certain circumstances. [MIS] The bin/netforge script now adds the "classes" directory to the class path before the NetForge JARs to allow placing NetForge patches into the "classes" directory. [FEA] Added the bin/applypatch script to simplify the installation of patches. [MIS] Wrote the last missing chapter for the NetForge 1.0 manual and included the latest version of "Servlet Essentials". ************************************************ RELEASE 0.48 (Dec/24/1998) [FEA] ServletFrontend: Servlets in named packages can now be accessed directly by their fully qualified class name without needing to define an alias. [BUG] ServletFrontend: Under certain circumstances when writing to a ServletOutputStream, the response header was sent after the body. [FEA] DirectFrontend: Added support for methods DELETE and MOVE. [FEA] The startup options are now set via simple command line arguments instead of system properties. [BUG] CounterResponder was broken. [BUG] ServletFrontend: PrintWriter character encoding support did not work for most encodings. [MIS] HTTP core: Moved Cookie handling from the Servlet interface implementation to classes novocode.netforge.http.Request and novocode.netforge.http.responder.Response. [FEA] HTTP core: Added optional buffering with commit/rollback operations for response bodies to the Response class. [FEA] HTTP core: Added ResponseWriter for writing character data to a response with automatic character encoding conversion. [FEA] ServletFrontend: Responses can optionally be buffered at the char- and byte-level to determine a suitable character encoding and content length. ************************************************ RELEASE 0.46 (Nov/23/1998) [FEA] ServletFrontend supports version 2.1 of the Servlet API. Deprecated methods like ServletContext.getServlet() which are not supposed to work in a 2.1 environment can be reactivated with a configuration option for compatibility with API versions 1.0 and 2.0. [FEA] Added HTTP response filtering mechanisms. [FEA] Added SSIFilter for Server-Side Includes. [MIS] Added chapters "Filters" and "Backends" and more details on ServletFrontend to the NetForge manual [SEC] CgiFrontend: "Pass 'Authorization' headers to CGI programs" caused all headers *except* the authorization headers to be suppressed. [BUG] Removed incorrect content length header from CounterResponder image/gif responses. [BUG] ServletFrontend: Servlet aliasing was broken. [BUG] ServletFrontend: "Load all Servlets on init" was broken. [MIS] Major rework and optimization of class novocode.netforge.http.responder.Response and all dependent classes. ************************************************ RELEASE 0.42 (Oct/24/1998) [SEC] DirectResponder could be used to get access to parent directories of the Backend + offset by manually requesting URIs with ".." paths. [BUG] Servlet response headers which were set with ServletResponse.setHeader() were sent as "name: name" instead of "name: value". [BUG] Dates in headers and log files used localized month names from the default locale instead of a proper English locale. [FEA] The Servlet ClassLoader supports getResource() (for NFiles which are local files) and getResourceAsStream(). [FEA] A Servlet(Context)'s directory is available as an NFile or absolute path in the local filesystem (where available) through the new ServletContext attributes "novocode.netforge.http.servlet.dir.nfile" and "novocode.netforge.http.servlet.dir.path". [FEA] Added "Prefer requested host" option to HTTPServer. [FEA] Servlet sessions are removed from the server when they time out. The time-to-live for the client and the server side is configurable. ************************************************ RELEASE 0.40 (Jun/28/1998) [FEA] Introduced the Frontend/Backend concept. FilesysResponder is replaced by DirectFrontend, CgiResponder by CgiFrontend and ServletResponder by ServletFrontend. The Backends FilesysBackend and JdbcBackend allow all Frontends to access the local file system and JDBC databases. [MIS] Separated Realms and Protection Spaces. Realms implement HTTP authentication schemes; Protection Spaces decide in a protocol-independent way if a request with a certain user name, password and originating IP address is allowed. [MIS] FilesysResponder: "Last modified" dates are now displayed in GMT. [BUG] FilesysResponder: ReadMe files were not included properly in automatically generated file lists. [BUG] CgiResponder: The PATH_INFO environemt variable used the host system's file separator character instead of '/'. [BUG] MessageResponse: Arguments of GET requests were not linked to and displayed in message responses. [BUG] FilesysResponder: References in file lists were not encoded as URLs. ************************************************ RELEASE 0.36 (May/11/1998) [BUG] Servlets that implemented the SingleThreadModel interface could still be called concurrently. Now all calls are blocked until the Servlet is available for service again. [BUG] Servlet reloading was broken. ************************************************* RELEASE 0.35 (May/6/1998) [FEA] The servlet interface supports the full JSDK2.0 API, including Reader/Writer abstraction, Cookie handling and Session Tracking. [FEA] Connection threads are now reused. This increases server performance by about 10% and prevents memory leaks on JVMs which do not garbage-collect terminated threads. [FEA] Added new RedirectionResponder which works like ProxyResponder but redirects the client to a new location instead of directly performing a request. [FEA] Removed all static dependencies. You can now run multiple instances of NetForge in one JVM. [BUG] FormUploadResponder: The upload form was not returned correctly. [MIS] Changed package structure. [MIS] Metaconf classes separated from NetForge source tree. A complete Metaconf package, including the API documentation, can be downloaded from . The new Metaconf system allows for remote-configuration of NetForge. [BUG] CgiResponder: The environment variable REMOTE_ADDR contained the host name plus address instead of only the address. [FEA] Added "Require" option to BasicRealm. [FEA] The servlet sandbox has a new option to prevent servlets from reading "Authorization" headers of HTTP requests, similar to the "Pass 'Authorization' headers to CGI programs" option of CgiResponder. [MIS] Changed the Logfile date creation system to avoid deprecated JDK1.0.2 java.util.Date methods. ************************************************* RELEASE 0.28 (Feb/2/1998) [MIS] Added some user-level documentation. [FEA] Configurable sandbox for untrusted servlets. [FEA] Added NFTestServlet, a servlet counterpart to TestResponder. [FEA] NetForge ships with Novocode Toolkit version 0.2 which includes the class novocode.tk.util.Wrapper that allows you to set the system properties required by NetForge with JVMs that do not support the "-Dproperty=value" option. [FEA] The thread priority adjustment of PortServer threads which was previously hardcoded to +2 is now user-configurable. [FEA] CgiResponder has a new option to prevent passing "Authorization" headers to CGI programs for better security on operating systems that allow users to read the environment of other users' processes. [BUG] Fixed a bug in the Metaconf HTML VarString peer class which caused variable strings to be expanded in configuration forms. [FEA] Implemented true list-style bitfields for the Metaconf AWT peer. ************************************************ RELEASE 0.27 (Dec/29/1997) [BUG] The server aborted with a NullPointerException in novocode.tk.io.LogFile#checkRaf if a log file couldn't be opened for writing. [MIS] Novocode Toolkit classes separated from NetForge source tree. A complete toolkit package, including the API documentation, can be downloaded from . ************************************************ RELEASE 0.26 (Nov/24/1997) [FEA] Multi-server support: NetForge can run any number of servers for arbitrary protocols. [FEA] The new EchoServer is an example for a simple NetForge server. It reads lines of text from the client and echoes them back. [FEA] Servers can be bound to local IP addresses to create IP-based virtual servers. [FEA] The new HostMultiplexResponder makes it possible to create non-IP-based virtual servers. [FEA] The new ProxyResponder is a simple non-caching HTTP proxy which can forward requests to a parent proxy or connect directly to a requested HTTP resource. A ProxyResponder can not only be mounted as area "http:" or "ftp:" but also as a local area in order to map resources from a different server into the local namespace. [FEA] Improved ServletResponder: Servlet aliasing, init parameters and multi-class servlets are now supported. ************************************************ RELEASE 0.24 (Oct/26/1997) [FEA] Administration GUI. [FEA] FilesysResponder supports file uploads via PUT. [FEA] FilesysResponder can compress uncompressed outgoing data on the fly with gzip. [FEA] A new FormUploadResponder supports file upload via forms, as specified in RFC 1867, with all responders that understand the PUT method. [FEA] The new CounterResponder implements a Web Counter which can create textual and image (GIF) counters. Custom fonts (in any image format that your JVM understands) can be used. Images can be remapped to a user-specified coloring scheme. [FEA] Proper servlet shutdown. *************************************************** RELEASE 0.14 (Sep/1997) [MIS] First public release.