This file summarizes the fixes and enhancements that have been made to the DECthreads HTTP server through the various 3.x versions. 3.8alpha (9-APR-2000) Added hack to cgi_symbols program to permit certain form symbols, desginated on the command line, to be placed in files rather than a symbol. For example: $ cgi_symbols www_ form_ msg=message.tmp note=note.tmp cause cgi_symbols to parse the submitted form data and place form variable msg's value in file message.tmp and form variable note's value in note.tmp, any other form variables will be put in DCL symbols with a form_ prefix. Added "eventcount flags" rule which sets option bits on eventcounter operations. The initial bit defined is bit 0 (mask 1), which if set causes client counters to include a timestamp. The privrequest statistics command will use the timestamp to calculate how long a client request has been pending. Make more robust check for missing content-type in CGI script response in file file script_cgiexecute.c. Previously, if the script failed to supply a content-type header you'd gt indeterminate results. Now you get a text/plain content type and a 500 HTTP response code (script protocol error). Added proper checks to tm_realloc() (file tmemory.c) so that RTL failures do not result in tm_realloc crashing the thread due to dereferencing a NULL pointer. Note that the correction means the NULL pointer is passed up to the caller (which is the defined behaviour for tm_realloc()). Added RERAISE statements to exceptions handling in message_service.c. Added embryonic support for Linux. Development machine is running Caldera 2.3. Scripts and dynamically loaded MSTs are not working, so it's not good for a lot except serving files. Modified hpss_accept() (file hpss_share.c) to automatically disconnect from previous the previous hpss_accept() context. Explicitly calling hpss_disconnect() for each successful accept is still recommended. 3.7a (1-MAR-2000) Add HOSTMATCH rule support. A hostmatch rule is only valid inside a localaddress block and defines an alternate (alias) name for the cname/ip-address the block defines. Redirects will use the name defined in the localaddress rule and not the matched name. Hostmatch records are only searched after a search for a matching CNAME localaddress definition fails. The logic for determining the request 'hostname' is as follows: If local_address blocks present then If CNAME-based localaddresses present then Extract hostname in host: header of client request ('' if no host:). Lookup host in cname list. if no matching host lookup host is alias (hostmatch list). if host found then set ip-address of pseudo-value for local-address block. else get IP-address of interface from tserver_tcp. else get IP-address of interface from tserver_tcp translate ip-address to local_address-defined hostname (or default). else hostname is set by HOSTNAME rule or http_default_host variable. Make rule list pointer in ident_map.c a global variable. Fix form handling problems with HPSS, also support multipart mix form encoding. Note that use of descriptors limits return values to 64K. Change formatting of statistics output display to show histograms (concurent threads, keepalives) using multiple columns. 3.7 (8-FEB-2000) Modify fetch_http.c to include the port number in the host header. Added new subsystem, HPSS, for writing high performance scripts, see aaareadme.hpss for details. This system requires 6.2 due to it use of extended mailbox features and may give you difficulty compiling if you have and out-of-synch C installation missing cmbdef.h. For this reason, HPSS is not built by the default build procedures. 3.7alpha (25-JAN-2000) Fix buffer overrun potential in http_session.c. Modified manage_request.c to show additional information in statistics display: average requests/connect and time since last restart in seconds. Modified data_cache.c to correctly count the 'dir' chunks (chunks that hold the pieces of the item directory rather chunks that hold item data). Add compile-time option to make non-portable pthread calls to set the names of mutexes, conditions, and threads as they are created. When selected, the debugger and anal/system (VMS 7.2) show meaningful names for the pthread objects. All modules that include pthread_1c_np.h were updated to include the calls. Note that default the object naming is disabled, to enable it edit pthread_1c_np.h to define NAME_PTHREAD_OBJECTS and re-build the server. Fix bug in message_service.c that would lead to hangs when running the server with kernel threads enabled on SMP alpha systems. Updated tlogger.c to work more efficiently. Data is now double-buffered with all file writes being handled by the flusher thread rather than each thread calling fwrite() itself. A thread calling tlog_putlog now only holds the principal mutex for duration of the SYS$FAOL call and not for the duration of SYS$FAOL()+fwrite(). Added hack to tserver_tcp.c to let web administrator configure the listen queue depth (default 5) on the listen ports. To set the depth, add a line of the form "localaddress @LISTEN_BACKLOG=nn" to the configuration file where 'nn' is a decimal integer (e.g 60). Note that on UCX/TCPIP services version earlier than 5.0 the maximum depth allowed is 5. Modified fetch_http.c to support -m switch which takes the following argument as a time string to be sent in an if-modified-since header. 3.6b (8-DEC-1999) Fix bug in timeout handling in decnet_access.c, mutex was not being released resulting in thread hangs. This bug only affects configurations that enable script timeouts, the default in no timeout. Increase stack sizes for listen threads created by tserver_tcp.c and timer thread created by decnet_searchlist.c to accommodate DECthreads changes in 7.2 that causes failures on VAXes. Modified fopen parameters on log file to ensure ctx=rec is used for shd=upd access. Make more extensive use of event flag 128 (ENF) in authcom.c and tserver_tcp.c. 3.6a (24-SEP-1999) Fix bug in file_cache.c that could lead to hash table corruption when the server is under high load with a small cache size. Add checks to send_document3.c to disallow /-/ and similar relative addressing in url paths. Omit needless reference to cma$* libraries when building http_base_mst.exe on systems greater than V7, file link_base_mst.com. Modify the peek interface to pick up the port list when server built using the share_tcp option. Modify http_server3.c to abort during initialzation if the client limit computed is a non-positive number. Add tweaks to descrip.mms for SSL building. 3.6 (22-AUG-1999) 3.6alpha4 (15-AUG-1999) Fix bug in decnet_searchlist.c that was corrupting memory if decnet reuse enabled and more that 8 network processes were reusing their links. Also modify script_execute.c to kill the reuse chain if an error encountered. Check for "pragma: no-cache" in request headers and disable caching if found. This header is generated by Netcapse browsers if you Shift-reload. Check for TCP/IP services and define missing UCX symbols in tserver_tcp.c. --- Fix bugs in file_access.c causing multiple entry listing and lookup failures when parent directory only has execute access. --- Add fix to VMSHELPGATE.C to make it more forgiving of busted help text inside the library module. When parsing help module, only lines beggining with a single digit followed by a space are considered topic boundaries. Change directory scan processing of file_access.c to detect non-existant directories in the tf_open() call and to better support ODS-5 filenames. Tweak fetch_http.c program to include a host: header with the request, some servers don't react well if there is no host header. Also eliminate extraneous LFs inserted at end of output file. Add hack to tserver_tcp.c and http_server3.c so that the server version includes the TCP option seletected during the build (e.g. OSU/3.2alpha2;UCX). --- Tweak webbook_shelf.c to work with newer documentation CDs, recognizing both .odl and .decw$bookshelf shelf file formats. Also added NOCGIPREFIX option to webbook build. Modify tlogger.c and http_server3.c to perform a cleaner rundown and avoid generating pthread_dump.log files on shutdown/restart under VMS 7.2. Under 7.2, LIB$DO_COMMAND() can return to the caller AND exit the program, which is contrary to all documentation and historical behaviour. Add "filecache exclude" rule which lets you inhibit inserting files into the cache based upon rule file match. A new block type was added to the translation list to support this functionality. Enhance file cache to support per-entry refresh times based on rule file match. Using an extended form of the "filecache refresh" rule you can desginate files/directories to have particular refresh periods on their cache entries. This change required adding an additional field to structures defined in access.h, file_cache.h, and ident_map.h. Modified http_send_response_header function to include an "Expires:" header in cases where a custom cache refresh period is specified. This change requierd modifying the call interface to http_send_reponse_header function. In nearly all cases the function was invoked with the arguments (scb->cnx, scb->rsphdr), so it was trivial to change to the new format (scb). Fix bug in usermap rule support and provide sample usermap code, reverse.c. Fix to server_peek.c program to reduce the likelyhood of crashing the server (don't chase zeroed pointers). 3.5a (24-JUN-1999) Change includes in bss_mst.c for wider interoperability. Fix ssl_certificate.com to properly exit after reporting a the error for a missing ssl_setup.com. Fix pthread_1c_np.h to allow file_cache.c to compile properly on with VAXC. Fix bug in errorpage.c that causes server startup failure if errorpage rule used in configurations that define virtual hosts (localaddress blocks). 3.5 (1-JUN-1999) No change from 3.5alpha2 3.5alpha2 (5-MAY-1999) Miscellaneous fixes for building on VAXes under VMS 7.x. Remove extraneous printf's from dirserv_mst.c. Enhanced errorpage capability. The second argument may specify either a VMS file specification or a URL path (e.g. /demo/error_403.html), which will be translated using the standard configuration file rules. If a script is specified, the path_info will be set to the original requested URL path. Errorpage processing now attempts to preserve the HTTP error code (404, 403) in the HTTP response. Scripts should not attempt to specify a status: header nor a location: redirect header. --- Fixup sources and makefile to allow building server on Digital Unix. Update SSL support for OpenSSL. BSS_MST.C and SSL_THREADED.C are now part of [.base_code]. See aaareadme.ssl for new building/installation instructions. Added new config file rule, ErrorPage, which lets you specify an alternate file in place of a generated error message. The rule has 2 arguments: a keyword for the error type and the corresponding filename to return. If the alternate file cannot be openned, the error message generated will display the original requested URL. ErrorPage keywords: ProtFail File to return when access denied due to server protection. OpenFail File to return for fopen() failure on document. RuleFail File to return when no matching config rule for URL path. Formalized the hack for EFS (Extended File Specification) support. During initialization, the file_access.c module checks for the environment variable HTTP_FILE_ACCESS_FLAGS. The variable is interpreted as a decimal number whose value is a bit mask that selects the following options: bit 0 - If set, file specifications containing both at least 1 slash (/) and a caret (^, EFS escape character) will pass a rewritten VMS format specification (/device/dir/file --> device:[dir]file) to fopen(). In 7.2, the C RTL does not handle unix syntax specifications that contain the EFS escape character. bit 1 - If set, file specifications containing a slash (/) will be rewritten in VMS format for the fopen() call. The purpose of this flag is a performance optimization, fopen appears to open VMS format specifications faster than unix specifications. Added experimental scriptserver for running scripts designed for Process Software's Purveyor (tm) web server. The exec rule for /pvbin/* invokes the WWWPVEXEC task as the scriptserver (in place of WWWEXEC) which attempts to emulate the Purveyor script environment sufficiently to run the script. The [.script_code]purveyor_env.exe helper program must be built manually and placed in www_system. The emulated environment creates local DCL symbols for the CGI variables rather than global, so CGIINFO.COM does not display the correct values. The default configuration use www_root:[pvbin] as the script directory for purveyor scripts. 3.4 (12-FEB-1999) Fix errant return statements in miscellaneous [.script_code] sources. Fix bug in send_document3.c that was causing error responses when text files with zero content were requested. Fix syntax error in wwwproxy.com. Change WWWEXEC.COM to test for script file extensions in a case-blind manner (VMS 7.2 can now return lowercase filenames). 3.4alpha2 (5-DEC-1998) Update targate server to be compliant with VMS 7.x DECthreads. Modified files targate.c, tarscan.c, tarscan.h, tserver_decnet.c, tlogger.c. Upgrade targate.c funcationallity: - Use CGI mode for output phase to let server add standard headers. - Include last-modified header with extracted modules, using module's modification date stored in tar file. - Make directory listing hierarchical instead of listing all files (improves performance on browsers that are slow at building pages with 100's of HREFs). Modified file_access.c behavior when attempting to open file specifications that contain no file type delimiter (e.g. /www_root/serverdoc/images). Function tf_open will first try openning the file with .dir appended to the file spec., and if that fails will try with a single "." appended. --- Fix bug in cgilib so that large symbol names break up into a multi-valued logical name as intended (only applies when using logical name option). Modify wwwexec.com to check for dcl$path:perl.exe in addition to the DCL symbol check. Modify script_execute.c so that during output phase reads from network mailbox are done in 'stream' mode, thus allowing CGI scripts to write header records longer than 1000 characters and data records longer than 4096 bytes. If you send a tag, script_execute reverts to non-streamed reads. Note that the sum of all headers returned in the HTTP response (supplied by both server and script) must still fit in the 4K buffer reserved in the session control block. To support this change, a new function was added to decnet_access.c: dnet_read_streamed(). Add new tag to scriptserver protocol, . The tag functions identically to the tag except the server does not revert the network link to stream mode (allowing large writes). Records of exactly 998 bytes must be converted to 1000 byte records with last 2 character CR and LF. Modify ssl_server_mst.c to return SYSPRV privilege state to original condition. This bug was preventing startup on server of privileged ports. Add dummy http_set_port_attributes to targate.c allowing it to link properly with newer rule_file.c. 3.3b (2-SEP-1998) Fix memory allocation bug in pre-processor in rule_file.c. Miscellaneous fixes to script_execute.c: - Ensure link.dptr is initialized properly to better handle abnormal disconnects by client. - Support with - Avoid potential 2-byte buffer overflow in transfer_output() when record mode enabled. Fix bug in tclient_tcp.c that was setting REUSEADDR instead KEEPALIVE when specifying the keepalive attribute. Fix bug in terminator detection logic in user_script.c. 3.3a (17-MAY-1998) Fix invalid thread detach in tserver_tcp.c which causes program crashes in the newest version of DECthreads. Change http_crlf_newline setting back to 1. Miscellaneous source code fixes to allow clean compile under DEC C 5.7. 3.3 (16-APR-1998) Add timeout to script connections saved via . Added new rule to configuration file: "TimeLimit ScriptReuse timeout [perm-limit]". Modified HTTP_SCRIPTS configuration to include options for setting reuse parameters and script timeouts. Fix syncrhonization problems with saved script connections. Modified processing of CGI mode scripts (script_cgiexecute.c) to recognize server, date, connection, and mime-version headers in script response and either suppress server generating same header or ignore header entirely. Modified prototype proxy_server to use instead of . If a script returns a 301 or 302 (redirect) status header, the accompanying location: header is no processed by the server but passed on to the client. ----- Added new functions to decnet_access.c/.h to permit reuse of same DECnet link by more than one thread: dnet_disown_context(dptr); dnet_claim_context(dptr); Added new functions to decnet_searchlist.c/.h to support a cache of open DECnet connections: dnetx_save_connection ( dptr, task_name ); dnetx_unsave_connection ( dptr ); dnetx_find_connection ( tasklist, rr_point, context, dptr, taskname ); Implemented extension to scriptserver protocol: If during dialog phase script sends tag , server will not close connection at end of output phase but instead acknowlege terminal tag (e.g. ) with 2 "" messages and reuse current link for subsequent script request. The standard WWWEXEC scriptserver was modified to check for the logical name WWW_SCRIPT_MAX_REUSE and reuse connections if translation present. Connection reuse improves script performance up to 50%. Split script_execute.c into two separate modules: script_execute.c and script_cgiexecute.c. Modified processing to detect when script is supplying a content-length and maintain keep-alive is possible. If script does not supply content length specified in header, connection is not kept alive. Modified proxy server to support connection reuse. Added proxylog rule which redirects logging of proxy access to a separate file (by default accesses are logged in file set by accesslog rule). ---- Added configuration rule 'null'. The purpose of the null rule is as an alternative to '#' (comment) in servermaint forms. Conditional lines with multiple rules can now conditionalize the individual rules. Added hack to CGI mode handling of location: responses, locations that start with *://*:* will be send to the client a rewritten URL to using the current scheme, host and port number (e.g. *://*:*/ladeeda ==> http://myhost:8000/ladeeda). If port number is standard port for protocol (i.e. 80), it will be ommitted from URL. Modifiy rule_file.c and http_server3.c to use common routine to set port attributes, allowing port numbers specified on command line to include attributes (e.g. 6443/:https). Changed response to include primary port for server inside of square brackets and update [.script_code]serverquery to look for this information. This works around the design problem with tserver_tcp that managment commands for shutown and restart must go to the primary port (nocache port is the 'secondary' port). --- Modified pre-processor (html_preproc.c) to permit multiple dots in filename. To allow coexistence with current interpretation as a part name specifcation, the following rules apply (use double-dot as placeholder for null part name): foo.htmlx file foo.html foo.bar.htmlx part bar in foo.htmlx foo.bar.x.htmlx part x in foo.bar.htmlx foo..htmlx file foo.htmlx foo.bar..html file foo.bar.htmlx Updated build_unsupported.com to build slideshow2 rather than slideshow. Removed obsolete source file (superceded by other files in V3) from distribution: http_server.c, protect.c, http_execute.c, send_document.c, http_server.opt Add hook to allow proxy gateway function to be added to server. If a gateway is configured, proxy requests will be mapped to the path specified by by the ProxyScript rule in the configuration file. A sample gateway script, [.script_code]proxygw.c is included but not built by default. Modified files http_session.c, script_execute.c and rule_file.c. A prototype proxy gateway implement as a DECnet-base scriptserver is in the new [.proxy_code] directory. Modified server to maintain the following attributes separately for each port configured (normal and nocache ports). Modified files http_session.c, rule_file.c, and access.h. Port attributes: protocol String indicating the URL scheme (http or https). keep-alive Flag to indicate whether port allows keep-alives. standard Flag to indicate if port number is internet standard port number for protocol it is running. (If port number is non-standard, :nnn must be appended to hostname in URL). Port attribute default values: port 80 'http', keep-alive, standard (80/+http) port 443 'https', nokeep-alive, standard (443/+https) other 'http', keep-alive, nonstandard (nnn/+:http) Overriding default attributes (port nnn/[+][:]protocol). + If present, protocol allows keep-alive. : If present, protocol is running on non-standard port. protocol Required. Modified send_document3.c to use protocol string set for port rather than explicit "http:" when constructing URLs for welcome and 'missing slash' redirects. Modified descrip.mms and link_server.com to allow 'hard' linking of SSL shims (ssl_server_xxx.c) to server image, see descrip.mms for further information. Linker options files used for traditional shareable image versions of shims were renamed to sslshr_server_*.opt, aaareadme.ssl was updated to reflect change. Modified sslshr_server_mst.opt to link against http_base_mst.exe. Added ScriptDialog and ScriptOutput options to TimeLimit rule in configuration file, which places timeout on script operations. Added tserver_tcp_port_list to symbol vector for tserver_tcpshr image, changed version to major=2, minor=2. 3.2alpha2 (26-DEC-1997) Add ability to configure allocation granularity of file cache via new rule file rule "filecache maxrec". Modified files data_cache.c and rule_file.c. Modified http_server.com to automatically restart server if it exits with an error status provided at least 10 minutes have elapsed since previous start. Hash table for file cache is now allocated from heap and sized according to cache size. Fixed minor bug in tserver_tcp.c, scavenge_eligible flag is now properly reset when timed limit set to positive value. --- Moved modules file_access, fast_utc, message_service, mst_share, and tmemory into a separate shareable image, http_base_mst.exe. The main image and dynamically loaded MST's now reference a common copy for these module instead of duplicating the code and static data in each image. The global variables http_log_level, http_reentrant_c_rlt and http_reentrant_vms_rtl are exported from the http_base_mst image as well. Modfied files: http_server.com, http_startup.com http_base_mst logical descrip.mms link_base_mst.com base_mst.opt message_service.c, file_access.c redefine tlog_putlog. mst_share.h redefine globals for VAX mst_share.c undo mst_share.h mod. manage_request.c propogate log_level change Added management command PEEK_MAILBOX_UNIT to management interface (privrequest), which returns mailbox name needed for server_peek program. Modified html_preproc.c to recursively scan included files. In MST variant, recursion is limited to 5 levels. Fix bug in peek.c that prevented proper operation on VAX processors. Modified tutil.h on redefine tu_str* functions as macros invoking C RTL equivalents when on ALPHA. RTL handling of character strings is far more efficient than what C compiler produces for character handling. Modified tserver_tcp.c to attempt to detect problems with 'lost' thread creates and shutdown server if more than half of thread pool is allocated to such failed thread creates. Added routines to file_cache.c to support saving of 'nocache' port information. Since these routines are in the http_base_mst shareable, MSTs that wish to use file cache may also test whether port numbers are cache-inhibited. Modified files protect3.c and html_preproc.c to use new functions. 3.1 (16-NOV-1997) Developed preliminary scriptserver for supporting server-side java (requires OpenVMS 7.1 and Java JDK be installed). Source files and new build procedure is in new [.java_code] directory. Java-based scripts are run from [.jbin] directory. See [.java_code]aaareadme.java_script for more information. Fix several bugs in send_document3.c, related to it's use of file cache, that caused null responses on directory redirects and invalid header data when using the 'no cache' port. Modified cache invalidate operation to expire the cache entries rather than delete them (re-validating entries is more efficient than re-loading). Cache entries being created at time of invalidate are marked for delete. Modified files file_cache.c, data_cache.c and http_server3.c. Modified cgi_symbols program to look for option mask specified in symbol P4. If P4 has value 1, cgi_symbols will exit without placing link in CGI mode (). Modified tu_read_line() function in tutil.c to always read next character (i.e. linefeed) after carriage return prior to returning. This avoids a race condition when dealing with protected scripts. Removed direct reference to ts_tcp_stack_used() in tlogger.c, calling instead a dynamically bound function set by new function tlog_set_stack_trace(). Modified http_server3 to use setup stack trace. Miscellaneous fix to byterange script (typo in diagnositic message). Fixed bug in isapi_mst.c, ecb initialization. Modified tserver_decnet.c to deal with loss of nfbdef.h in 7.1. 3.0a (2-OCT-1997) Fixed bug in send_document3.c's handling of redirects for missing trailing slashes on directories, which were improperly added to the cache. Modified protect3.c and md5_authenticator to support ':port' extension to host masks (e.g. @128.146.*.*:443). The port number must match the server listen port in addition to the normal host matching rules. This extension allows a protection file to require a document's access to be via SSL. 3.0 (21-SEP-1997) Fixed bugs in md5_authenticator's handling of 'with-document' files. At startup, authenticator now looks for the environment variable MD5_ALLOW_WD_MISSING and if found interprets it as an integer. A non-zero value will make the default for a missing protection setup file allow access. Modified keep-alive stats display in manage_request.c Modified DSPCACHE display to not include hits counter when refresh time is zero (counter only incremented when refresh time is non-zero). --- Modified tserver_tcp.c to fix race condition in management interface. The bug can cause privrequest commands on SMP systems under 7.1 to crash the server program. Modified script_execute.c to support relative paths for command. --- Fixed bug introduced into statistics/zero command when file cache statistics added. Also add support for zeroing of cache statistics (Note that hit counters on the individual cache entries are not zeroed). Modified HTML preprocessor MST to support last-modified header (prepro_mst.c, html_preproc.c, mst_share.c/h). Header is only included if .htmlx file does not use access counters. Time sent is latest time of any of the files read. If last-modified header is returned, check for if-modified-since is made as well. Allow extra asterisks in paths for scripts. Change default home page to servermaint.html. Re-worked servermaint.html. Added DSPCACHE command to management interface (manage_request.c). The states for the dumped entries are: -1 cache item is on free list (invalid). 0 cache item is valid with no active readers or writer. 1 cache item is valid with at least 1 current reader 2 cache item is being loaded. 3 cache item is marked for delete. Modified protect.c to use new file cache, retired document_cache.c. -- Replaced http_server.c/http_execute.c with http_server3.c/http_session.c. Under 3.0, the server creates 1 client thread/connection (keepalives handled in loop in http_session.c) rather than 1 thread/request. The technical reason for this change had to do with future support for pipelining, not any performance problem with creating threads. Support new file caching mechanism for send_document3.c, in files data_cache.c/h and file_cache.c/h. The new cache is governed by 3 parameters: SIZE Total number of bytes that can be allocated by cache. The allocation granularity is 16K, giving you at most ~60 files cached per megabyte of size. Your cache size should be large enough to allow an entry for each client thread. Note that the cache consumes the pagefile quota and will affect the client limit calcuation. LIMIT Size of largest file that can be saved in cache, default is 48K. REFRESH The longest time, in seconds, that a cached entry may be stale. Note that a refresh time of 0 is allowed, meaning the cached entry is checked each time for a newer or updated file. The text portion of the HTTP status response generated by send_document3.c, indicates "sending data and caching" when file data is being entered into cache and "sending cached data" when returned data is from the cache. Changed name of protect.c to protect3.c and modified it to use the new file cache rather than the small document cache. Removed document_cache.c from server build, modified http_server3.c to define alternate http_invalidate_doc_cache() function that invalidates the file cache. Added new rule to rulefile to allow configuring the file cache: filecache [SIZE|LIMIT|REFRESH] nnn http_main.conf/.servermaint were updated to set the filecache parameters to the following values: size=1000000, limit=48000, refresh=180 (3 minutes). Modified http_send_response_header to include date: header. Modified md5_authenticator to call sys$scan_intrusion system service to permit VMS breakin detection/evasion to apply to authenticator requests. David L. Jones | Phone: (614) 292-6929 Ohio State Unviversity | Internet: 2070 Neil Ave. Rm. 122 | jonesd@kcgl1.eng.ohio-state.edu Columbus, OH 43210 | vman+@osu.edu