<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://panoptic.com/mediawiki/aolserver/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiSysop</id>
	<title>AOLserver Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://panoptic.com/mediawiki/aolserver/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiSysop"/>
	<link rel="alternate" type="text/html" href="https://panoptic.com/wiki/aolserver/Special:Contributions/WikiSysop"/>
	<updated>2026-04-12T23:45:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_cleanup&amp;diff=2919</id>
		<title>Ns cleanup</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_cleanup&amp;diff=2919"/>
		<updated>2005-10-04T15:51:18Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 533&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Man page: http://aolserver.com/docs/tcl/ns_cleanup.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''NAME'''&lt;br /&gt;
&lt;br /&gt;
: ns_cleanup - Clean up the current Tcl interpreter&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
: '''ns_cleanup'''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
: This command cleans up the current Tcl interp, performing various garbage collection tasks.  This command is invoked by the [[Ns_TclDeAllocateInterp()]] C function ''(when?)''.&lt;br /&gt;
&lt;br /&gt;
: When would you ever want to use this?  ''([[Dossy]]: I assume this isn't a rhetorical question.  You would want to use this when you need to clean up the current Tcl interpreter.  Most common case would be in a non-connection thread, where ns_cleanup isn't automatically invoked for you.)''&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_init]], [[ns_markfordelete]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=AOLserver_Cookbook&amp;diff=2918</id>
		<title>AOLserver Cookbook</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=AOLserver_Cookbook&amp;diff=2918"/>
		<updated>2005-09-22T08:48:18Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 59&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''The AOLserver Cookbook''' -- A collection of questions, and code examples to answer them.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
   &lt;br /&gt;
Insert your questions here.  Answers should be placed below the question.  Place a horizontal line (&amp;quot;----&amp;quot;) between questions.  Please keep this text before the first question. -- [[Dossy]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Is it possible to use wildcard '*' in domain name inside &amp;quot;ns/module/nssock/servers&amp;quot; section of aolserver4 config file? I would like to map all requests to *.somedomain.org to one virtual host...&lt;br /&gt;
Something like this doesn't work:&lt;br /&gt;
&lt;br /&gt;
 ns_section &amp;quot;ns/module/nssock/servers&amp;quot;&lt;br /&gt;
 ns_param   forum           somedomain.org                                           &lt;br /&gt;
 ns_param   forum           somedomain.org:80                                        &lt;br /&gt;
 ns_param   forum           *.somedomain.org                                       &lt;br /&gt;
 ns_param   forum           *.somedomain.org:80&lt;br /&gt;
 ns_param   forum           &amp;quot;*.somedomain.org&amp;quot;                                       &lt;br /&gt;
 ns_param   forum           &amp;quot;*.somedomain.org:80&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-Paul Bukowski&lt;br /&gt;
&lt;br /&gt;
''2005aug15 [[Dossy]]: Unfortunately, no -- you currently can't use wildcards the way you want.  Not yet, at least.''&lt;br /&gt;
&lt;br /&gt;
Why won't you get some code for mass virtual hosts from http://naviserver.sourceforge.net/ ??&lt;br /&gt;
-PB&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Does anyone have some code to implement apache-compatible SSI (Server-side includes)?  I have some old pages that use SSI that I'd like to move to my aolserver install but I don't have the time to rewrite them as ADPs.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
   &lt;br /&gt;
Is there a way to see only the errors (for example - 'variable' xxx not found? I seem to remember 2 logs - servername.log and servername-error.log?  The version I have now - aolserver 3.2/ad1.2 only seems to give us servername.log - and all the error messages are mixed with the normal msgs - its very hard to debug!&lt;br /&gt;
[[dannyl50]]&lt;br /&gt;
&lt;br /&gt;
The default/example config file did not have entries for both logs. The two sections you need look like (in old style notation): &lt;br /&gt;
&lt;br /&gt;
 [[ns/parameters]] &lt;br /&gt;
 User=nsadmin &lt;br /&gt;
 Group=nsadmin &lt;br /&gt;
 ServerLog=/var/log/aolserver/servername-error.log &lt;br /&gt;
 PidFile=/var/log/aolserver/nspid.servername&lt;br /&gt;
 Home=/usr/bin/aolserver-3.3ad13 &lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 [[ns/server/servername/module/nslog]] &lt;br /&gt;
 File=/var/log/aolserver/emp.log &lt;br /&gt;
 LogCombined=On &lt;br /&gt;
 MaxBackup=3 &lt;br /&gt;
 RollFmt=%Y-%m-%d-%H:%M &lt;br /&gt;
 RollHour=0 &lt;br /&gt;
 RollOnSignal=On &lt;br /&gt;
 RollLog=On&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Howdy!  Can someone tell me, in general terms, how they have implemented [[nsperm]]?  It looks cool, but I am using a plain old database with names and passwords, and it is very easy.  I would like the allow/deny functionality, can I have that without the username/password part? -- [[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
''I've implemented [[nsperm]] to restrict access to specific URLs using HTTP authentication (the username/password dialog) and cookie-based (if they have the correct cookie, otherwise URL redirect them to a login page that may set the cookie).''&lt;br /&gt;
''The latter is done using a registered preauth filter.  I chose to use [[nsperm]] over a database since [[nsperm]] (presumably) manages the authentication information in memory better than repeatedly hitting the database with authentication requests, but there's no reason''&lt;br /&gt;
''I couldn't have used a database to store username/password information.  Does this answer your question?'' -- [[Dossy]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pretty much, although I started writing my app before I understood AOLServer, so I have a rather strange design that is good in some ways, bad in others.  Keep in mind that this is a low activity app, no more than 20 concurrent users right now.  &lt;br /&gt;
&lt;br /&gt;
What I did was to create an [[ADP]] that has a big case statement.  It calls functions to generate pages based on the 'task' value it is passed through POST.  I have created a pretty complex app this way, not using [[ns_register_proc]] at all.  I know now I should have.  As I understand it, ns_register_proc lets you create a 'virtual' directory structure that actually just calls certain procedures based on the GET or POST requested URL.  This is far more graceful than hitting my main adp which opens up the form data, looks at the 'task' value, and decides which procedures to call.  &lt;br /&gt;
&lt;br /&gt;
Given this lame structure, each time someone requests the main adp, I just check for a valid cookie and generate a login page if it's not there.  After that, I have to set another cookie that is their 'access rights' which is then checked from within the procs that generate the pages.  If I was doing it right, I could have registered a proc that would fire for all URLs in my virtual tree, checking your rights to the particular URL you reqested, and redirecting you if you are not allowed, right?  &lt;br /&gt;
&lt;br /&gt;
Thanks!!! -- [[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
''I probably would've created an ADP per task, and then registered a preauth filter that checked for the cookie and redirected the user to the login page (outside the directory that the preauth filter covers''&lt;br /&gt;
''-- avoid funny redirection loops) if the cookie wasn't set properly.''&lt;br /&gt;
''If you don't want to create a separate ADP per task, you could have used ns_register_proc to create what you describe as &amp;quot;virtual pages&amp;quot; and still have the preauth filter kind of &amp;quot;sit in front&amp;quot; and handle the autehntication, keeping that logic seperate from your actual page generation code.'' -- [[Dossy]]&lt;br /&gt;
&lt;br /&gt;
I started with a separate adp for each task, but I thought it would get out of hand quickly.  I do think I will re-work the thing to use ns_register_proc and even do away with the few adp I do have.  It seems far easier to maintain.  In the meantime, I have to re-write all my SQL Server procedures in PostgreSQL PL/Tcl.  That's why I want the [[nsfreetds]] module so badly, it buys me a little time!&lt;br /&gt;
&lt;br /&gt;
Thanks for all your work! -- [[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
''Speaking of [[nsfreetds]], did you try nsfreetds-0.1pre?  Any luck?  Any problems?'' -- [[Dossy]]&lt;br /&gt;
&lt;br /&gt;
I just now tried it.  I installed freetds with no trouble, compiled nsfreetds, modified my nsd.tcl [[config file]], added the datasource to interfaces, and all seems fine, except for that I always get &amp;quot;no access to pool &amp;quot;mypool&amp;quot; while executing &amp;quot;ns_db gethandle mypool&amp;quot; ...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
I must have missed something.  I saw something in the README about setting $env(SYBASE) before starting nsd.  Is this the same as the SYBASE=/usr/pkg/freetds I had to do even before the build of nsfreetds?&lt;br /&gt;
&lt;br /&gt;
Thanks again... I feel like I am close.. -- [[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
''Yes, the $env(SYBASE) means setting the SYBASE environment variable.  To be safe, you can try this:''&lt;br /&gt;
&lt;br /&gt;
   $ cd /path/to/aolserver/install&lt;br /&gt;
   $ SYBASE=/usr/pkg/freetds; export SYBASE&lt;br /&gt;
   $ bin/nsd ...args...&lt;br /&gt;
&lt;br /&gt;
''Check log/server.log to make sure that the nsfreetds driver is actually loading.  You should see a lines like this at start-up:''&lt;br /&gt;
&lt;br /&gt;
   [[30/May/2001:13:42:37]][[11838.1024]][[-main-]] Notice: modload: loading '/home/aolserver-dev/bin/nsfreetds.so'&lt;br /&gt;
   [[30/May/2001:13:42:37]][[11838.1024]][[-main-]] Notice: Ns_FreeTDS_DriverInit(freetds):  Loaded Panoptic FreeTDS Driver v0.1-pre, built on May 21 2001 at 22:23:01.&lt;br /&gt;
&lt;br /&gt;
''Are you getting an error in the [[server log]] instead?'' -- [[Dossy]]&lt;br /&gt;
&lt;br /&gt;
I don't get an error, it seems to load nicely.  I can post or give you access to whatever files or output you would like to see, or an ssh login... -- [[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Another question:  Global variables ([[nsv]]*).  I am re-writing my app to use the [[ns_register_proc]] functionality versus my kludge where everything goes through an [[ADP]] that acts as a filter and traffic cop.  I have figured out register filter and register proc, but seem not to be able to use [[ns_puts]] from within the procs.  Is this right?  Anyway, I had been using [[ns_adp_include]] in my filter/traffic cop page to put consistent headers/footers on my pages.  I gather the more correct way (and only possible way with registered procs?) is to use global variables.  &lt;br /&gt;
&lt;br /&gt;
When do I initialize them?  How do I use them?  What are the caveats? W&lt;br /&gt;
&lt;br /&gt;
Thanks, -- [[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
''Have you started by reading the NSV documentation?'' -- [[Dossy]]&lt;br /&gt;
&lt;br /&gt;
Of course not 8^0  That would be too easy!  I will... -- [[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
OK, I read it.  It's too easy.  I use it for header, footer, and client side script html, which I stuff into html variable before returning it.  I would like the filter option we talked about in the chat which would prepend or append html automatically, but this will do. -- [[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
How hard would it be to add an HTTPS equivalent of Ns_FetchURL?&lt;br /&gt;
&lt;br /&gt;
''If you can build shared libraries on your target platform with OpenSSL, it probably wouldn't be too hard.  The trick would be writing enough stub code that can be loaded via the Tcl &amp;quot;load&amp;quot; proc so that you could access the OpenSSL-based https client from your Tcl code.  Is there a lot of demand for this?  I could probably bang something out as an initial attempt.'' -- [[Dossy]]&lt;br /&gt;
&lt;br /&gt;
[[Scott Goodwin]]'s [[nsopenssl]] now contains client side https functionality.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Am I a brick, or does ns_register_proc just plain not work with more than one argument for the proc?  I have tried the following code on both aolserver 3.2 running on NT4 and aolserver 3.4 on NetBSD 1.5.  It fails to register the proc even once, if I try to register it with more than one argument anywhere else.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ns_register_proc GET /foo1 foo 1&lt;br /&gt;
 ns_register_proc GET /foo2 foo 1 2&lt;br /&gt;
 ns_register_proc GET /foo3 foo 1 2 3&lt;br /&gt;
&lt;br /&gt;
 proc foo { conn one {two 22} {three 333}} {&lt;br /&gt;
 ns_return 200 text/html &amp;quot;one is $one, two is $two, three is $three&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This must be something simple.  I have already posted to the aolserver list but the listserv seems to have gone mad.&lt;br /&gt;
&lt;br /&gt;
[[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
''What are you trying to do?  It appears you want to pass constant parameters to your procedures.  If they are constants, why pass them?  Since ns_register_proc calls are generally in the global scope (and sourced when nsd starts) even a parameter that appears to be a variable probably can/will not vary.''&lt;br /&gt;
&lt;br /&gt;
''Presumably you need to get information from one page to another.  That means formvalues unless your page is stateful (usually a bad idea).  Check out the '''[[ns_conn]] form''' command to get yourself started.''  -- [[Jason Kane]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
OK, I'm using Windows 2000 SP2 and 3.4.1, and trying in vain to get Perl CGIs (legacy) to work.  The scripts work outside of Aolserver, and work on AOLserver on Linux, but when I try inside the script to GET from myself (eg, GET http://localhost:8000/foo?bar=bas), I'm told &amp;quot;unknown protocol TCP&amp;quot;, which is quite aggravating.&lt;br /&gt;
&lt;br /&gt;
Does anyone have any experience administering AOLServer on Windows?&lt;br /&gt;
&lt;br /&gt;
Thanks in advance!&lt;br /&gt;
&lt;br /&gt;
-Bill&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This is interesting, wy do you let me change your page?&lt;br /&gt;
I'm trying to find an example of how to get my data using:&lt;br /&gt;
 set formdata [[ns_conn form $conn]] &lt;br /&gt;
&lt;br /&gt;
-Jason&lt;br /&gt;
&lt;br /&gt;
Because it's a wiki!  A proc that gets posted variables includes the line you wrote there... then when you want to actually get the values, you can use something like &lt;br /&gt;
&lt;br /&gt;
 set myvar [[ns_set get $formdata myvar]]&lt;br /&gt;
&lt;br /&gt;
where myvar is the name of the variable.  There is also ns_queryget which looks like&lt;br /&gt;
&lt;br /&gt;
 set myvar [[[ns_queryget]] myvar defaultval]&lt;br /&gt;
&lt;br /&gt;
This is handy because if there is no value, it will assign a default value.  &lt;br /&gt;
&lt;br /&gt;
Check out aolserver.com, they have extensive (although sometimes misleading) docs.  If something the docs says should work doesn't, ask.  It may be out of date.&lt;br /&gt;
&lt;br /&gt;
[[Ian Harding]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I don't know where else to share my code fragments, so here seems like as good a place as any.  This one implements user public_html directories. It's based on someone else's stuff (I forget whose tho).  It should really do something with unknown mime types, and should do a better job with errors like unknown users.  It does honor directoryFile and adp maps in the config file.&lt;br /&gt;
&lt;br /&gt;
It works by registering a procedure to /users that interprets the username and finds their directory.  ns_register_proc doesn't allow wildcards other than in the last path element, so /~*  wouldn't work.  However that's not a problem for a filter, so there's a filter to take your /~user url and redirect it to /users/user&lt;br /&gt;
&lt;br /&gt;
-JR&lt;br /&gt;
&lt;br /&gt;
 proc homedir { conn ctx } {&lt;br /&gt;
   set url [[ns_conn url $conn]]&lt;br /&gt;
   set user {}&lt;br /&gt;
   set file {}&lt;br /&gt;
   regexp {^/users/([[^/]]*)(/.*)?$} $url dummy user file&lt;br /&gt;
   # ns_returnnotice 200 &amp;quot;url is $url user is $user, file is $file&amp;quot;&lt;br /&gt;
   set userfile [[getUserFile $user $file]]&lt;br /&gt;
   set type [[ns_guesstype $userfile]]&lt;br /&gt;
   if {[[string match &amp;quot;*[ns_config ns/server/[ns_info server]]/adp map]&amp;quot; $userfile]} {&lt;br /&gt;
     # ns_log notice &amp;quot;adp parsing $userfile&amp;quot;&lt;br /&gt;
     set cwd [[pwd]]&lt;br /&gt;
     cd [[file dirname $userfile]]&lt;br /&gt;
     # ns_return 200 text/html [[ns_adp_parse -file $userfile]]&lt;br /&gt;
     set result [[catch {ns_adp_parse -file $userfile} error]]&lt;br /&gt;
     if {$result} {&lt;br /&gt;
       ns_return 200 text/html $error&lt;br /&gt;
     } else {&lt;br /&gt;
       ns_return 200 text/html $error&lt;br /&gt;
     }&lt;br /&gt;
     cd $cwd&lt;br /&gt;
   } else {&lt;br /&gt;
     switch $type {&lt;br /&gt;
       &amp;quot;*/*&amp;quot; {&lt;br /&gt;
       }&lt;br /&gt;
       default {&lt;br /&gt;
        ns_returnfile 200 $type $userfile&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
       &lt;br /&gt;
   if {[[catch {set fp [open $userfile]]}]} {&lt;br /&gt;
     ns_returnnotfound&lt;br /&gt;
     return&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 proc getUserFile {user path} {&lt;br /&gt;
   foreach tail [[split ,[ns_config ns/server/[ns_info server]] directoryfile] ,] {&lt;br /&gt;
     set userfile &amp;quot;[[glob ~$user]]/public_html$path$tail&amp;quot;&lt;br /&gt;
     if {[[file exists $userfile]] &amp;amp;&amp;amp; ![[file isdirectory $userfile]]} {&lt;br /&gt;
       return $userfile&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   ns_returnnotfound&lt;br /&gt;
   # break&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ns_register_proc GET /users/ homedir&lt;br /&gt;
 ns_register_proc POST /users/ homedir&lt;br /&gt;
 ns_register_proc HEAD /users/ homedir&lt;br /&gt;
 &lt;br /&gt;
 proc userRedir {conn arg why} {&lt;br /&gt;
   set url [[ns_conn url]]&lt;br /&gt;
   regsub {^/~(.*)} $url {/users/\1} redir&lt;br /&gt;
   ns_log notice &amp;quot;url is $url, redir is $redir&amp;quot;&lt;br /&gt;
   ns_returnredirect $redir&lt;br /&gt;
   return filter_break&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 ns_register_filter preauth GET /~* userRedir&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Hi!&lt;br /&gt;
&lt;br /&gt;
Does anybody know a graphing module for Aolserver/TCL, with e.g. bargraphs, linegraphs,... ?&lt;br /&gt;
&lt;br /&gt;
-[[wiwo]]&lt;br /&gt;
&lt;br /&gt;
''Yes: [[nsgds]], [[nschartdir]].''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Can I detect if the user pushes the Stop button in their browser in my TCL/ADP page?&lt;br /&gt;
&lt;br /&gt;
Yes, although it's a kludge. ns_write will return zero if it cannot write because the connection has been lost. However, ns_write is not stupid enough to try writing when you give it nothing to write, and so you must send something to the client. To prevent this being rendered use HTML comments, e.g.&lt;br /&gt;
&lt;br /&gt;
 if {[[ns_write &amp;quot;&amp;lt;!-- STOP DETECTOR --&amp;gt;&amp;quot;]] == 0} {&lt;br /&gt;
     # user hit the stop button, browser page was closed, or connection to client was lost.&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Ximon Eighteen]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Sites_That_Run_On_AOLserver&amp;diff=2917</id>
		<title>Sites That Run On AOLserver</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Sites_That_Run_On_AOLserver&amp;diff=2917"/>
		<updated>2005-09-21T15:28:48Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 43&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is (a probably incomplete) list of sites that run on AOLserver.  Some you will recognize, some you probably won't.&lt;br /&gt;
&lt;br /&gt;
Note: Please add entries in the following format:&lt;br /&gt;
* Site name | Version | URL | description (optional)&lt;br /&gt;
&lt;br /&gt;
In order to appear on this list, the server '''MUST''' respond with a &amp;quot;Server:&amp;quot; header in the HTTP response which indicates that it is running AOLserver, and what version.&lt;br /&gt;
&lt;br /&gt;
The following is a list of sites running some version of AOLserver at AOL:&lt;br /&gt;
* AOL.COM | AOLserver/3.4.2 | http://aol.com/ | &lt;br /&gt;
* Netscape | AOLserver/3.5.5 | http://home.netscape.com/ | &lt;br /&gt;
* Digital City | AOLserver/4.0 | http://home.digitalcity.com/ | &lt;br /&gt;
* AOL Mail | AOLserver/3.5.9 | http://webmail.aol.com/ | &lt;br /&gt;
* Moviephone | ArtBlast/3.5.4 | http://www.moviephone.com/ | &lt;br /&gt;
&lt;br /&gt;
These are non-AOL sites that also use some version of AOLserver:&lt;br /&gt;
&lt;br /&gt;
'''AOLserver 4.1.x'''&lt;br /&gt;
* the CodeMill | AOLserver/4.1.0 | http://www.thecodemill.biz | host of the #aolserver IRC logs[http://www.thecodemill.biz/services/aolserver/irc/]&lt;br /&gt;
&lt;br /&gt;
'''AOLserver 4.0.x'''&lt;br /&gt;
* [[Panoptic Computer Network]] | AOLserver/4.0.10a | http://panoptic.com/ | &lt;br /&gt;
* NS_SHUTDOWN | AOLserver/4.0.10a | http://www.nsshutdown.com/ |&lt;br /&gt;
* OpenACS | AOLserver/4.0.9 | http://openacs.org/ | &lt;br /&gt;
* Creative Commons | AOLserver/4.0.8 | http://creativecommons.org/ | &lt;br /&gt;
* Volunteer Solutions | AOLserver/4.0.8 | http://www.volunteersolutions.org/ |&lt;br /&gt;
* jongriffin.com | AOLserver/4.0.5 | http://www.jongriffin.com/ | &lt;br /&gt;
* Salsa Blanca | AOLserver/4.0.5 | http://www.salsablanca.com/ | &lt;br /&gt;
* Kurup.org | AOLserver/4.0.3 | http://kurup.org/ | &lt;br /&gt;
* Seven Sisters Trading | AOLserver/4.0.3 | http://www.7-sisters.com/ | &lt;br /&gt;
* AIESEC.net | AOLserver/4.0 | http://www.aiesec.net/ | &lt;br /&gt;
* Don Baccus Photography | AOLserver/4.0 | http://donb.photo.net/ | &lt;br /&gt;
* M³ Beratungsgesellschaft | AOLserver/4.0 | http://www.m3-beratung.de/ |&lt;br /&gt;
* photo.net | AOLserver/4.0 | http://www.photo.net/ | &lt;br /&gt;
* WhatsThisIP.com | AOLserver/4.0.10 | http://whatsthisip.com/ |&lt;br /&gt;
* Treffpunkt | AOLserver/4.0.10 | http://www.treffpunktsystems.com/ |&lt;br /&gt;
&lt;br /&gt;
'''AOLserver 3.5.x'''&lt;br /&gt;
* OneWeek | AOLserver/3.5.10 | http://oneweek.org/ | &lt;br /&gt;
* Vitamist Spray Vitamins | AOLserver/3.5.6 | http://www.vitamist.com/ | &lt;br /&gt;
* Anchor Baptist Church | AOLserver/3.5.0 | http://www.anchorbaptist.org/ | &lt;br /&gt;
* Blue Ridge Amateur Radio Club | NaviServer/2.0 AOLserver/3.5.0 | http://www.radioclub.org/ | &lt;br /&gt;
* Irish Tribute | AOLserver/3.5.0 | http://www.irishtribute.com/ | IrishAbroad's tribute site for the WTC dead and missing&lt;br /&gt;
* online.ie | AOLserver/3.5.0 | http://www.online.ie/ | Irish news portal&lt;br /&gt;
&lt;br /&gt;
'''AOLserver 3.4.x'''&lt;br /&gt;
* Polska.pl | AOLserver/3.4z4l | http://www.polska.pl/ | &lt;br /&gt;
* AMTDA | AOLserver/3.4.2 | http://www.amtda.org/ | &lt;br /&gt;
* Away.com | AOLserver 3.4.2 | http://www.away.com/ | &lt;br /&gt;
* Bayt.com | AOLserver/3.4.2 | http://www.bayt.com/ | &lt;br /&gt;
* Onet.pl | AOLserver/3.4.2 | http://www.onet.pl/ | &lt;br /&gt;
* Techspex | AOLserver/3.4.2 | http://www.techspex.com/ | &lt;br /&gt;
* University of Hawaii Athletics | AOLserver/3.4.2 | http://uhathletics.hawaii.edu/ | &lt;br /&gt;
* Vivtek | AOLserver/3.4.2 | http://www.vivtek.com/ | &lt;br /&gt;
* unresponsive.net | AOLserver/3.4 | http://www.unresponsive.net/ | &lt;br /&gt;
&lt;br /&gt;
'''AOLserver 3.3.x'''&lt;br /&gt;
* Akoor | AOLserver/3.3.1+ad13 | http://www.akoor.com/ | a cultural french quiz site&lt;br /&gt;
* Bitzi | AOLserver/3.3.1+ad13 | http://bitzi.com/ | &lt;br /&gt;
* Caltech | AOLserver/3.3.1+ad13 | http://www.caltech.edu/ | &lt;br /&gt;
* Greatest Networker dot.Community | AOLserver/3.3.1+ad13 | http://www.greatestnetworker.com/ | &lt;br /&gt;
* Infogettable.net Backgammon | AOLserver/3.3.1+ad13 | http://backgammon.infogettable.net/ | &lt;br /&gt;
* thedesignexperience | AOLserver/3.3.1+ad13 | http://www.thedesignexperience.org/ | &lt;br /&gt;
 &lt;br /&gt;
'''AOLserver 3.2.x'''&lt;br /&gt;
* Investsberbank | AOLserver/3.2 | http://www.isb.ru/ | Joint-Stock Bank &amp;quot;Investsberbank&amp;quot;&lt;br /&gt;
* MyWorkoutProgram | AOLserver/3.2+ad12 | http://www.myworkoutprogram.com/ | &lt;br /&gt;
&lt;br /&gt;
'''AOLserver 2.x'''&lt;br /&gt;
* Asimba Trainer Pro | NaviServer/2.0 AOLserver/2.3.3 | http://www.asimbatrainerpro.com/ | &lt;br /&gt;
* Fitrex.com | NaviServer/2.0 AOLserver/2.3.3 | http://www.fitrex.com/ | &lt;br /&gt;
* WGCR Radio | NaviServer/2.0 AOLserver/2.3.3 | http://www.wgcr.org/ | &lt;br /&gt;
* British Cattle Movement Service | NaviServer/2.0 AOLserver/2.3.3 | http://www.bcms.gov.uk/ | &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Also, every website on this list is should be using AOLserver as well: http://openacs.org/community/sites/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
1&lt;br /&gt;
'''Discussion:'''&lt;br /&gt;
&lt;br /&gt;
'''Why MUST?''' Some people turn that off as part of their security principles. A known bug in Version 4.x would allow an attacker do simply grep through the following list. Could we please take that into consideration? How many sites would, e.g., introduce .adp pages just to get it on this _huge_ (irony) list?&lt;br /&gt;
&lt;br /&gt;
''If anyone takes &amp;quot;security through obscurity&amp;quot; seriously enough to obfuscate the Server: header that's returned, then they also shouldn't want to be included on this list for the same reasons, so that people don't know they run AOLserver.  Everyone else is free to advertise their sites here to try and ensure they get picked up by web server surveys like Netcraft, et. al.''&lt;br /&gt;
&lt;br /&gt;
Ok, good point. You're perfectly right. Maybe I was just annoyed by being deleted from the list without explanation about the reason (which was added later). But why reject sites that don't expose the Server header for whatever reason? It is very easy to test that a site is running AOLserver (as easy as testing if a bug exists, of course). Why should we insist on detailed versioning?&lt;br /&gt;
&lt;br /&gt;
''It makes maintaining the list easier.  It'd be annoying for folks to add sites to this list and claim they run AOLserver, and then three months later the site switches to Apache.  Who has the time to go poking and prodding to do server detection?  It's easy to automate a script that asks &amp;quot;do I get a Server: AOLserver/xxx in the HTTP response?&amp;quot; and have it automatically keep the list fresh, which is what I currently have and run periodically.  If folks running Apache/IIS want to falsely report AOLserver, that's annoying because the list will be inaccurate, but at least AOLserver will get the credit for the sites.  :-)''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Sites that claim to run AOLserver 3.x, because the person who entered it into this Wiki assured it at that point in time. It may happen that the site runs Apache when you visit it and that may result in immediate pain, suffering or death. You have been warned!'''&lt;br /&gt;
* removed&lt;br /&gt;
&lt;br /&gt;
''The links on the pages look awfully Vignette CURL-like.  Is this site really running AOLserver?  How can you prove it?''&lt;br /&gt;
&lt;br /&gt;
How does a label in the header prove it? But we had this already. I started this rubric ''Sites that claim to run...'' to go around it. But I have absolutely no problem to remove all my sites (including the ones who have the header) from this wiki page in order to satisfy this principle.&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Nsexpat&amp;diff=2916</id>
		<title>Nsexpat</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Nsexpat&amp;diff=2916"/>
		<updated>2005-09-18T23:48:11Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 218&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;fgs&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=How_to_set_up_PHP_under_AOLserver&amp;diff=2915</id>
		<title>How to set up PHP under AOLserver</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=How_to_set_up_PHP_under_AOLserver&amp;diff=2915"/>
		<updated>2005-09-15T02:15:11Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1314&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'' '''Prerequisites:''' ''&lt;br /&gt;
* AOLserver 4.0.6 [http://www.aolserver.com/] (currently CVS aolserver_v40_bp branch)&lt;br /&gt;
* PHP 4.3.7 or 5.0.0 [http://www.php.net/] + interim patch&lt;br /&gt;
&lt;br /&gt;
Also works with AOLserver 4.0.10 and PHP 5.0.4 but has problems if multiple virtual hosts use PHP (crashes the nsd process on Solaris). This behavior is also documented on the mailinglist for PHP 4.x, so it is not a regression.&lt;br /&gt;
&lt;br /&gt;
'' '''Instructions:''' ''&lt;br /&gt;
&lt;br /&gt;
'''Step 1.  Build and install Tcl and AOLserver.'''&lt;br /&gt;
&lt;br /&gt;
You can use a binary distribution of Tcl provided it is a threaded build of Tcl.  However, in order to build PHP, you will need to have AOLserver source available as PHP requires it in its own build process.  These instructions assume that you will install AOLserver into &amp;quot;/home/aolserver&amp;quot; and the source resides in &amp;quot;/src/aolserver-4.0.5&amp;quot;.  Replace these to reflect your environment as necessary.&lt;br /&gt;
&lt;br /&gt;
Building both Tcl and AOLserver is outside the scope of this document and should be covered in a separate document.&lt;br /&gt;
&lt;br /&gt;
'''Step 2.  Build and install PHP.'''&lt;br /&gt;
&lt;br /&gt;
The following is an example of how you will need to configure PHP for building:&lt;br /&gt;
&lt;br /&gt;
    $ ./configure  --with-aolserver=/home/aolserver --with-aolserver-src=/src/aolserver-4.0.5 --enable-shared&lt;br /&gt;
&lt;br /&gt;
&amp;quot;--with-aolserver=/home/aolserver&amp;quot; is the path to where AOLserver is installed (the --prefix option when you build AOLserver) and &amp;quot;--with-aolserver-src=/src/aolserver-4.0.5&amp;quot; is the path to where the AOLserver source lives.  &amp;quot;--enable-shared&amp;quot; may be turned on by default, which should build &amp;quot;libphp4.so&amp;quot; which we will need for AOLserver.&lt;br /&gt;
&lt;br /&gt;
Once configured, run &amp;quot;make&amp;quot; to compile PHP.  You do NOT need to do a &amp;quot;make install&amp;quot; or &amp;quot;make install-su&amp;quot; unless you want PHP to install the CLI executable and/or the PEAR stuff.  To install the necessary bits for AOLserver, simply copy &amp;quot;libs/libphp4.so&amp;quot; for PHP 4.3.7 or &amp;quot;libs/libphp5.so&amp;quot; for PHP 5.0.0 to your AOLserver module directory, and &amp;quot;php.ini-recommended&amp;quot; to your AOLserver home directory as &amp;quot;php.ini&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
    $ make&lt;br /&gt;
    ... lots of build output scrolls by ...&lt;br /&gt;
&lt;br /&gt;
    $ cp libs/libphp4.so /home/aolserver/bin&lt;br /&gt;
    $ cp php.ini-recommended /home/aolserver/php.ini&lt;br /&gt;
&lt;br /&gt;
The default php.ini file should be suitable at first: customize and tweak it later once you've confirmed that PHP is indeed working correctly.&lt;br /&gt;
&lt;br /&gt;
'''Step 3.  Configure AOLserver to load PHP support.'''&lt;br /&gt;
&lt;br /&gt;
Starting with the &amp;quot;sample-config.tcl&amp;quot; that comes with AOLserver, you need to make two simple changes.  The first is to set (or increase) the stack size to a minimum of 256KB.  The recommended value is 1MB.  Here is the relevant snippet from the sample-config.tcl, lines 139-143:&lt;br /&gt;
&lt;br /&gt;
    139 #&lt;br /&gt;
    140 # Thread library (nsthread) parameters&lt;br /&gt;
    141 #&lt;br /&gt;
    142 ns_section &amp;quot;ns/threads&amp;quot;&lt;br /&gt;
    143 #ns_param   stacksize [[expr 128*1024]] ;# Per-thread stack size.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;quot;ns_param&amp;quot; line that sets stack-size is currently commented out.  Uncomment that line, and change it to:&lt;br /&gt;
&lt;br /&gt;
    143 ns_param   stacksize [[expr 256*1024]] ;# Per-thread stack size.&lt;br /&gt;
&lt;br /&gt;
(Do not include the line number, &amp;quot;143&amp;quot;, at the start of the line -- that is for illustrative purposes only.)&lt;br /&gt;
&lt;br /&gt;
We have changed the stack from 128KB (&amp;quot;128*1024&amp;quot;) to 256KB (&amp;quot;256*1024&amp;quot;) and uncommented the line.  Change it to &amp;quot;1024*1024&amp;quot; to set it to 1MB.&lt;br /&gt;
&lt;br /&gt;
The next step is to add the necessary configuration to instruct AOLserver to load the PHP module at server start-up.  We do this by adding the following lines to the bottom of the sample-config.tcl file:&lt;br /&gt;
&lt;br /&gt;
    #&lt;br /&gt;
    # PHP&lt;br /&gt;
    #&lt;br /&gt;
    &lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/module/php&amp;quot;&lt;br /&gt;
        ns_param map *.php&lt;br /&gt;
    &lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/modules&amp;quot;&lt;br /&gt;
        ns_param php    ${bindir}/libphp4.so&lt;br /&gt;
&lt;br /&gt;
This tells AOLserver to load our libphp4.so from the directory pointed to by $bindir, and indicates that files ending with the suffix &amp;quot;.php&amp;quot; contain PHP code and should be processed by the PHP module.&lt;br /&gt;
&lt;br /&gt;
You will also want the server to look for PHP index pages.  To do this, append &amp;quot;index.php&amp;quot; to the end of the directory file line in your AOLserver configuration file:&lt;br /&gt;
&lt;br /&gt;
    set directoryfile   index.adp,index.html,index.htm,index.xhtml,index.xht,index.php&lt;br /&gt;
&lt;br /&gt;
'''Step 4. Start AOLserver, and enjoy!'''&lt;br /&gt;
&lt;br /&gt;
That's all there is to it.  Start up your server, place some .php files in your pageroot (configured as &amp;quot;servers/server1/pages&amp;quot; by default in sample-config.tcl) and request them in a web browser.  Everything should be working.&lt;br /&gt;
&lt;br /&gt;
As of 22jun2004, the following apps have been at least lightly tested:&lt;br /&gt;
* phpBB2 2.0.8 [http://www.phpbb.com/]&lt;br /&gt;
* SquirrelMail 1.4.3a [http://www.squirrelmail.org/]&lt;br /&gt;
&lt;br /&gt;
Both phpBB2 and SquirrelMail store &amp;quot;sensitive&amp;quot; data that you probably don't want a user to browse.  These come with .htaccess files installed but since AOLserver doesn't support .htaccess these files are unprotected.  One option is to enable [[nsperm]] and create entries to grant access to a non-existent user (implicitly denying access to everyone else).  The file to edit will live somewhere like &amp;quot;/home/aolserver/servers/server1/modules/nsperm/perms&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For phpBB2, add an entry like:&lt;br /&gt;
&lt;br /&gt;
    allowuser inherit GET /phpBB2/cache notfound&lt;br /&gt;
&lt;br /&gt;
For SquirrelMail, add an entry like:&lt;br /&gt;
&lt;br /&gt;
    allowuser inherit GET /mail/data notfound&lt;br /&gt;
    allowuser inherit GET /mail/plugins/squirrelspell/modules notfound&lt;br /&gt;
 &lt;br /&gt;
There is nothing special about the user &amp;quot;notfound&amp;quot;.  Any string here that is not found in your [[nsperm]] &amp;quot;passwd&amp;quot; file will work.  Change the URLs in the above examples to match the actual location of where you've installed the applications.&lt;br /&gt;
&lt;br /&gt;
An alternative approach to explictly deny users access might look something like:&lt;br /&gt;
&lt;br /&gt;
    denyuser inherit GET /mail/data &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The downside of this second method is that it allows authenticated users (those users who are in the [[nsperm]] &amp;quot;passwd&amp;quot; file) to access these protected files. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Appendix A.  Patch to PHP 4.3.7/5.0.0.'''&lt;br /&gt;
&lt;br /&gt;
Before applying this patch, you may need to remove a single whitespace character from the beginning of every line (as they were added so that the patch appears as preformatted text on the wiki.)  Place the file in the &amp;quot;php-4.3.7/sapi/aolserver&amp;quot; or &amp;quot;php-5.0.0/sapi/aolserver&amp;quot; directory as &amp;quot;aolserver.c.patch&amp;quot; and apply it with GNU patch:&lt;br /&gt;
&lt;br /&gt;
    $ patch -p0 &amp;lt; aolserver.c.patch&lt;br /&gt;
&lt;br /&gt;
Patch follows:&lt;br /&gt;
&lt;br /&gt;
 --- aolserver.c.orig    2003-05-30 21:37:44.000000000 -0400&lt;br /&gt;
 +++ aolserver.c 2004-06-21 22:00:48.000000000 -0400&lt;br /&gt;
 @@ -88,21 +88,12 @@&lt;br /&gt;
  static int&lt;br /&gt;
  php_ns_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)&lt;br /&gt;
  {&lt;br /&gt;
 -       int n;&lt;br /&gt;
 -       uint sent = 0;&lt;br /&gt;
 -&lt;br /&gt;
 -       while (str_length &amp;gt; 0) {&lt;br /&gt;
 -               n = Ns_ConnWrite(NSG(conn), (void *) str, str_length);&lt;br /&gt;
 -&lt;br /&gt;
 -               if (n == -1)&lt;br /&gt;
 -                       php_handle_aborted_connection();&lt;br /&gt;
 -&lt;br /&gt;
 -               str += n;&lt;br /&gt;
 -               sent += n;&lt;br /&gt;
 -               str_length -= n;&lt;br /&gt;
 +    if (Ns_WriteConn(NSG(conn), str, str_length) != NS_OK) {&lt;br /&gt;
 +        php_handle_aborted_connection();&lt;br /&gt;
 +        return 0;&lt;br /&gt;
         }&lt;br /&gt;
  &lt;br /&gt;
 -       return sent;&lt;br /&gt;
 +       return str_length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  /*&lt;br /&gt;
 @@ -148,7 +139,7 @@&lt;br /&gt;
  php_ns_sapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)&lt;br /&gt;
  {&lt;br /&gt;
         if(SG(sapi_headers).send_default_content_type) {&lt;br /&gt;
 -               Ns_ConnSetRequiredHeaders(NSG(conn), &amp;quot;text/html&amp;quot;, 0);&lt;br /&gt;
 +               Ns_ConnSetRequiredHeaders(NSG(conn), &amp;quot;text/html&amp;quot;, -1);&lt;br /&gt;
         }&lt;br /&gt;
  &lt;br /&gt;
         Ns_ConnFlushHeaders(NSG(conn), SG(sapi_headers).http_response_code);&lt;br /&gt;
&lt;br /&gt;
'''Appendix B.  Testing with the PHP test cases.'''&lt;br /&gt;
&lt;br /&gt;
PHP comes with a pretty thorough suite of test cases that check for regressions and for basic functionality.  Many of these tests work in a webserver context as well (about 2/3 of them).  A perl script, [http://www.aolserver.com/files/webtest.pl webtest.pl], can be used execute these tests.  This script is not specific to AOLserver.  It is known to work with Apache and should work with any webserver.&lt;br /&gt;
&lt;br /&gt;
To test PHP:&lt;br /&gt;
&lt;br /&gt;
   1. Download the script.&lt;br /&gt;
   2. Place the script in the PHP source tree.&lt;br /&gt;
   3. Execute: perl webtest.pl -h hostname:port -d /path/to/document/root&lt;br /&gt;
&lt;br /&gt;
An example command line might look like:&lt;br /&gt;
&lt;br /&gt;
    $ perl webtest.pl -h localhost:8000 -d /home/aolserver/servers/server1/pages/&lt;br /&gt;
&lt;br /&gt;
This script has been tested with PHP 4.3.7 and PHP 5.0.0.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
php-5.0.5 patch&lt;br /&gt;
 --- aolserver.c 2005-09-14 22:18:03.000000000 -0400&lt;br /&gt;
 +++ aolserver.c.back    2005-09-14 22:14:44.000000000 -0400&lt;br /&gt;
 @@ -88,12 +88,21 @@&lt;br /&gt;
  static int&lt;br /&gt;
  php_ns_sapi_ub_write(const char *str, uint str_length TSRMLS_DC)&lt;br /&gt;
  {&lt;br /&gt;
 -        if (Ns_WriteConn(NSG(conn), str, str_length) != NS_OK) {&lt;br /&gt;
 -            php_handle_aborted_connection();&lt;br /&gt;
 -             return 0;&lt;br /&gt;
 +       int n;&lt;br /&gt;
 +       uint sent = 0;&lt;br /&gt;
 +&lt;br /&gt;
 +       while (str_length &amp;gt; 0) {&lt;br /&gt;
 +               n = Ns_ConnWrite(NSG(conn), (void *) str, str_length);&lt;br /&gt;
 +&lt;br /&gt;
 +               if (n == -1)&lt;br /&gt;
 +                       php_handle_aborted_connection();&lt;br /&gt;
 +&lt;br /&gt;
 +               str += n;&lt;br /&gt;
 +               sent += n;&lt;br /&gt;
 +               str_length -= n;&lt;br /&gt;
         }&lt;br /&gt;
  &lt;br /&gt;
 -       return str_length;&lt;br /&gt;
 +       return sent;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
 @@ -139,7 +148,7 @@&lt;br /&gt;
  php_ns_sapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)&lt;br /&gt;
  {&lt;br /&gt;
         if(SG(sapi_headers).send_default_content_type) {&lt;br /&gt;
 -               Ns_ConnSetRequiredHeaders(NSG(conn), &amp;quot;text/html&amp;quot;, -1);&lt;br /&gt;
 +               Ns_ConnSetRequiredHeaders(NSG(conn), &amp;quot;text/html&amp;quot;, 0);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         Ns_ConnFlushHeaders(NSG(conn), SG(sapi_headers).http_response_code);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
~p&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Tutorials]] - [[PHP]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Modules&amp;diff=2914</id>
		<title>Modules</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Modules&amp;diff=2914"/>
		<updated>2005-09-13T12:55:12Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 160&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also [[Toolkits]] and [[Languages]]''&lt;br /&gt;
&lt;br /&gt;
''[[Jamie Rasmussen]] maintains a list of AOLserver modules tested against Windows[http://empoweringminds.spd.dcu.ie/openacs/aolserver_modules].  (Not recently updated - JR)''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Standard Modules'''&lt;br /&gt;
&lt;br /&gt;
AOLserver ships with the following modules:&lt;br /&gt;
* [[nscgi]] -- Standard CGI support for running external C programs, perl scripts etc.&lt;br /&gt;
* [[nscp]] -- Admin/debug support via a telnet like interface into a running server.&lt;br /&gt;
* [[nsdb]] -- The database interface, loads database specific drivers (below).&lt;br /&gt;
* [[nsext]] -- Communicates with external database drivers via proxy daemon.&lt;br /&gt;
* [[nslog]] -- Common log format or extended common log format access logging.&lt;br /&gt;
* [[nsperm]] -- Access control lists for groups/users, supports basic auth.&lt;br /&gt;
* [[nssock]] -- Standard [[socket driver]], used for HTTP requests.&lt;br /&gt;
* [[nsssl]] -- SSL [[socket driver]], links against proprietary RSA BSAFE library (not supplied).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Database Drivers'''&lt;br /&gt;
&lt;br /&gt;
AOLserver database drivers are either internal or external.  Internal drivers are shared libraries that are loaded in-process with the webserver -- they provide the best performance.  External drivers are shared libraries which are loaded by the AOLserver database proxy daemon [[nsext]], which communicates with the webserver process via sockets.  The advantage of running the database driver external to the webserver is that it isolates buggy, non-threadsafe database access libraries.  These&lt;br /&gt;
days however this is largely unneccessary, and the external drivers are usually slower due to context switching overhead.&lt;br /&gt;
* [[dqd_db2]] -- Internal '''IBM DB2''' driver (unmaintained).&lt;br /&gt;
* [[nsberkeleydb]] -- Internal '''BerkeleyDB''' driver.&lt;br /&gt;
* [[nsfreetds]] -- Internal MS '''SQL Server'''/'''Sybase''' driver.&lt;br /&gt;
* [[nsinformix]] -- Internal '''Informix''' driver.&lt;br /&gt;
* [[nsingres]] -- Internal '''Ingres r3''' driver.&lt;br /&gt;
* [[nsibasepd]] -- External '''Interbase''' driver.&lt;br /&gt;
* [[nsmysql]] -- Internal '''MySQL''' driver.&lt;br /&gt;
* [[nsodbc]] -- Internal '''ODBC''' driver.&lt;br /&gt;
* [[nsoracle]] -- Internal '''Oracle''' driver.&lt;br /&gt;
* [[nspostgres]] -- Internal '''PostgreSQL''' driver.&lt;br /&gt;
* [[nssolid]] -- Internal '''Solid''' driver.&lt;br /&gt;
* [[nssqlite2]] -- Internal '''SQLite v2''' driver.&lt;br /&gt;
* [[nssqlite3]] -- Internal '''SQLite v3''' driver.&lt;br /&gt;
* [[nsunixodbc]] -- Internal ODBC driver which uses the '''unixODBC''' driver.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Encryption / Security'''&lt;br /&gt;
* [[nsblowfish]] -- Encrypt Tcl strings with Blowfish cypher and hex encode.&lt;br /&gt;
* [[nsencrypt]] -- Uses OpenSSL to encrypt using the AES, Blowfish, Cast5, IDEA and DES cyphers.&lt;br /&gt;
* [[nsnss]] -- New SSL [[socket driver]], links against Netscape's portable runtime (NSPR) and security services (NSS) libraries.&lt;br /&gt;
* [[nsopenssl]] -- SSL [[socket driver]] links against OpenSSL, and also provides client connection capabilities.&lt;br /&gt;
* [[nspasswd]] -- CRYPT, MD5, SMD5, SHA and SSHA hashing algorithms.&lt;br /&gt;
* [[nssha1]] -- AOLserver module to perform SHA1 hashes.&lt;br /&gt;
* [[nspam]] -- Interface to Pluggable Authentication Modules (PAM).&lt;br /&gt;
* [[nsdigest]] -- Access control lists for groups/users (like [[nsperm]]), supports digest authentication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Virtual Hosting'''&lt;br /&gt;
&lt;br /&gt;
AOLserver 2.x and 4.x have built-in support for software or name-based [[virtual hosting]], but AOLserver 3.x does not.  Hardware virtual hosting (each server on its own port or IP) is supported across all three versions.&lt;br /&gt;
* [[nsvhr]] -- Redirecting proxy, passes virtualy hosted requests back to standalone server.&lt;br /&gt;
* [[nsunix]] -- [[socket driver]] for unix domain sockets, complements '''nsvhr'''.&lt;br /&gt;
* Patches to nsvhr and nsunix by [[Jerry Asher]] [http://web.hollyjerry.org:16080/]&lt;br /&gt;
* [[nssmartvh]] -- C and Tcl based smart virtual hosting module, by [[Zoro]]&lt;br /&gt;
* [[vat]] -- Tcl based Vhost Abstract Template Module, by [[Tom Jackson]]&lt;br /&gt;
* C-based virtual hosting module [http://deadlock.et.tudelft.nl/~daniel/vhost.html]&lt;br /&gt;
* [[nsvirthost]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Charting'''&lt;br /&gt;
* [[nsgdchart]] -- Generate png/jpg charts using open source gd library.&lt;br /&gt;
* [[nschartdir]] -- Generate charts using proprietary ChartDirector library.&lt;br /&gt;
* [[nsgd]] -- Generate png,jpg,wbmp,gif,... images using open source gd library.&lt;br /&gt;
* [[nsgraph]] -- &lt;br /&gt;
* i-no graphing module using gd library (defunct: [http://www.i-no.com/art/inochart.html])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''XML'''&lt;br /&gt;
* [[tDOM]] -- a Tcl extension which provides XML/XSLT functionality.&lt;br /&gt;
* [[nsxml]] -- &lt;br /&gt;
* [[nsexpat]] -- Interface to Expat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Web Services'''&lt;br /&gt;
* [[nssoap]] -- ''unfinnished, unsupported''&lt;br /&gt;
* [[nsxmlrpc]] -- XML-RPC server and client API [http://openacs.org/sdm/one-package.tcl?package_id=12]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''WebDAV'''&lt;br /&gt;
* [[nsdav]] -- Port of Apache's WebDAV [http://www.webdav.org/mod_dav/] support for AOLserver.&lt;br /&gt;
* [[nswebdav]] -- &lt;br /&gt;
* [[tDAV]] -- A WebDAV server module that uses [[tDOM]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Miscellaneous'''&lt;br /&gt;
* [[dqd_log]] -- Makes AOLserver log to a file descriptor.&lt;br /&gt;
* [[dqd_threadpool]] -- Job scheduling system with Tcl interface.&lt;br /&gt;
* [[dqd_utils]] -- collection of half a dozen small utility procs.&lt;br /&gt;
* [[nsadmin]] -- Database admin/log viewing features from v2 ported to v3.&lt;br /&gt;
* [[nsaspell]] -- Aspell Module [http://www.crystalballinc.com/vlad/software/]&lt;br /&gt;
* [[nsbinarysupport]] -- Write 8bit strings to connection without translation.&lt;br /&gt;
* [[nscache]] -- Tcl interface to AOLserver's caching API&lt;br /&gt;
* [[nsclamav]] -- ClamAV Anti-Virus Interface Module [http://www.crystalballinc.com/vlad/software/]&lt;br /&gt;
* [[nsdns]] -- DNS Server/Proxy Module [http://www.crystalballinc.com/vlad/software/]&lt;br /&gt;
* [[nsdqe]] -- Collection of utilities including caching, page counter, virtual hosting etc.&lt;br /&gt;
* [[nsexample]] -- An example module to help guide new module writers.&lt;br /&gt;
* [[nsfortune]] - Fortune like game module, uses real fortune files&lt;br /&gt;
* [[nsftp]] -- FTP server front end for AOLserver.&lt;br /&gt;
* [[nsfts]] -- Interface to Postgres full text search engine.&lt;br /&gt;
* [[nsimage]] -- returns sizes of various modules, implements [[ns_image]] &amp;amp; [[ns_pngsize]], replaces  [[ns_jpegsize]] &amp;amp; [[ns_gifsize]]&lt;br /&gt;
* [[nsimap]] -- IMAP Module [http://www.crystalballinc.com/vlad/software/]&lt;br /&gt;
* [[nsjabber]] --&lt;br /&gt;
* [[nsjk2]] -- Jakarta connector&lt;br /&gt;
* [[nsldap]] -- LDAP client&lt;br /&gt;
* [[nsmaverix]] -- SMTP Proxy with anti-spam/anti-virus/whitelist/greylist/blacklist capabilities and Web interface [http://www.crystalballinc.com/vlad/software/maverix/]&lt;br /&gt;
* [[nsmsg]] - IPC message module for AOLserver&lt;br /&gt;
* [[ns_pkg]] -- Dynamic Tcl package loading.&lt;br /&gt;
* [[nspool]] -- Pools of sockets, pipes and external processes.&lt;br /&gt;
* [[nsprofile]] -- Time execution of Tcl commands.&lt;br /&gt;
* [[nsreturnz]] -- Gzip content encoding for dynamic requests.&lt;br /&gt;
* [[nsrewrite]] -- &lt;br /&gt;
* [[nsroaming]] -- Netscape Navigator 4 Roaming Profiles.&lt;br /&gt;
* [[nssavi]] -- SOPHOS Anti-Virus Interface Module [http://www.crystalballinc.com/vlad/software/]&lt;br /&gt;
* [[nssession]] -- Session Management&lt;br /&gt;
* [[nssnmp]] -- SNMP Module [http://www.crystalballinc.com/vlad/software/]&lt;br /&gt;
* [[nssys]] - Unix system calls, including chmod, ioctl, fsstat, syslog, signal&lt;br /&gt;
* [[nstelemetry]] -- &lt;br /&gt;
* [[nsthreadpool]] -- &lt;br /&gt;
* [[nsuuid]] -- UUID generator module&lt;br /&gt;
* [[nszlib]] -- Zlib Module [http://www.crystalballinc.com/vlad/software/]&lt;br /&gt;
* [[nsperl]] -- Embedded Perl module (not production ready) [http://jam.sessionsnet.org/files/file?file_id=5477]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Aditional Software'''&lt;br /&gt;
* [[jk-voting]] -- Example DB based Voting Booth&lt;br /&gt;
* '''Cache Tools'''[http://bas.scheffers.net/aolserver/], by [[Bas Scheffers]] -- I haven't worked with this or tested it in years, would like to hear from users!&lt;br /&gt;
* Tcl AutoLoader for AOLServer by Hal Heisler [http://www.heisler.net/hal]&lt;br /&gt;
* AOLserver 3.x Remote Administration Modules [http://www.scriptkitties.com/]&lt;br /&gt;
* HTTP Cookie Library [http://www.scriptkitties.com/]&lt;br /&gt;
* Simple-Templating System [http://www.oakroad.net/simple-templates/]&lt;br /&gt;
* [[nstest]]&lt;br /&gt;
* [[William Webb]] has a list of some unmaintained AOLserver software he created which may still be useful to you.&lt;br /&gt;
* AM.net[http://aolserver.am.net] maintains a page of AOLserver resources which includes an [[ADP]] pareser module and a module which fetches web pages.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Web_Applications_for_AOLserver&amp;diff=2913</id>
		<title>Web Applications for AOLserver</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Web_Applications_for_AOLserver&amp;diff=2913"/>
		<updated>2005-09-11T12:53:31Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 35&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Dossy, 2000-08-14:'''  One of my big things is that webserver&lt;br /&gt;
software is no longer a ''product'' in and of itself, it is now a&lt;br /&gt;
''commodity''.  Any system that's web-enabled needs a webserver,&lt;br /&gt;
but at the midrange or lower (which is, IMHO, where most&lt;br /&gt;
applications are), all webservers perform adequately and&lt;br /&gt;
similar in performance with one another.  ''The choice of webserver&lt;br /&gt;
has become fairly moot.''&lt;br /&gt;
&lt;br /&gt;
The focus now is on ''applications'', and what applications are&lt;br /&gt;
readily available for the specific platform and environment that&lt;br /&gt;
has been chosen.  Even more, the platform and environment is&lt;br /&gt;
sometimes even dictated based on requirements and what applications&lt;br /&gt;
are available to meet those requirements.  This is where I think&lt;br /&gt;
serious energies need to be directed in order to make AOLserver&lt;br /&gt;
fill that void.&lt;br /&gt;
&lt;br /&gt;
Lets try and create a list of different categories of web&lt;br /&gt;
applications and specific applications that we think people&lt;br /&gt;
will look at and seriously consider as a good reason to adopt&lt;br /&gt;
AOLserver.&lt;br /&gt;
&lt;br /&gt;
'''Customer Relationship Management'''&lt;br /&gt;
* Online self-help/knowledgebase&lt;br /&gt;
&lt;br /&gt;
'''E-commerce'''&lt;br /&gt;
* Online storefront&lt;br /&gt;
* Cybercash API&lt;br /&gt;
&lt;br /&gt;
'''Messaging'''&lt;br /&gt;
* Web-based email&lt;br /&gt;
* Web-based netnews&lt;br /&gt;
&lt;br /&gt;
'''Personal Information Management'''&lt;br /&gt;
* Web-based calendar and scheduling&lt;br /&gt;
&lt;br /&gt;
'''Intranet applications'''&lt;br /&gt;
* Web-based calendar and scheduling&lt;br /&gt;
* collaborative to-do list.&lt;br /&gt;
* project management&lt;br /&gt;
* a wiki&lt;br /&gt;
* etc..&lt;br /&gt;
&lt;br /&gt;
'''ASP based applications''' edited by YekSoon&lt;br /&gt;
* any form of enterprise applications, for example CRM, DMS, etc.&lt;br /&gt;
'''[ Please, help add to this list if you can think of anything.  -D ]'''&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Useful_Links&amp;diff=2912</id>
		<title>Useful Links</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Useful_Links&amp;diff=2912"/>
		<updated>2005-09-11T08:01:24Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 11&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are a list of links to useful resources for AOLserver.&lt;br /&gt;
* TCL Performance Hints Page [http://mini.net/cgi-bin/wikit/348]&lt;br /&gt;
* Tcl Wiki [http://mini.net/cgi-bin/wikit/]&lt;br /&gt;
* Article about XML processing in AOLserver using nsxml module [http://www.fifthgate.org/articles/aolserver/xml/ns_xml_doc.html]&lt;br /&gt;
* Article about implementing search in AOLserver with SWISH++ [http://www.fifthgate.org/articles/aolserver/search/swish_search.html]&lt;br /&gt;
* An introductory article to AOLserver [http://www.fifthgate.org/articles/aolserver/intro.html]&lt;br /&gt;
* TCL Quick Reference Manual [http://sdss.fnal.gov:8000/dss/doc/www/tcl/tcl.commands.html]&lt;br /&gt;
* Frequently Made Mistakes in Tcl [http://starbase.neosoft.com/~claird/comp.lang.tcl/fmm.html] '''(DOWN)'''&lt;br /&gt;
* RPG style &amp;quot;Level Break&amp;quot; functionality in TCL [http://www.walters.demon.co.uk/tcl/tcl_stuff.htm]&lt;br /&gt;
* Tcl in AOL Digital City The Architecture of a Multithreaded High-Performance Web Site (by [[Jim Davidson]]).  Many requests for this. [http://www.aolserver.com/docs/intro/tcl2k/]&lt;br /&gt;
* AOLServer Utils [http://dante.nailed.org/software/] '''(DOWN)'''&lt;br /&gt;
* Resources for ArsDigita Bootcampers, Home-Studiers, etc. [http://www.primenet.com/~cohen/arsdigita/index.html]&lt;br /&gt;
* Beginner's Guide to the Installation of the ArsDigita Community System [http://www.openknowledge.org/acs/acs-beginner-toc.html]&lt;br /&gt;
* AOLserver @ am.net New Parser and ODBC Instructions [http://aolserver.am.net/]&lt;br /&gt;
* Fixing Crashing AOLServers [http://www.badgertronics.com/writings/server-fix.html]&lt;br /&gt;
* AOLServer Articles at Linux World [http://linuxworld.com/linuxworld/lw-1999-09/lw-09-aolserver_1.html]&lt;br /&gt;
* Building Sites with AOLserver Scott G.'s New Documentation Site [http://www.scottg.net/aolserver/] '''(DOWN)'''&lt;br /&gt;
* SSL, SSLv3, and Client-side Certificates with AOLserver [http://www.arsdigita.com/asj/aolserver-ssl]&lt;br /&gt;
* [[How to generate self-signed SSL certificates]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Olaf_Mersmann&amp;diff=2911</id>
		<title>Olaf Mersmann</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Olaf_Mersmann&amp;diff=2911"/>
		<updated>2005-09-09T04:51:52Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1417&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;olafm at kimberly dot tako dot de&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Things I'm currently working on:'''&lt;br /&gt;
* SAIM - A Simple Aolserver Install Maker ([[SAIM Proposal]]) - Currently on hold till I finish work on BIA&lt;br /&gt;
* BIA - A Batteries included AOLserver distribution ([[Batteries Included]])&lt;br /&gt;
&lt;br /&gt;
There's an alpha release of the scripts to build a BIA available [http://kimberly.tako.de/bia/bia-build.tar.gz here].&lt;br /&gt;
----&lt;br /&gt;
[[Category Home Page]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Frequently_Asked_Questions&amp;diff=2910</id>
		<title>Frequently Asked Questions</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Frequently_Asked_Questions&amp;diff=2910"/>
		<updated>2005-09-09T04:45:38Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 226&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Frequently Asked Questions'''&lt;br /&gt;
&lt;br /&gt;
(Please add new questions at the very bottom  of the list.  Thanks.)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''What is AOLserver?'''&lt;br /&gt;
&lt;br /&gt;
AOLserver is America Online's Open Source web server.  AOLserver is the backbone of the largest and busiest production environments in the world.&lt;br /&gt;
&lt;br /&gt;
AOLserver is a multithreaded, Tcl-enabled, massively-scalable and extensible web server tuned for large scale, dynamic web sites. AOLserver also includes complete database integration and a dynamic page scripting language.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''What is the latest version of AOLserver?'''&lt;br /&gt;
* The latest stable 3.4.x version is 3.4.2 released 18 September 2001.&lt;br /&gt;
* The latest stable 3.5.x version is 3.5.11 released 17 October 2003.&lt;br /&gt;
* The latest stable 4.0.x version is 4.0.10 released 18 January 2005.&lt;br /&gt;
* Current development (CVS HEAD) is 4.1.0a.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Where can I get AOLserver?'''&lt;br /&gt;
&lt;br /&gt;
The AOLserver project is hosted at [http://sourceforge.net/ SourceForge], and file releases are available for [[download]] in the [http://sourceforge.net/project/showfiles.php?group_id=3152 AOLserver Project Filelist].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''What platforms does AOLserver support?'''&lt;br /&gt;
&lt;br /&gt;
'''AOLserver''' is known to compile and run on the following platforms:&lt;br /&gt;
* Linux 2.2 (i386), 2.4 and 2.6&lt;br /&gt;
* Windows 95/98/NT/2K/XP (i386) (partially supported, see #6)&lt;br /&gt;
* FreeBSD 3.4 (i386)&lt;br /&gt;
* OpenBSD 2.5 (i386)&lt;br /&gt;
* UnixWare 7.x (i386)&lt;br /&gt;
* DEC Tru64 &amp;amp; OSF/1 4.0 (alpha)&lt;br /&gt;
* Solaris 2.x (sparc), Solaris 2.10 (x86)&lt;br /&gt;
* HP/UX 10 &amp;amp; 11 (hppa)&lt;br /&gt;
* Irix 6.x (mips)&lt;br /&gt;
* Apple MacOS X 10.3 (ppc), 10.4 (ppc)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''How is AOLserver licensed and distributed?'''&lt;br /&gt;
&lt;br /&gt;
Via the [[AOLserver Public License]], viewable at http://aolserver.com/license/.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''How does AOLserver performance compare to other major servers?'''&lt;br /&gt;
&lt;br /&gt;
[[Brady Wetherington]] says:  On Unix, AOLserver can generate many, many dynamic pages very quickly and reliably. It also has some special code paths designed to speed up processing of static pages (fastpath), though I don't use that very much, personally.  Along with the database connection pools, it's definitely one of the highest-performance web-based database systems I've used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''How is it different from Apache HTTP Server?'''&lt;br /&gt;
&lt;br /&gt;
The current Apache HTTP Server&lt;br /&gt;
* is part of / a project of the Apache Software Foundation. The process of development and decision making is working for years and accepted by all participants&lt;br /&gt;
* allows to run applications in a process-pre-forking or multi-threaded environment by design&lt;br /&gt;
* is the leading webserver, so it is widely known, accepted and supported&lt;br /&gt;
* is itself a subproject accompanied by lots of well known other projects and frameworks (like Ant, Jakarta, Struts...)&lt;br /&gt;
&lt;br /&gt;
In contrast AOLserver&lt;br /&gt;
* can do lots of use cases that are done with Apache modules with a few lines of TCL code (via registered filters and procs)&lt;br /&gt;
* is bound to its multi-threaded architecture that has its own disadvantages, depending on what you want to do&lt;br /&gt;
&lt;br /&gt;
'''How is it different from &amp;lt;insert other webserver&amp;gt;?'''&lt;br /&gt;
&lt;br /&gt;
???&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Where is AOLserver appropriate?  Where is it not?'''&lt;br /&gt;
&lt;br /&gt;
It is not appropriate...&lt;br /&gt;
* when you want to do virtual hosting for multiple customers.  For static content, AOLserver is fine - you're just serving static content.  For dynamic, server-side functionality, to get the level of privilege separation necessary, you'd have to run a separate nsd per customer to ensure that one customer can't access the content/data of another's.  There are apparently some folks out there who have set up AOLserver just this way and are doing just this.&lt;br /&gt;
* when the code you want to use is not thread-safe (and you are not able to change that)&lt;br /&gt;
* when your main application makes heavy use of cgi-tools or other scripting languages like PHP or Phython (in general: where currently no active dedicated maintainer for corresponding modules is known)&lt;br /&gt;
* when you need backup of a large world wide community that uses tools, modules and code you can find and read in every single computer magazine. AOLserver and TCL are niche products, which only means they are not sexy to the broad audience, but are used intensively by a sophisticated, intelligent minority&lt;br /&gt;
* when you know you would need more than one day to convince your customer to use it (in other words: if you use technology the first time don't let your most important customer be the beta tester)&lt;br /&gt;
&lt;br /&gt;
It is appropriate...&lt;br /&gt;
* when you want to make maximum use of your machines hardware ressources: AOLserver is a highly configurable beast that allows you to run big websites&lt;br /&gt;
* when you plan to run a website that makes heavy use of one or more databases (using pooled connections)&lt;br /&gt;
* when you want to cache lots or all of your static files (.html,.gif,.css.,.js ...) in your servers memory (via modules fastpath and nscache)&lt;br /&gt;
* when you like the good feeling of running and coding your apps on a well-tested multi-threaded server architecture. The server never has been a process-forking one.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The idea here is if you know your requirements and your scope is fairly stable and you feel comfortable you can predict the future, and if all signs point to the app. remaining small-to-medium in usage/traffic, then pick whatever platform or technology you like the best -- it really won't make a difference.  But, if you think that it's a very real possibility you'll need&lt;br /&gt;
to scale up capacity to meet growing demand/traffic, possibly indefinitely, then yes, the hidden cost of re-architecting or migrating to a different technology can be a killer when you have to use the words &amp;quot;sunk cost&amp;quot; to describe the originally developed system.  In that case, you may be better off starting with implementing with AOLserver, as its performance &amp;quot;ceiling&amp;quot; so to speak is higher than other technologies.  (TODO: Benchmarks demonstrating this empirically?)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''How do I get started with AOLserver?'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;need to link to a newbie guide HOWTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''How can I learn more about AOLserver?'''&lt;br /&gt;
&lt;br /&gt;
Start by reading the [[Documentation]], which is still a work-in-progress.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;package require&amp;quot; doesn't work!  What's wrong?'''&lt;br /&gt;
&lt;br /&gt;
Here's the relevant portion of a message [[Dossy Shiobara]] sent to the AOLserver mailing list back on 16 June 2000:&lt;br /&gt;
&lt;br /&gt;
  set tcl_library [[file join $tcl_pkgPath tcl${tcl_version}]]&lt;br /&gt;
  source [[file join $tcl_library init.tcl]]&lt;br /&gt;
&lt;br /&gt;
  package require works like a charm after that :-)&lt;br /&gt;
&lt;br /&gt;
There you have it.  Perhaps, some day, this won't be a necessary step.  But, in the meantime ...&lt;br /&gt;
&lt;br /&gt;
''As of AOLserver 4.0 and perhaps even a late version of 3.5.x, this step should no longer be necessary.''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;ns_set update [ns_conn outputheaders $conn] Content-Type {application/x-tcl}&amp;quot; does not work in .adp files as I wish.  The server always returns two copies of the Content-Type header, one as application/x-tcl, another as text/html and clients(galeon, tcl http package) always use the second.  How do I remove the second Content-Type?'''&lt;br /&gt;
&lt;br /&gt;
Good question -- this is really a bug that needs to be fixed in the server code itself.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''How can I get Tclet scripts served from AOLserver to run inside the Tcl Plugin?'''&lt;br /&gt;
&lt;br /&gt;
Someone asks: ''I have an aolserver for OpenACS.  I installed Tcl Plugin which works well with classic Tclets on Tcl Plugin Home Pages.  But with Aolserver, it doesn't work.... Do you know the answer of this?''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''How can I compile AOLserver on HP-UX, both 10.20 and 11.x?'''&lt;br /&gt;
&lt;br /&gt;
[[Dossy]]: Good question.  If I had easy access to HP-UX machines, I'd try it myself.  AOLserver 4.x should hopefully build on HP-UX without any changes, but I'm only guessing.&lt;br /&gt;
&lt;br /&gt;
HPUX doesn't implement a lot of BSD/POSIX IPC functions, or so I hear.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''I'm getting an error compiling AOLserver about POLLIN, POLLOUT and POLLPRI being redefined.  What's wrong?'''&lt;br /&gt;
&lt;br /&gt;
AOLserver requires that the &amp;quot;configure&amp;quot; script be run using the GNU C (gcc) compiler.  Try running the configure script like this:&lt;br /&gt;
&lt;br /&gt;
    $ CC=gcc ./configure --args...&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Does AOLserver support HTTP Keep-Alive?  I'm sending a HTTP/1.1 request via httperf and AOLserver isn't doing Keep-Alive like Apache does!  What's wrong?'''&lt;br /&gt;
&lt;br /&gt;
Actually, nothing is wrong. You just need to tell httperf to include the headers that tell AOLserver to expect multiple requests per connection. Add '--add_header &amp;quot;Connection: Keep-Alive\n&amp;quot;' to your httperf request. &lt;br /&gt;
&lt;br /&gt;
The issue is that Apache and AOLserver chose opposite default behaviors when interpretting [http://www.ietf.org/rfc/rfc2068.txt RFC 2068 section 8.1.2.1]:&lt;br /&gt;
&lt;br /&gt;
   An HTTP/1.1 server MAY assume that a HTTP/1.1 client intends to&lt;br /&gt;
   maintain a persistent connection unless a Connection header including&lt;br /&gt;
   the connection-token &amp;quot;close&amp;quot; was sent in the request. If the server&lt;br /&gt;
   chooses to close the connection immediately after sending the&lt;br /&gt;
   response, it SHOULD send a Connection header including the&lt;br /&gt;
   connection-token close.&lt;br /&gt;
&lt;br /&gt;
   An HTTP/1.1 client MAY expect a connection to remain open, but would&lt;br /&gt;
   decide to keep it open based on whether the response from a server&lt;br /&gt;
   contains a Connection header with the connection-token close. In case&lt;br /&gt;
   the client does not want to maintain a connection for more than that&lt;br /&gt;
   request, it SHOULD send a Connection header including the&lt;br /&gt;
   connection-token close.&lt;br /&gt;
&lt;br /&gt;
The key here is &amp;quot;MAY&amp;quot; -- AOLserver (currently, as of 4.0.10) chooses not to assume a Keep-Alive connection unless the client explicitly requests it by sending &amp;quot;Connection: Keep-Alive&amp;quot; in the HTTP request header.  This may change in the future (HTTP/1.1 requests default to Keep-Alive unless the client explicitly sends &amp;quot;Connection: close&amp;quot; -- apparently this is how Apache works).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Accessing_A_Database&amp;diff=2909</id>
		<title>Accessing A Database</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Accessing_A_Database&amp;diff=2909"/>
		<updated>2005-09-07T05:36:03Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 825&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note:  This tutorial is still very incomplete as of 16aug2004.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This is the simplest example of how to query a database.  It is not the recommended way to do it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;%&lt;br /&gt;
      # change &amp;quot;poolname&amp;quot; to match the pool you defined in your config.tcl&lt;br /&gt;
      set pool &amp;quot;poolname&amp;quot;&lt;br /&gt;
      # change to reflect the SQL you wish to execute&lt;br /&gt;
      set sql &amp;quot;SELECT NOW()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      set db &amp;quot;&amp;quot;&lt;br /&gt;
      catch {&lt;br /&gt;
        set db [[ns_db gethandle $pool]]&lt;br /&gt;
        set row [[ns_db select $db $sql]]&lt;br /&gt;
        while {[[ns_db getrow $db $row]]} {&lt;br /&gt;
          ns_adp_puts &amp;quot;row: [[ns_set array $row]]&amp;lt;br/&amp;gt;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      catch { ns_db releasehandle $db }&lt;br /&gt;
    %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveats:&lt;br /&gt;
* If you don't explicitly do an ''[ns_db releasehandle $db]'', that connection will not be returned to the pool, which can lead to accidentally exhausting all pool handles.  This can easily happen if an uncaught Tcl error is thrown in code before the ''[ns_db releasehandle]'' call is made, thus causing it to never get executed.&lt;br /&gt;
&lt;br /&gt;
This isn't true.  All handles are released after the connection has finished processing.  However, you should be aware that a db handle is a precious resource, so before you ''ns_return'' the results of your query, which may potentially take a long time, you should release your handles manually.&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_db]]&lt;br /&gt;
&lt;br /&gt;
: [http://wiki.tcl.tk/13185 Introduction to Database Access With nstcl] on [http://wiki.tcl.tk/0 The Tcler's Wiki] (''the nstcl package reimplements the ns_* functions from AOLserver'')&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Tutorial]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_db&amp;diff=2908</id>
		<title>Ns db</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_db&amp;diff=2908"/>
		<updated>2005-09-06T21:33:22Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 185&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Man page: http://aolserver.com/docs/tcl/ns_db.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''NAME'''&lt;br /&gt;
&lt;br /&gt;
: ns_db - Standard database access API.&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
: '''ns_db''' ''option ?arg arg ...?''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
This command provides a mechanism to access databases.  The legal ''option''s (which may be abbreviated) are:&lt;br /&gt;
* '''ns_db bindrow''' ''dbhandle''&lt;br /&gt;
* '''ns_db bouncepool''' ''poolname''&lt;br /&gt;
&lt;br /&gt;
: Marks all database handles for the specified database pool as stale. When any database handle currently open is put back into the pool, its connection to the database will be reset.&lt;br /&gt;
* '''ns_db cancel''' ''dbhandle''&lt;br /&gt;
* '''ns_db close''' ''dbhandle''&lt;br /&gt;
&lt;br /&gt;
: Closes the connection. Use this function only on handles that were obtained by the '''ns_db open''' function.  The server automatically close handles when the operation is complete, so you don't normally have to call this function.&lt;br /&gt;
* '''ns_db connected''' ''dbhandle''&lt;br /&gt;
* '''ns_db datasource''' ''dbhandle''&lt;br /&gt;
&lt;br /&gt;
: Returns the datasource for the database pool.&lt;br /&gt;
* '''ns_db dbtype''' ''dbhandle''&lt;br /&gt;
&lt;br /&gt;
: Returns the database type for the database pool.&lt;br /&gt;
* '''ns_db dml''' ''dbhandle sql''&lt;br /&gt;
* '''ns_db driver''' ''dbhandle''&lt;br /&gt;
&lt;br /&gt;
: Returns the name of the driver of the handle.&lt;br /&gt;
* '''ns_db exception''' ''dbhandle''&lt;br /&gt;
* '''ns_db exec''' ''dbhandle sqlcommand''&lt;br /&gt;
&lt;br /&gt;
: Executes the specified SQL command. It returns either NS_DML (if the SQL command is a DML or DDL command) or NS_ROWS (if the SQL command returns rows, such as a SELECT).  This function can be used for ad hoc querying, where you don't know what kind of SQL command will be executed.  &lt;br /&gt;
* '''ns_db flush''' ''dbhandle''&lt;br /&gt;
* '''ns_db gethandle''' ''?-timeout timeout? poolname ?nhandles?''&lt;br /&gt;
* '''ns_db getrow''' ''dbhandle setId''&lt;br /&gt;
* '''ns_db open''' ''driver datasource user password''&lt;br /&gt;
* '''ns_db poolname''' ''dbhandle''&lt;br /&gt;
* '''ns_db pools'''&lt;br /&gt;
* '''ns_db releasehandle''' ''dbhandle''&lt;br /&gt;
&lt;br /&gt;
: Puts the handle back in the pool.  The server will automatically return any open handles to the pool after a page has finished executing.&lt;br /&gt;
* '''ns_db 1row''' ''dbhandle sql''&lt;br /&gt;
&lt;br /&gt;
: This command expects the SQL to be a select statement that returns exactly one row and returns that row as an ns_set.  An error is returned if zero or more than one row is returned.&lt;br /&gt;
* '''ns_db 0or1row''' ''dbhandle sql''&lt;br /&gt;
&lt;br /&gt;
: This command expects the SQL to be a select statement that returns exactly zero or one row. On zero rows, a null string is returned. On one row, a newly allocated ns_set is returned.  An error is thrown if more then one row is returned.&lt;br /&gt;
* '''ns_db password''' ''dbhandle''&lt;br /&gt;
&lt;br /&gt;
: Returns the password of the user for the database pool.&lt;br /&gt;
* '''ns_db select''' ''dbhandle sql''&lt;br /&gt;
* '''ns_db setexception''' ''dbhandle code message''&lt;br /&gt;
* '''ns_db sp_exec''' ''dbhandle''&lt;br /&gt;
* '''ns_db sp_getparams'''&lt;br /&gt;
* '''ns_db sp_returncode''' ''dbhandle''&lt;br /&gt;
* '''ns_db sp_setparam''' ''dbhandle varname vartype inout value''&lt;br /&gt;
* '''ns_db sp_start''' ''dbhandle procname''&lt;br /&gt;
* '''ns_db user''' ''dbhandle''&lt;br /&gt;
&lt;br /&gt;
: Returns the user for the database pool.&lt;br /&gt;
* '''ns_db verbose''' ''dbhandle ?on | off?''&lt;br /&gt;
&lt;br /&gt;
'''EXAMPLES'''&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_buildsqldate]], [[ns_buildsqltime]], [[ns_buildsqltimestamp]], [[ns_dbquotename]], [[ns_dbquotevalue]], [[ns_localsqltimestamp]], [[ns_parsesqldate]], [[ns_parsesqltime]], [[ns_parsesqltimestamp]], [[ns_writecsv]]&lt;br /&gt;
&lt;br /&gt;
: The tutorial [[Accessing A Database]] shows some very simple '''ns_db''' usage&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_info_log&amp;diff=2907</id>
		<title>Ns info log</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_info_log&amp;diff=2907"/>
		<updated>2005-09-06T21:23:01Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1407&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From the [[ns_info]] page:&lt;br /&gt;
* '''ns_info log'''&lt;br /&gt;
&lt;br /&gt;
: returns the name of the error log specified by the &amp;quot;serverlog&amp;quot; parameter in the &amp;quot;ns/parameters&amp;quot; section, or &amp;quot;server.log&amp;quot; if not defined. Prepends the server's current working directory&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Graffiti&amp;diff=2906</id>
		<title>Graffiti</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Graffiti&amp;diff=2906"/>
		<updated>2005-09-06T16:39:12Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 14&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
----&lt;br /&gt;
* test&lt;br /&gt;
* test2&lt;br /&gt;
*   1 test3&lt;br /&gt;
*   1 test4&lt;br /&gt;
* test5&lt;br /&gt;
----&lt;br /&gt;
* test1&lt;br /&gt;
*   * test 1.1&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
[[Graffiti]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://slashdot.com]&lt;br /&gt;
----&lt;br /&gt;
* blah&lt;br /&gt;
   1 blah blah&lt;br /&gt;
   1. more blah blah&lt;br /&gt;
   1. blah blah w/ the next number?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''good'' said the umbrella&lt;br /&gt;
''bad'' said the mad dancer, ''can't take it any longer''&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
'single quotes' ''double'' '''triple'''&lt;br /&gt;
&lt;br /&gt;
  UNFORMATTED TEXT starts with white space&lt;br /&gt;
&lt;br /&gt;
''So, who's the one writing all this graffiti?'' -- [[Dossy]]&lt;br /&gt;
&lt;br /&gt;
: blockquoted text,&lt;br /&gt;
: and more blockquoted text.&lt;br /&gt;
&lt;br /&gt;
: this is a second blockquoted para&lt;br /&gt;
&lt;br /&gt;
   tag1: hi there&lt;br /&gt;
   tag2: ho there&lt;br /&gt;
   1. blablabla&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
bla &amp;lt;code&amp;gt;bla&amp;lt;/code&amp;gt; bla&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;asdsdasd &amp;lt;/b&amp;gt;&lt;br /&gt;
Teste -&lt;br /&gt;
&lt;br /&gt;
how long is a long line how long is a long line how long is a long line how long is a long line how long is a long line how long is a long line how long is a long line how long is a long line how long is a long line how long is a long line how long is a long line how long is a long line how long is a long line&lt;br /&gt;
----&lt;br /&gt;
[[Graffiti]] [Graffiti] [[graffiti]] [graffiti]&lt;br /&gt;
&lt;br /&gt;
Is there a way to force a newline?&lt;br /&gt;
 This is sometimes desirable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   int i = 0;&lt;br /&gt;
   int j = 0;&lt;br /&gt;
&lt;br /&gt;
aaaaaaa&lt;br /&gt;
bbbbbbb&lt;br /&gt;
&lt;br /&gt;
ccccccc&lt;br /&gt;
----&lt;br /&gt;
''Trying to get a definition list''&lt;br /&gt;
   term: definition&lt;br /&gt;
&lt;br /&gt;
   term:&lt;br /&gt;
   definition&lt;br /&gt;
&lt;br /&gt;
   term:&lt;br /&gt;
&lt;br /&gt;
   definition&lt;br /&gt;
&lt;br /&gt;
   term: definition blank lines on both sides&lt;br /&gt;
&lt;br /&gt;
'''DOESN'T SEEM TO WORK!''' -- [[Eliyahu]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Formatting_Rules&amp;diff=2905</id>
		<title>Formatting Rules</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Formatting_Rules&amp;diff=2905"/>
		<updated>2005-09-06T16:32:42Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 6&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Links'''&lt;br /&gt;
* Refer to a [[wiki]] page by enclosing it's name in square brackets: ''[wiki]''.  Case is not significant, spaces are fine.  Literal square brackets must be escaped: ''[[[[[''.&lt;br /&gt;
* URLs are recognized automatically: http://your.site/contents.html&lt;br /&gt;
* URLs in square brackets will be shown as a reference [http://www.aolserver.com/]], or as inline images if they have the extension .gif or .jpg.  You can also name an external link by putting a space and some string after the URL, like so: [http://www.aolserver.com/ an external link to your site].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Emphasis'''&lt;br /&gt;
* Surround text with pairs of single quotes to make it ''display in italic''&lt;br /&gt;
* Surround text with triple single quotes to make it '''display in bold'''&lt;br /&gt;
&lt;br /&gt;
To emphasise more than set of words per line, break the paragraph into multiple&lt;br /&gt;
lines.  They will be concatenated together for display.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Lists'''&lt;br /&gt;
&lt;br /&gt;
List items begin with three spaces, a token followed by a space, then the content of the list item, all on one line.  Three types of list are supported, here are the tokens:&lt;br /&gt;
* Bulleted lists use a '''*''' (star) token&lt;br /&gt;
* Numbered lists use the number-period '''1.''' token.  Just use the number ''1'', the items will be auto numbered.&lt;br /&gt;
* Definition lists use the definition followed by a colon, as token: '''mydef: '''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Formatting text'''&lt;br /&gt;
&lt;br /&gt;
You can blockquote indent text by starting the line out with a colon and whitespace, like so:&lt;br /&gt;
&lt;br /&gt;
: this should be indented.&lt;br /&gt;
&lt;br /&gt;
You can get a line break (basically, a &amp;lt;br/&amp;gt;) using three tildes, like so:&lt;br /&gt;
&lt;br /&gt;
    this should ~~~ appear on two lines&lt;br /&gt;
&lt;br /&gt;
which looks like this:&lt;br /&gt;
: this should ~~~ appear on two lines&lt;br /&gt;
&lt;br /&gt;
To get literal (preformatted) text, start the line with one or more whitespace:&lt;br /&gt;
&lt;br /&gt;
    proc example {foo bar} {&lt;br /&gt;
        puts &amp;quot;You can't go wrong with examples!&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Horizontal rules'''&lt;br /&gt;
&lt;br /&gt;
4 or more dashes (''----'') on a line by themselves create a horizontal rule.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Adding new pages'''&lt;br /&gt;
&lt;br /&gt;
To add a new page:~~~&lt;br /&gt;
   1. when editing a page, create a link to a new wiki page (using square brackets around the ''[New Page Name]'')&lt;br /&gt;
   1. ''Save'' the page you've edited&lt;br /&gt;
   1. when the page is redisplayed after being saved, click on the square bracket (on either side) of your new link&lt;br /&gt;
   1. you will be taken to an empty page with the title given by the link in the previous page, e.g. ''New Page Name''&lt;br /&gt;
   1. click on the link at the bottom of the page (to the right of the ''Last Updated:'' timestamp) for ''Edit '''New Page Name''' ''&lt;br /&gt;
   1. now you can edit the newly created page&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Practice your wiki skills on the [[graffiti]] page!&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Eliyahu_Skoczylas&amp;diff=2904</id>
		<title>Eliyahu Skoczylas</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Eliyahu_Skoczylas&amp;diff=2904"/>
		<updated>2005-09-06T16:03:58Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1427&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;mailto:eli_sko@mac.com&amp;gt; ~~~&lt;br /&gt;
Location: Jerusalem, Israel&lt;br /&gt;
&lt;br /&gt;
I do IT consulting and will now be using '''AOLserver''' for some of my clients.&lt;br /&gt;
(Mostly in conjunction with OpenACS and Project/OPEN....)&lt;br /&gt;
&lt;br /&gt;
For now, I've started sprucing up the documentation as I get to studying it.&lt;br /&gt;
&lt;br /&gt;
2005sep06 [[Dossy]]: ''Thanks, and welcome!''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''And that's all I have to say about that.''&amp;quot; -- [http://www.imdb.com/title/tt0109830/ Forrest Gump]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Home Page]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Wiki&amp;diff=2903</id>
		<title>Wiki</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Wiki&amp;diff=2903"/>
		<updated>2005-09-06T16:00:15Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 15&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''What's a Wiki?'''&lt;br /&gt;
&lt;br /&gt;
So far, I think this page gives the quickest and best introduction to it all:&lt;br /&gt;
* http://c2.com/cgi/wiki?WikiEssence&lt;br /&gt;
&lt;br /&gt;
Wiki Wiki is the Hawaiian term for &amp;quot;quick&amp;quot;.  [[Ward Cunningham]] is the one who coined the phrase of &amp;quot;Wiki Wiki Webs&amp;quot; (not to be confused with Will Smith's &amp;quot;Wiki Wiki Wild Wide Web&amp;quot;).  The idea is that you edit pages using simple [[formatting rules]], and the references between pages are maintained automatically when hyperlinks are created.&lt;br /&gt;
&lt;br /&gt;
It all works via CGI on a web server, so anyone with a web browser anywhere in the world can browse, follow links, and edit these pages.&lt;br /&gt;
&lt;br /&gt;
For a few links to Wiki stuff, look at http://c2.com/cgi/wiki?WikiWikiWeb&lt;br /&gt;
&lt;br /&gt;
A list of implementations of Wiki webs is at http://c2.com/cgi/wiki?WikiWikiClones&lt;br /&gt;
&lt;br /&gt;
There is an internal project at Xerox Parc called &amp;quot;Sparrow&amp;quot; [http://www.parc.xerox.com/istl/projects/sparrow/], which adds a fascinating new dimension to Wiki, by allowing users to edit portions of a standard HTML page:&lt;br /&gt;
* http://www.parc.xerox.com/istl/projects/sparrow/doc/www7/&lt;br /&gt;
&lt;br /&gt;
SlashDot has had a similar concept for some time with Everything [http://everything.slashdot.org/], but implemented as a sort of learning network, with the &amp;quot;strength&amp;quot; of links dependent on how often they're traversed.&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=ADP&amp;diff=2902</id>
		<title>ADP</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=ADP&amp;diff=2902"/>
		<updated>2005-09-06T05:00:49Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 164&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Acronym: AOLserver Dynamic Pages&lt;br /&gt;
&lt;br /&gt;
ADP is the primary method of providing dynamic content on AOLserver.&lt;br /&gt;
&lt;br /&gt;
ADPs contain a mixture of '''TCL''' and HTML, with the TCL code being parsed and evaluated by AOLserver as it delivers the page.  ADPs may invoke other ADPs (using [[ns_adp_include]]) and thereby build up libraries for common elements and subsections of a page like title headers,  menu and navigation bars, and footers, as well functional modules like acess validation or database queries.&lt;br /&gt;
&lt;br /&gt;
The TCL code in an ADP is contained within '''&amp;lt;% %&amp;gt;''' pseduo-tag pairs.  A modified format, '''&amp;lt;%= %&amp;gt;''', displays the results of the TCL code.  A very simple ADP would be:&lt;br /&gt;
   &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
         &amp;lt;title&amp;gt;My Clock&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
   &amp;lt;body&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;p&amp;gt;&lt;br /&gt;
   The time is now&lt;br /&gt;
   &amp;lt;%= [[ns_httptime [ns_time]]] %&amp;gt;.&lt;br /&gt;
   &amp;lt;/p&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;/body&amp;gt;&lt;br /&gt;
   &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a little bit more detail, and to take your first step on a long and winding road, see [[Writing Your First ADP]].&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=What_is_AOLserver&amp;diff=2901</id>
		<title>What is AOLserver</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=What_is_AOLserver&amp;diff=2901"/>
		<updated>2005-09-05T22:40:08Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1319&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From the [[AOLserver Wiki]] home page:&lt;br /&gt;
&lt;br /&gt;
: '''AOLserver''' is a high performance web server with a powerful customization API.&lt;br /&gt;
&lt;br /&gt;
From the [[FAQ]]:&lt;br /&gt;
&lt;br /&gt;
: '''AOLserver''' is [http://www.corp.aol.com/ America Online]'s Open Source web server. '''AOLserver''' is the backbone of the largest and busiest production environments in the world.&lt;br /&gt;
&lt;br /&gt;
: '''AOLserver''' is a multithreaded, Tcl-enabled, massively-scalable and extensible web server tuned for large scale, dynamic web sites. '''AOLserver''' also includes complete database integration and a dynamic page scripting language.&lt;br /&gt;
&lt;br /&gt;
It has been ported to many Unix-derived platforms, as well as to Windows.  A list is in the [[FAQ]] under &amp;quot;''What platforms does AOLserver support?''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Interestingly, some people (like [http://www.panoptic.com/technologies.html Panoptic] - the hosts of this wiki) classify AOLserver not as a &amp;quot;web server&amp;quot; but as an &amp;quot;application server.&amp;quot;  YMMV.&lt;br /&gt;
Maybe it's best to classify it as a programming environment for generating dynamic web content under heavy load conditions?&lt;br /&gt;
&lt;br /&gt;
In any case, AOLserver serves HTTP -- web pages -- containing the usual static files as well as ''ADP'' (''A''OLserver ''D''ynamic ''P''ages) containing TCL intermixed with HTML.  The parsing and execution of the TCL code occurs &amp;quot;within&amp;quot; the server, rather than being transferred out through a CGI interface to another programming environment.  The [http://www.apache.org/ Apache] web server running the [http://perl.apache.org/ mod_perl] interface module for Perl scripting is about the closest comparison.  The reduced overhead makes for better performance and allows for a higher maximum transaction volume (number of &amp;quot;hits&amp;quot;) with the same hardware system.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Eliyahu]] adds:&lt;br /&gt;
&lt;br /&gt;
All of those fancy words sound very fine and impressive, but what do they really mean? :-)&lt;br /&gt;
&lt;br /&gt;
: ''customization API'': an ''A''pplication ''P''rogramming ''I''nterface allows different software modules  (&amp;quot;applications&amp;quot;) to exchange data with each other -- '''AOLserver''' can be customized&lt;br /&gt;
&lt;br /&gt;
: ''Open Source'': the source code of the program is &amp;quot;open&amp;quot; -- freely available to be studied, installed, or modified -- and specifically licensed (by the [[AOLserver Public License]]) to prevent it from being converted into &amp;quot;proprietary&amp;quot; software; the [http://www.opensource.org/ Open Source Institute] advocates and tries to standardize this licensing approach&lt;br /&gt;
&lt;br /&gt;
: ''multithreaded'': different parts (&amp;quot;threads&amp;quot;) of the program can be run simultaneously and/or in different orders without getting &amp;quot;''tangled''&amp;quot; -- important when there are multiple processors in a server cluster and/or long-running pages that need to be repeatedly served&lt;br /&gt;
&lt;br /&gt;
: ''Tcl-enabled'': the &amp;quot;native&amp;quot; programming language for dynamic page content is '''Tcl''' [http://www.tcl.tk/] ~~~&lt;br /&gt;
: [[[Note that modules for other web programming [Languages]] such as [[PHP]], [[Java]], and [[Perl]] are also available, or under development]]&lt;br /&gt;
&lt;br /&gt;
: ''massively-scalable'': pages which run / are served on a small computer will act the same way when run / served on &amp;quot;large scale&amp;quot; hardware -- if you need to serve ''LOTS'' of pages at one time, or with lots of database action talking to multiple servers in a cluster, then '''AOLserver''' is good for you&lt;br /&gt;
&lt;br /&gt;
: ''extensible'': a well-defined set of interfaces (API's) lets you add new modules to implement new features, and thereby &amp;quot;extend&amp;quot; the server's operation&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Tutorial]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Writing_Your_First_ADP&amp;diff=2900</id>
		<title>Writing Your First ADP</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Writing_Your_First_ADP&amp;diff=2900"/>
		<updated>2005-09-05T13:37:02Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 821&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ADPs are the simplest way to create a dynamic page in AOLserver. They support the use of all Tcl commands - including AOLserver ones and those you create in Tcl libraries - mixed with HTML to create a complete web page. Unlike Tcl libraries, any changes you make to the ADP take effect immediately without having to restart the server.&lt;br /&gt;
&lt;br /&gt;
'''Configuration'''&lt;br /&gt;
&lt;br /&gt;
Before you start trying, make sure you have configured AOLserver correctly to parse ADP pages.&lt;br /&gt;
&lt;br /&gt;
In the configuration file (usually nsd.tcl), make sure that below:&lt;br /&gt;
&lt;br /&gt;
 ns_section &amp;quot;ns/server/${servername}/adp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
but before the next &amp;quot;ns_section&amp;quot;, you have the line: &lt;br /&gt;
&lt;br /&gt;
 ns_param map &amp;quot;/*.adp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
uncommented.&lt;br /&gt;
&lt;br /&gt;
When you start AOLserver, do so by using the &amp;quot;-ft&amp;quot; option; this runs the server in the foreground and shows any Tcl errors on the console.&lt;br /&gt;
&lt;br /&gt;
If you are running AOLserver in the more usual background mode, errors in ADP pages are written to the server log, by default SERVERHOME/log/server.log, or locate it from the value (path and filename) returned by [[ns_info log]].&lt;br /&gt;
&lt;br /&gt;
'''Writing an ADP'''&lt;br /&gt;
&lt;br /&gt;
In the server's pageroot, create a file called ''test.adp'' using your favourite editor and enter the following code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;%&lt;br /&gt;
    set title &amp;quot;Hello, AOLserver!&amp;quot;&lt;br /&gt;
    ns_adp_puts $title&lt;br /&gt;
 %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now request that page in a web browser.&lt;br /&gt;
&lt;br /&gt;
Another way to display the value of &amp;quot;title&amp;quot; would be:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;%= $title %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using that syntax, you can also display the results of a Tcl command:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;%= [[ns_httptime [ns_time]]] %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mixing HTML and Tcl'''&lt;br /&gt;
&lt;br /&gt;
You can mix HTML and Tcl code to make a complete page:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;%&lt;br /&gt;
    set title &amp;quot;Welcome to my homepage&amp;quot;&lt;br /&gt;
    set body &amp;quot;This is the main text part of the homepage&amp;quot;&lt;br /&gt;
  %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
      &amp;lt;title&amp;gt;&amp;lt;%= $title %&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;%= $body %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;p&amp;gt;Now let's count to 10!&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;%&lt;br /&gt;
         for {set i 1} {$i &amp;lt;= 10} {incr i} {&lt;br /&gt;
            ns_adp_puts &amp;quot;$i &amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
      %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting ''title'' and ''body'' as variables was pretty pointless in this case. In your real website, however, these values could be taken from the database by one ADP, which in turn uses [[ns_adp_include]] to include another ADP to format the page and which can be re-used by many pages on your site.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Tutorial]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Category_Tutorial&amp;diff=2899</id>
		<title>Category Tutorial</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Category_Tutorial&amp;diff=2899"/>
		<updated>2005-09-05T13:21:33Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1355&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Purpose: To provide an index of pages containing AOLserver documentation, specifically tutorials.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
To get a list of pages containing AOLserver tutorials, click on the title above.&lt;br /&gt;
&lt;br /&gt;
To add a page to this category, add a link to this page, e.g., [Category Tutorial].&lt;br /&gt;
&lt;br /&gt;
You might also take a look at the [[Tutorials]] page, where more tutorials seem to have linked themselves than to ''Category Tutorial''.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Category]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Eliyahu&amp;diff=2898</id>
		<title>Eliyahu</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Eliyahu&amp;diff=2898"/>
		<updated>2005-09-05T12:15:09Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1426&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See: [[Eliyahu Skoczylas]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Nsjk2&amp;diff=2897</id>
		<title>Nsjk2</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Nsjk2&amp;diff=2897"/>
		<updated>2005-08-24T20:22:11Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 234&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Project page: [http://sourceforge.net/project/showfiles.php?group_id=3152&amp;amp;package_id=110562]&lt;br /&gt;
----&lt;br /&gt;
[[Dossy]] 18nov2004: After much struggling trying to get the JNI channel working, I stumbled across this bug in the Apache Bugzilla database: [http://issues.apache.org/bugzilla/show_bug.cgi?id=28003 JK2 documentation and usage issues] ([http://www.mail-archive.com/tomcat-dev@jakarta.apache.org/msg55852.html copy]).  It specifically speaks to running Tomcat 5/mod_jk2/Apache 2 in-process with JNI -- very applicable for anyone running AOLserver/Tomcat 5/nsjk2 in-process with JNI.  In the Bugzilla report, there's a link to the [http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/index.html Tomcat 4.1 JK2 documentation] which isn't very well linked to.&lt;br /&gt;
&lt;br /&gt;
[[Dossy]] 11nov2004: I have just checked in changes to nsjk2 to simplify the build process -- I'm still not done yet, but it's much better than it was before.  Read the README.build file for step-by-step instructions on how to build nsjk2 and all the required pre-requisites.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
NB. On Linux 2.4 kernel as of 3rd Oct 2004. You can't compile the CVS source for nsjk2 against APR 1.0.0. Even after changing the build scripts to point to APR-1 instead of APR-0. It does compile successfully against APR 0.9.4. &lt;br /&gt;
&lt;br /&gt;
Also (missing for the build instructions) you need to symlink ''libaprutil-0.so'' to ''libaprutil.so'' as you do with ''libapr-0.so'' otherwise ''ant all'' fails.&lt;br /&gt;
&lt;br /&gt;
Steve Manning (steve@manning.net)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
BUG: [http://aolserver.com/sf/bug/984785 Sun JVM 1.4 on Linux SIGCHLD handler interferes w/Tcl exec]&lt;br /&gt;
&lt;br /&gt;
There is a known bug in the Sun JVM 1.4 on Linux where it unnecessarily installs a SIGCHLD signal handler which interferes with Tcl's [exec] command.  The bug has been fixed in JVM 1.5.0_beta2.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
http://listserv.aol.com/cgi-bin/wa?A2=ind0408&amp;amp;L=aolserver&amp;amp;P=29122&lt;br /&gt;
&lt;br /&gt;
  Date:         Thu, 19 Aug 2004 15:34:04 -0400&lt;br /&gt;
  From:         Timothy Suh &lt;br /&gt;
  Subject:      Re: nsjk2 - SEVERE error message.&lt;br /&gt;
&lt;br /&gt;
There seems to be a bug with tomcat 5.0.27 specifically with&lt;br /&gt;
tomcat-jni.jar package (see explanation below). I will report the bug to&lt;br /&gt;
tomcat folks.&lt;br /&gt;
&lt;br /&gt;
Solution is to use tomcat-5.0.19 which I know works. Other versions&lt;br /&gt;
between 5.0.27 and 5.0.19 may also work if they do not contain the bug.&lt;br /&gt;
I also tried replacing 5.0.27 with tomcat-jni.jar from 5.0.19. That&lt;br /&gt;
worked too. Of course, not sure if tomcat will behave overall. But this&lt;br /&gt;
is another option if you must use 5.0.27.&lt;br /&gt;
&lt;br /&gt;
Boring explanation follows:&lt;br /&gt;
&lt;br /&gt;
Basically, signature does not match. Looking at source code&lt;br /&gt;
(MsgContext.java and ChannelSocket.java) for both 5.0.19 and 5.0.27, the&lt;br /&gt;
problem is that&lt;br /&gt;
&lt;br /&gt;
ChannelSocket.java has&lt;br /&gt;
&lt;br /&gt;
  Public class ChannelSocket extends JkHandler&lt;br /&gt;
  ...&lt;br /&gt;
    MsgContext ep = new MsgContext()&lt;br /&gt;
    ep.setSource(this);&lt;br /&gt;
&lt;br /&gt;
this is fine when&lt;br /&gt;
&lt;br /&gt;
  MsgContext.java (5.0.19)&lt;br /&gt;
&lt;br /&gt;
    public final void setSource(JkHandler ch)&lt;br /&gt;
&lt;br /&gt;
however you get NoSuchMethod error when&lt;br /&gt;
&lt;br /&gt;
  MsgContext.java (5.0.27)&lt;br /&gt;
&lt;br /&gt;
    public final void setSource(JkChannel ch)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
http://listserv.aol.com/cgi-bin/wa?A2=ind0408&amp;amp;L=aolserver&amp;amp;P=21315&lt;br /&gt;
&lt;br /&gt;
  Date:         Tue, 17 Aug 2004 15:34:32 -0400&lt;br /&gt;
  From:         Dossy Shiobara &lt;br /&gt;
  Subject:      Change of ownership of the nsjk2 module&lt;br /&gt;
&lt;br /&gt;
On August 6, there were some changes at AOL that folks may want to be&lt;br /&gt;
aware of.&lt;br /&gt;
&lt;br /&gt;
The first is that Mark Page has left AOL.  We all wish him the best in&lt;br /&gt;
his new gig.  If we're lucky, maybe he'll still keep an eye on the&lt;br /&gt;
project and poke around once in a while.&lt;br /&gt;
&lt;br /&gt;
The second change is that Elizabeth Thomas has transitioned to a&lt;br /&gt;
different group within AOL, and is no longer involved in&lt;br /&gt;
AOLserver-specific development.  Therefore, ownership of the nsjk2&lt;br /&gt;
module has been transferred to Timothy Suh.&lt;br /&gt;
&lt;br /&gt;
Questions and issues should continue to be raised on this list or on the&lt;br /&gt;
wiki, but in case folks want to contact someone directly, please&lt;br /&gt;
redirect concerns to Tim's attention, now.  Thanks!&lt;br /&gt;
&lt;br /&gt;
-- Dossy&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
http://listserv.aol.com/cgi-bin/wa?A2=ind0405&amp;amp;L=aolserver&amp;amp;P=14159&lt;br /&gt;
&lt;br /&gt;
  Date: Fri, 21 May 2004 10:48:26 -0400&lt;br /&gt;
  From: Elizabeth Thomas&lt;br /&gt;
  Subject: Re: [[AOLSERVER]] Java support in AOLserver&lt;br /&gt;
&lt;br /&gt;
First off, I'm very excited about Dossy's new role. It's great news for&lt;br /&gt;
the AOLserver project. I would also like to take this opportunity to&lt;br /&gt;
introduce Timothy Suh, who is on our team here at AOL and is also&lt;br /&gt;
working on nsjk2.&lt;br /&gt;
&lt;br /&gt;
For the benefit of any newcomers, nsjk2 is a module which provides the&lt;br /&gt;
ability to run the Tomcat servlet container with AOLserver (much like it&lt;br /&gt;
is done with Apache). Tomcat can run either in the AOLserver process&lt;br /&gt;
(recommended) or out-of-process. With nsjk2, you can have an AOLserver&lt;br /&gt;
fielding requests for 'traditional' aolserver pages and as well as JSPs&lt;br /&gt;
and servlets. Its javatclbridge utilities enable your java pages access&lt;br /&gt;
to tcl and adp processing which allow you to leverage existing&lt;br /&gt;
AOLserver-based infrastructure. As AOL has a large AOLserver-based&lt;br /&gt;
investment, this bridging ability is a critical driver for our interest&lt;br /&gt;
in nsjk2 for those projects which, for various reasons, choose a&lt;br /&gt;
java-based implementation. This investment includes not only the&lt;br /&gt;
services coded in ADP/TCL, but also our operational administration and&lt;br /&gt;
configuration built around AOLserver. Strategically, the future of&lt;br /&gt;
AOLserver/Tomcat is somewhat uncertain - it will simply depend on who&lt;br /&gt;
finds it useful. However, there has been a great deal of interest in it&lt;br /&gt;
here.&lt;br /&gt;
&lt;br /&gt;
We are currently working on the following enhancements to nsjk2. These&lt;br /&gt;
are driven from requirements of internal projects at AOL.&lt;br /&gt;
&lt;br /&gt;
'''1. Tomcat 5 support'''&lt;br /&gt;
&lt;br /&gt;
This is nearly done. In fact, if you check out the head of the CVS&lt;br /&gt;
tree for nsjk2, you should be able to run nsjk2 with Tomcat 5. The main&lt;br /&gt;
trunk is forming the basis for an upcoming v2 release.&lt;br /&gt;
&lt;br /&gt;
For now, Tomcat 4 compatibility with only be supported on the (new) v1&lt;br /&gt;
branch (until such time that we can make v2 backward compatible). We&lt;br /&gt;
will backport the new features described below to the v1 branch as well.&lt;br /&gt;
&lt;br /&gt;
nsjk2_v1_r4 has been tagged (but not yet posted on sourceforge) - it&lt;br /&gt;
consists of just a minor fix to the java NsLog bridge to automatically&lt;br /&gt;
load the correct library.&lt;br /&gt;
&lt;br /&gt;
'''2. Java-implemented tcl commands'''&lt;br /&gt;
&lt;br /&gt;
We have a requirement to allow a tcl command to be implemented in java&lt;br /&gt;
and available from the AOLserver tcl interps - this is particularly&lt;br /&gt;
useful for administrative commands to be made available in the aolserver&lt;br /&gt;
control port. This is not a full 'calling java from tcl' approach a la&lt;br /&gt;
tclBlend, but more along the lines of how we implement tcl commands in&lt;br /&gt;
C. The command is implemented in java, and exposed through creating a&lt;br /&gt;
tcl command API. (Note that this does not prohibit future integration of&lt;br /&gt;
tclBlend should someone be so motivated :) )&lt;br /&gt;
&lt;br /&gt;
'''3. Java-controlled logging.'''&lt;br /&gt;
&lt;br /&gt;
Tomcat and AOLserver have separate logging mechanisms, which is often&lt;br /&gt;
undesirable to Operations, which wishes a single log (or single logging&lt;br /&gt;
configuration mechanism). The existing NsLog class in the javatclbridge&lt;br /&gt;
allows java code to log via the AOLserver Ns_Log mechanism. However, we&lt;br /&gt;
have projects that wish to control all their logging on the Java side&lt;br /&gt;
using facilities like log4j. To enable this, we are adding the ability&lt;br /&gt;
in AOLserver for a module to 'take over' the Ns_Log functionality by&lt;br /&gt;
registering callbacks.&lt;br /&gt;
&lt;br /&gt;
The final completion of all these items is scheduled for late July,&lt;br /&gt;
although you are likely to see them 'trickle in' to the baseline between&lt;br /&gt;
now and then. In the process, we'll also be looking for and addressing&lt;br /&gt;
issues that might affect AOLserver/Tomcat's viability in a production&lt;br /&gt;
environment.&lt;br /&gt;
&lt;br /&gt;
We are excited to hear about people's experiences with this combo and&lt;br /&gt;
welcome any additional fixes/enhancements that others are able to&lt;br /&gt;
contribute.&lt;br /&gt;
&lt;br /&gt;
-Elizabeth&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Nspasswd&amp;diff=2896</id>
		<title>Nspasswd</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Nspasswd&amp;diff=2896"/>
		<updated>2005-08-22T11:44:10Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 245&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;s&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Nsexample&amp;diff=2895</id>
		<title>Nsexample</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Nsexample&amp;diff=2895"/>
		<updated>2005-08-21T17:28:35Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 220&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;hello&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Nssoap&amp;diff=2894</id>
		<title>Nssoap</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Nssoap&amp;diff=2894"/>
		<updated>2005-08-17T17:34:09Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 250&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;unfinnished, unsupported&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Virtual_Hosting&amp;diff=2893</id>
		<title>Virtual Hosting</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Virtual_Hosting&amp;diff=2893"/>
		<updated>2005-07-21T21:02:29Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 98&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virtual hosting is built in to '''AOLserver 4'''. (See below for version 3.x recipes)&lt;br /&gt;
&lt;br /&gt;
Say you want to run 2 sites from one IP address. You'll need 3 config files - frontend.tcl, backend1.tcl and backend2.tcl. The frontend will run on port 80 and proxy requests to the backend servers depending on the hostname in the Header. You'll actually only run 1 AOLserver process. When you start nsd, you'll feed it frontend.tcl. The first thing frontend.tcl does is to read backend1.tcl and backend2.tcl. It sets up those virtual servers and then sets some global parameters. &lt;br /&gt;
&lt;br /&gt;
Here's how I set up my directory structure:&lt;br /&gt;
&lt;br /&gt;
 /home/vinod/web/&lt;br /&gt;
                 backend1/&lt;br /&gt;
                          backend1.tcl&lt;br /&gt;
                          log/&lt;br /&gt;
                          www/&lt;br /&gt;
                              index.adp&lt;br /&gt;
                 backend2/&lt;br /&gt;
                          backend2.tcl&lt;br /&gt;
                          log/&lt;br /&gt;
                          www/&lt;br /&gt;
                              index.adp&lt;br /&gt;
                 frontend/&lt;br /&gt;
                          frontend.tcl&lt;br /&gt;
                          log/&lt;br /&gt;
&lt;br /&gt;
And here are the files:&lt;br /&gt;
                 &lt;br /&gt;
'''frontend.tcl'''&lt;br /&gt;
&lt;br /&gt;
    ns_log notice &amp;quot;Starting to read frontend config file...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    source /home/vinod/web/backend1/backend1.tcl&lt;br /&gt;
    source /home/vinod/web/backend2/backend2.tcl&lt;br /&gt;
&lt;br /&gt;
    ns_log notice &amp;quot;Done loading backend server configs...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Load nssock globally&lt;br /&gt;
    ns_section ns/modules&lt;br /&gt;
    ns_param   nssock          /usr/local/aolserver/bin/nssock.so&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/module/nssock&lt;br /&gt;
    ns_param   port            80&lt;br /&gt;
    ns_param   hostname        myhostname.example.com&lt;br /&gt;
    ns_param   address         0.0.0.0&lt;br /&gt;
    ns_param   defaultserver   backend1&lt;br /&gt;
&lt;br /&gt;
    # Map headers to server-name&lt;br /&gt;
    ns_section ns/module/nssock/servers&lt;br /&gt;
    ns_param   backend1        backend1.com&lt;br /&gt;
    ns_param   backend1        backend1.com:80&lt;br /&gt;
    ns_param   backend2        backend2.com&lt;br /&gt;
    ns_param   backend2        backend2.com:80&lt;br /&gt;
    ns_param   backend2        myotherdomain.com&lt;br /&gt;
    ns_param   backend2        myotherdomain.com:80&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/servers&lt;br /&gt;
    ns_param   backend1        &amp;quot;My First Example Site&amp;quot;&lt;br /&gt;
    ns_param   backend2        &amp;quot;My Second Example Site&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Global server parameters&lt;br /&gt;
    ns_section ns/parameters&lt;br /&gt;
    ns_param   serverlog        /home/vinod/web/frontend/log/error.log&lt;br /&gt;
    ns_param   home             /usr/local/aolserver&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/threads&lt;br /&gt;
    ns_param   stacksize        [[expr 128*1024]] ;# Per-thread stack size.&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/mimetypes&lt;br /&gt;
    ns_param   default          &amp;quot;*/*&amp;quot;     ;# MIME type for unknown extension.&lt;br /&gt;
    ns_param   noextension      &amp;quot;*/*&amp;quot;     ;# MIME type for missing extension.&lt;br /&gt;
&lt;br /&gt;
    ns_log notice &amp;quot;nsd.tcl: finished reading frontend config file.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''backend1.tcl''' and '''backend2.tcl''' (The only difference is the first line)&lt;br /&gt;
    set server                  &amp;quot;backend1&amp;quot; ;# or &amp;quot;backend2&amp;quot; for backend2.tcl&lt;br /&gt;
    ns_log notice &amp;quot;Starting to read $server config file...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    set db_name                 $server&lt;br /&gt;
    set serverroot              &amp;quot;/home/vinod/web/${server}&amp;quot;&lt;br /&gt;
    set bindir                  [[file dirname [ns_info nsd]]]&lt;br /&gt;
    set pageroot                ${serverroot}/www&lt;br /&gt;
&lt;br /&gt;
    # Tcl Configuration&lt;br /&gt;
    ns_section ns/server/${server}/tcl&lt;br /&gt;
    ns_param   library          ${serverroot}/tcl&lt;br /&gt;
&lt;br /&gt;
    # Server parameters&lt;br /&gt;
    ns_section ns/server/${server}&lt;br /&gt;
    ns_param   directoryfile      index.tcl,index.adp,index.html,index.htm&lt;br /&gt;
    ns_param   pageroot           $pageroot&lt;br /&gt;
&lt;br /&gt;
    # ADP (AOLserver Dynamic Page) configuration&lt;br /&gt;
    ns_section ns/server/${server}/adp&lt;br /&gt;
    ns_param   map           /*.adp    ;# Extensions to parse as ADP's&lt;br /&gt;
    ns_param   defaultparser fancy&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/server/${server}/adp/parsers&lt;br /&gt;
    ns_param   fancy    &amp;quot;.adp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Database drivers&lt;br /&gt;
    ns_section &amp;quot;ns/db/drivers&amp;quot;&lt;br /&gt;
    ns_param   postgres        ${bindir}/nspostgres.so&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/db/pools&lt;br /&gt;
    ns_param   ${server}pool1      &amp;quot;$server Pool 1&amp;quot;&lt;br /&gt;
    ns_param   ${server}pool2      &amp;quot;$server Pool 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/db/pool/${server}pool1&lt;br /&gt;
    ns_param   driver             postgres&lt;br /&gt;
    ns_param   datasource         localhost::${db_name}&lt;br /&gt;
    ns_param   user               vinod&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/db/pool/${server}pool2&lt;br /&gt;
    ns_param   driver             postgres&lt;br /&gt;
    ns_param   datasource         localhost::${db_name}&lt;br /&gt;
    ns_param   user               vinod&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/server/${server}/db&lt;br /&gt;
    ns_param   pools              &amp;quot;${server}pool1,${server}pool2&amp;quot;&lt;br /&gt;
    ns_param   defaultpool        ${server}pool1&lt;br /&gt;
&lt;br /&gt;
    # Access log -- nslog&lt;br /&gt;
    ns_section ns/server/${server}/module/nslog&lt;br /&gt;
    ns_param   file                 ${serverroot}/log/access.log&lt;br /&gt;
&lt;br /&gt;
    # Modules to load&lt;br /&gt;
    ns_section ns/server/${server}/modules&lt;br /&gt;
    ns_param   nsdb            ${bindir}/nsdb.so&lt;br /&gt;
    ns_param   nslog           ${bindir}/nslog.so&lt;br /&gt;
&lt;br /&gt;
    ns_log notice &amp;quot;Finished reading $server config file.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This sets up 2 pretty plain virtual hosts. Once you get this setup working, you can configure backend1.tcl and backend2.tcl to your heart's desire.&lt;br /&gt;
&lt;br /&gt;
Note that you can map multiple Headers to 1 server. It's also important to note that the server's error log is specified in ns/parameters, so you can't specifiy a separate error.log for each backend server. &lt;br /&gt;
&lt;br /&gt;
Start your server:&lt;br /&gt;
&lt;br /&gt;
    root:/home/vinod/web/frontend# /usr/local/aolserver/bin/nsd -t frontend.tcl -b 0.0.0.0:80 -u nobody -g web&lt;br /&gt;
&lt;br /&gt;
Hope this helps - [[Vinod Kurup]] 2005-07-21&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''AOLserver 3.x'''&lt;br /&gt;
&lt;br /&gt;
The following three patches are required to get [[nsvhr]]/[[nssock]] and nsvhr/[[nsunix]] working under AOLserver 3.5.x:&lt;br /&gt;
* http://panoptic.com/aolserver/dossy-aolserver3_5_x-patch (1313 bytes)&lt;br /&gt;
* http://panoptic.com/aolserver/dossy-nsunix-patch (21909 bytes)&lt;br /&gt;
* http://panoptic.com/aolserver/dossy-nsvhr-patch (1945 bytes)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:  As of 2002-11-23, the changes to the core are''' ''no longer necessary'' '''and the changes to nsunix and nsvhr have been committed to CVS.  Look for tag nsunix3_5 and nsvhr3_5.'''&lt;br /&gt;
&lt;br /&gt;
In the nsvhr server's nsd.tcl:&lt;br /&gt;
&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/modules&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
    ns_param nssock       nssock.so&lt;br /&gt;
    ns_param nsvhr        nsvhr.so&lt;br /&gt;
&lt;br /&gt;
    #&lt;br /&gt;
    # Virtual Hosting redirector -- nsvhr&lt;br /&gt;
    #&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/module/nsvhr&amp;quot;&lt;br /&gt;
    ns_param   Method          &amp;quot;GET&amp;quot;      ;# Methods allowed to proxy&lt;br /&gt;
    ns_param   Method          &amp;quot;POST&amp;quot;     ;# Methods allowed to proxy (can have &amp;gt;1)&lt;br /&gt;
    ns_param   Method          &amp;quot;HEAD&amp;quot;     ;# Methods allowed to proxy (can have &amp;gt;1)&lt;br /&gt;
    ns_param   Timeout         60         ;# Timeout waiting for back-end&lt;br /&gt;
&lt;br /&gt;
    # Register hosts to proxy&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/module/nsvhr/maps&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ns_param   &amp;quot;www.domain.com&amp;quot;        &amp;quot;unix://domain.com.nsunix&amp;quot;&lt;br /&gt;
    ns_param   &amp;quot;www.domain.com:80&amp;quot;     &amp;quot;unix://domain.com.nsunix&amp;quot;&lt;br /&gt;
    ns_param   &amp;quot;domain.com&amp;quot;            &amp;quot;unix://domain.com.nsunix&amp;quot;&lt;br /&gt;
    ns_param   &amp;quot;domain.com:80&amp;quot;         &amp;quot;unix://domain.com.nsunix&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the nssock or nsunix virtual host's nsd.tcl:&lt;br /&gt;
&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/module/nsunix&amp;quot;&lt;br /&gt;
    ns_param Hostname     www.domain.com&lt;br /&gt;
    ns_param Port         80&lt;br /&gt;
    ns_param Location     http://www.domain.com&lt;br /&gt;
    ns_param SocketFile   domain.com.nsunix&lt;br /&gt;
&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/modules&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
    ns_param nsunix       nsunix.so&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Easy Virtual Hosting]]&lt;br /&gt;
----&lt;br /&gt;
[[Category Documentation]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_register_proc&amp;diff=2892</id>
		<title>Ns register proc</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_register_proc&amp;diff=2892"/>
		<updated>2005-07-14T20:10:17Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 186&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Man page: http://aolserver.com/docs/tcl/ns_register_proc.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''NAME'''&lt;br /&gt;
&lt;br /&gt;
:       ns_register_proc - Register a procedure for a method/URL combination&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
:       '''ns_register_proc''' ''?-noinherit?'' method URL myproc ''?args?''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
:              '''ns_register_proc'''  registers  the procname to handle&lt;br /&gt;
:              the  specified  method/URL  combination.  When  the&lt;br /&gt;
:              server  gets  a matching request, it calls procname&lt;br /&gt;
:              with the connection id and any arguments  specified&lt;br /&gt;
:              here.&lt;br /&gt;
&lt;br /&gt;
:              If  ''-noinherit'' is specified, the requested URL must&lt;br /&gt;
:              match the specified URL exactly.  For  example,  if&lt;br /&gt;
:              the   URL   specified   with   '''ns_register_proc'''  is&lt;br /&gt;
:              /foo/bar, procname will not be  called  unless  the&lt;br /&gt;
:              requested URL is exactly /foo/bar.&lt;br /&gt;
&lt;br /&gt;
:              If  ''-noinherit''  is not specified, the requested URL&lt;br /&gt;
:              can match the specified URL or any  URL  below  it.&lt;br /&gt;
:              For  example,  if  the URL specified with '''ns_register_proc''' &lt;br /&gt;
:              is /foo/bar, procname will be  called  for&lt;br /&gt;
:              /foo/bar,  /foo/bar/hmm,  and  any  other URL below&lt;br /&gt;
:              /foo/bar, provided there  is  not  already  another&lt;br /&gt;
:              procedure  registered  for that exact URL or for an&lt;br /&gt;
:              URL with a closer match.&lt;br /&gt;
&lt;br /&gt;
:              Note that you must use a glob-style matching  character  &lt;br /&gt;
:              if  you want inheritance for file names. For&lt;br /&gt;
:              example,   if   you   want   /foo/bar   to    match&lt;br /&gt;
:              /foo/bar.html,   you   must  use:  &lt;br /&gt;
&lt;br /&gt;
                      ns_register_proc /foo/bar*&lt;br /&gt;
&lt;br /&gt;
:              You can  register  two  procedures  for  any  given&lt;br /&gt;
:              method/URL  combination by calling '''ns_register_proc'''&lt;br /&gt;
:              once with the ''-noinherit'' flag set and once  without&lt;br /&gt;
:              it.  Only  one of the procedures will be called for&lt;br /&gt;
:              any given request, depending on whether the URL was&lt;br /&gt;
:              an exact match or not. For example:&lt;br /&gt;
&lt;br /&gt;
                     ns_register_proc -noinherit GET /foo/bar Aproc&lt;br /&gt;
                     ns_register_proc GET /foo/bar Bproc&lt;br /&gt;
                     ns_register_proc GET /foo/bar/hmm Cproc&lt;br /&gt;
&lt;br /&gt;
:              Aproc  will  be  called  when  the requested URL is&lt;br /&gt;
:              exactly /foo/bar. Bproc will  be  called  when  the&lt;br /&gt;
:              requested  URL is below /foo/bar, provided there is&lt;br /&gt;
:              not already  another  procedure  registered  to  be&lt;br /&gt;
:              called  for  that  exact  URL  or for an URL with a&lt;br /&gt;
:              closer match. Cproc (not Bproc) will be called when&lt;br /&gt;
:              the   requested   URL   is   equal   to   or  below&lt;br /&gt;
:              /foo/bar/hmm.  Syntax for the registered  procedure&lt;br /&gt;
:              The conn (connection) argument is optional for procedures &lt;br /&gt;
:              registered by ns_register_proc if the  procedure  has  &lt;br /&gt;
:              0 or 1 arguments (not including conn).&lt;br /&gt;
:              The following examples show the variations that can&lt;br /&gt;
:              be used in this case:&lt;br /&gt;
&lt;br /&gt;
                     ns_register_proc GET /noargs noargs&lt;br /&gt;
                     ns_register_proc GET /context context fnord&lt;br /&gt;
                     ns_register_proc GET /conncontext conncontext greeblev&lt;br /&gt;
 &lt;br /&gt;
                     proc noargs { } {&lt;br /&gt;
                         ns_returnnotice 200 &amp;quot;noargs&amp;quot;&lt;br /&gt;
                     } ;# noargs&lt;br /&gt;
 &lt;br /&gt;
                     proc context { context } {&lt;br /&gt;
                         ns_returnnotice 200 &amp;quot;context is $context&amp;quot;&lt;br /&gt;
                     } ;# context&lt;br /&gt;
 &lt;br /&gt;
                     proc conncontext { conn context } {&lt;br /&gt;
                         ns_returnnotice 200 &amp;quot;conncontext is $context&amp;quot;&lt;br /&gt;
                     } ;# conncontext&lt;br /&gt;
&lt;br /&gt;
:              The conn (connection) argument is required for procedures &lt;br /&gt;
:              registered by '''ns_register_proc''' if the  procedure  &lt;br /&gt;
:              has  2  or  more  arguments  (not including&lt;br /&gt;
:              conn). The conn argument will be  filled  automatically  &lt;br /&gt;
:              with  the  connection information. The first&lt;br /&gt;
:              argument following conn will always take the  value&lt;br /&gt;
:              supplied  by  '''ns_register_proc''', if there is one, or&lt;br /&gt;
:              an empty value. All other arguments must  supply  a&lt;br /&gt;
:              default  value.  The  following  examples  show the&lt;br /&gt;
:              variations that can be used in this case:&lt;br /&gt;
&lt;br /&gt;
                     ns_register_proc GET /twoargs twoargs fnord&lt;br /&gt;
                     ns_register_proc GET /threeargs threeargs fnord fjord&lt;br /&gt;
 &lt;br /&gt;
                     ns_register_proc -noinherit GET /foo/bar Aproc&lt;br /&gt;
                     ns_register_proc GET /foo/bar Bproc&lt;br /&gt;
                     ns_register_proc GET /foo/bar/hmm Cproc&lt;br /&gt;
&lt;br /&gt;
:              Aproc  will  be  called  when  the requested URL is&lt;br /&gt;
:              exactly /foo/bar. Bproc will  be  called  when  the&lt;br /&gt;
:              requested  URL is below /foo/bar, provided there is&lt;br /&gt;
:              not already  another  procedure  registered  to  be&lt;br /&gt;
:              called  for  that  exact  URL  or for an URL with a&lt;br /&gt;
:              closer match. Cproc (not Bproc) will be called when&lt;br /&gt;
:              the   requested   URL   is   equal   to   or  below&lt;br /&gt;
:              /foo/bar/hmm.  Syntax for the registered  procedure&lt;br /&gt;
:              The conn (connection) argument is optional for procedures &lt;br /&gt;
:              registered by '''ns_register_proc''' if the  procedure  &lt;br /&gt;
:              has  0 or 1 arguments (not including conn).&lt;br /&gt;
:              The following examples show the variations that can&lt;br /&gt;
:              be used in this case:&lt;br /&gt;
&lt;br /&gt;
                     ns_register_proc GET /noargs noargs&lt;br /&gt;
                     ns_register_proc GET /context context fnord&lt;br /&gt;
                     ns_register_proc GET /conncontext conncontext greeble&lt;br /&gt;
  &lt;br /&gt;
                     proc noargs { } {&lt;br /&gt;
                         ns_returnnotice 200 &amp;quot;noargs&amp;quot;&lt;br /&gt;
                     } ;# noargs&lt;br /&gt;
 &lt;br /&gt;
                     proc context { context } {&lt;br /&gt;
                         ns_returnnotice 200 &amp;quot;context is $context&amp;quot;&lt;br /&gt;
                     } ;# context&lt;br /&gt;
 &lt;br /&gt;
                     proc conncontext { conn context } {&lt;br /&gt;
                         ns_returnnotice 200 &amp;quot;conncontext is $context&amp;quot;&lt;br /&gt;
                     } ;# conncontext&lt;br /&gt;
&lt;br /&gt;
:              The conn (connection) argument is required for procedures &lt;br /&gt;
:              registered by ns_register_proc if the  procedure  has  2  &lt;br /&gt;
:              or  more  arguments  (not including&lt;br /&gt;
:              conn). The conn argument will be  filled  automatically  &lt;br /&gt;
:              with  the  connection information. The first&lt;br /&gt;
:              argument following conn will always take the  value&lt;br /&gt;
:              supplied  by  ns_register_proc, if there is one, or&lt;br /&gt;
:              an empty value. All other arguments must  supply  a&lt;br /&gt;
:              default  value.  The  following  examples  show the&lt;br /&gt;
:              variations that can be used in this case:&lt;br /&gt;
&lt;br /&gt;
                     ns_register_proc GET /twoargs twoargs fnord&lt;br /&gt;
                     ns_register_proc GET /threeargs threeargs fnord fjord&lt;br /&gt;
 &lt;br /&gt;
                     proc twoargs { conn context { greeble bork } } {&lt;br /&gt;
                         # Do stuff...&lt;br /&gt;
                     }&lt;br /&gt;
 &lt;br /&gt;
                     proc threeargs { conn context {greeble bork } { hoover quark } {&lt;br /&gt;
                         # Do stuff...&lt;br /&gt;
                     }&lt;br /&gt;
&lt;br /&gt;
:              When a GET of /twoargs is requested, the conn argument  &lt;br /&gt;
:              will  be  filled  automatically,  the context&lt;br /&gt;
:              argument will be assigned &amp;quot;fnord&amp;quot; and  the  greeble&lt;br /&gt;
:              argument will be assigned the default value &amp;quot;bork&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:              When a GET of /threeargs  is  requested,  the  conn&lt;br /&gt;
:              argument  will be filled automatically, the context&lt;br /&gt;
:              argument will be assigned &amp;quot;fnord&amp;quot; and  the  greeble&lt;br /&gt;
:              argument  will  be assigned &amp;quot;fjord&amp;quot;, and the hoover&lt;br /&gt;
:              argument  will  be  assigned  the   default   value&lt;br /&gt;
:              &amp;quot;quark&amp;quot;.&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=AOLserver_Wiki&amp;diff=2891</id>
		<title>AOLserver Wiki</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=AOLserver_Wiki&amp;diff=2891"/>
		<updated>2005-07-02T22:14:54Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''[http://www.aolserver.com AOLserver] is a high performance web server with a powerful customization API.  The AOLserver Wiki is a comprehensive resource for all things AOLserver.'''&lt;br /&gt;
&lt;br /&gt;
If you're new to [[wiki]]'s, then [[Welcome, New Visitors]]!  Before you start editing, you may want to read over the [[Formatting Rules]].  To find pages grouped by category, start with [[Category Category]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Topics of Conversation:''' &lt;br /&gt;
* [[What is AOLserver]]?&lt;br /&gt;
* What [[Web Applications for AOLserver]] would you like to see? &lt;br /&gt;
* What [[AOLserver Bugs and Problems]] are you experiencing? &lt;br /&gt;
* What features does AOLserver need? Add them to the [[AOLserver Wishlist]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''AOLserver Resources:'''&lt;br /&gt;
* [[Downloads]] -- Access to various AOLserver files and resources.&lt;br /&gt;
* [[Modules]] -- Complete list of '''over 70''' AOLserver extension modules and other [[AOLserver Contributed Software]].&lt;br /&gt;
* [[Toolkits]] -- Everything you need to build a complete website, fast.&lt;br /&gt;
* [[Languages]] -- Build websites in a varierty of different programming languages.&lt;br /&gt;
* [[Documentation]] -- Tcl and C API references, tutorials and guides.&lt;br /&gt;
* [[FAQ]] -- Frequently Asked Questions about AOLserver.&lt;br /&gt;
* [[AOLserver Improvement Proposals]]&lt;br /&gt;
* The [[AOLserver Cookbook]] -- A collection of questions, and code examples to answer them.&lt;br /&gt;
* [[AOLserver Packages]] -- Binary distributions of AOLserver in popular package management formats.&lt;br /&gt;
* [[Useful Links]]&lt;br /&gt;
* [http://panoptic.com/wiki/static/aolserver-rss.xml RSS 2.0 syndication] of this wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Developers' Guide (A Work In Progress)'''&lt;br /&gt;
* [[AOLserver Developer's Guide]] -- A growing, community generated guide on how to develop, deploy and maintain applications using AOLserver including discussions of internals, troubleshooting, debugging, testing and tuning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''AOLserver Community:'''&lt;br /&gt;
* The AOLserver project [[Roadmap]], as well as the planned [[Features]] and changes.&lt;br /&gt;
* The [[People]] who work on and contribute to AOLserver, organized into [[Project Teams]].&lt;br /&gt;
* Come join us in our [http://www.aolserver.com/chat/ online chat], or just read the [http://panoptic.com/aolserver/chat/ chat logs].  You can participate on the chat either via IRC (irc.freenode.net:6667 #aolserver) or via AIM.&lt;br /&gt;
* There's also an [http://www.livejournal.com/community/aolserver/ AOLserver LiveJournal community].&lt;br /&gt;
* [[Sites That Run On AOLserver]]&lt;br /&gt;
* The [[OpenACS]] Project.&lt;br /&gt;
* [[AOLserver User Groups]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''AOLserver Core Developers:'''&lt;br /&gt;
* [[Vision Statement]]&lt;br /&gt;
* [[CVS Commit Guidelines]]&lt;br /&gt;
* [http://www.aolserver.com/docs/devel/tech/standards.html AOLserver Engineering Standards Manual]&lt;br /&gt;
&lt;br /&gt;
--Spam Removed-- WJW&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Roadmap&amp;diff=2890</id>
		<title>Roadmap</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Roadmap&amp;diff=2890"/>
		<updated>2005-06-26T02:28:43Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 262&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AOLserver 2005 Roadmap'''&lt;br /&gt;
&lt;br /&gt;
[[Jim Davidson]] has offered the following summary [http://listserv.aol.com/cgi-bin/wa?A2=ind0506&amp;amp;L=aolserver&amp;amp;P=6872] based on the ChangeLog that describes the changes going into AOLserver 4.5:&lt;br /&gt;
&lt;br /&gt;
We should put a page on aolserver.com with some details.  We've moved&lt;br /&gt;
the version to 4.5 from 4.1 to reflect the scope of changes.&lt;br /&gt;
Scanning the ChangeLog and from what I can recall:&lt;br /&gt;
* New connection management features including the ns_limits and&lt;br /&gt;
ns_pools commands:&lt;br /&gt;
&lt;br /&gt;
-- ns_limits: control # of threads executing and/or waiting for&lt;br /&gt;
execution by method/URL&lt;br /&gt;
&lt;br /&gt;
-- ns_pools: map method/URL's to specific thread pools&lt;br /&gt;
&lt;br /&gt;
The idea is to use the two together, e.g., map slow-running db&lt;br /&gt;
requests to specific pools and set limits to avoid overload. The&lt;br /&gt;
result would be to trap cases where impatient folks press reload when&lt;br /&gt;
things are slow, generating quick &amp;quot;try later&amp;quot; responses instead of&lt;br /&gt;
gumming up the server.&lt;br /&gt;
* I/O features including:&lt;br /&gt;
&lt;br /&gt;
-- A new &amp;quot;Ns_QueueWait&amp;quot; API to enable event-driven callbacks in the&lt;br /&gt;
driver thread before dispatching to pools for processing.  The model&lt;br /&gt;
is to augment data received from the client (headers, request,&lt;br /&gt;
content) with additional data fetched over the network (likely stored&lt;br /&gt;
in the new Ns_Cls &amp;quot;connection local storage&amp;quot; API's) before&lt;br /&gt;
dispatching to the connection threads. An example would be to add&lt;br /&gt;
certain personalization data received via a web service. The&lt;br /&gt;
rationale here is that I/O events are cheap so do those upfront&lt;br /&gt;
instead of having expensive connection threads burdened with wasteful&lt;br /&gt;
blocking I/O.  This is a somewhat obscure and technical interface.&lt;br /&gt;
&lt;br /&gt;
-- Ability to manage larger file uploads by spooling to a temp file.&lt;br /&gt;
This keeps many of the useful functions folks utilize from working&lt;br /&gt;
for these large files, in particular auto-parsing of input available&lt;br /&gt;
via ns_conn form, but is available for custom apps willing to deal&lt;br /&gt;
with the complexity.&lt;br /&gt;
* ADP improvements including:&lt;br /&gt;
&lt;br /&gt;
-- A new execution caching technique at the ns_adp_include level&lt;br /&gt;
which allows you to save the results of execution of an included ADP&lt;br /&gt;
(and includes below that) for reuse on subsequent connections up to a&lt;br /&gt;
specified time.  Embedded ns_adp_include's with the -nocache flag at&lt;br /&gt;
lower levels allow you to still execute dynamic code within cached&lt;br /&gt;
blocks if necessary.  The goal is to improve performance of pages&lt;br /&gt;
which are nearly dynamic, i.e., pages where underlying data really&lt;br /&gt;
isn't personalized but instead may change every few minutes or so.&lt;br /&gt;
We prototyped this technique at AOL for an app which had these&lt;br /&gt;
characteristics and drove transaction throughput from less than 50/&lt;br /&gt;
second to well over 400 while still maintaining certain personalized&lt;br /&gt;
features of the page.&lt;br /&gt;
&lt;br /&gt;
-- New &amp;quot;singlescript&amp;quot; config option which turns ADP pages into a&lt;br /&gt;
single script enabling syntax such as &amp;quot;&amp;lt;% foreach e $list { %&amp;gt;&lt;br /&gt;
element &amp;lt;%= $e %&amp;gt; here &amp;lt;% } %&amp;gt;&amp;quot; and treating an error anywhere on the&lt;br /&gt;
pages as an error for the full page.  Evidently this is more similar&lt;br /&gt;
to other execution environments such as JSP.  It's a matter of&lt;br /&gt;
opinion whether this is a better or worse approach to ADP execution -&lt;br /&gt;
the default is off.&lt;br /&gt;
* Output buffer improvements via new Ns_ConnFlush:&lt;br /&gt;
&lt;br /&gt;
-- Automatic UTF-8 to output charset encoding&lt;br /&gt;
&lt;br /&gt;
-- Gzip compression&lt;br /&gt;
&lt;br /&gt;
-- Streaming output in chunked-encoding format instead of the&lt;br /&gt;
previous &amp;quot;response with no length&amp;quot; HTTP/1.0 method.&lt;br /&gt;
&lt;br /&gt;
Much of the code for Ns_ConnFlush was previously private to ADP.  ADP&lt;br /&gt;
has been modified to use Ns_ConnFlush and will also automatically&lt;br /&gt;
switch into streaming mode when output buffer limits are exceeded&lt;br /&gt;
(the previous behavior is to simply keep buffering without limit).&lt;br /&gt;
Ns_ConnFlush could be useful to simplify and standardize output from&lt;br /&gt;
other execution environments as well, e.g., PHP and Java servlets.&lt;br /&gt;
* Tcl improvements including:&lt;br /&gt;
&lt;br /&gt;
-- Cleaned up and well commented core code so folks can understand&lt;br /&gt;
the arcane config/resource management approach of Tcl within AOLserver.&lt;br /&gt;
&lt;br /&gt;
-- A new Ns_TclRegisterTrace API to enable callbacks at key state&lt;br /&gt;
transition points in a much more natural way.  The ns_ictl command&lt;br /&gt;
has been updated to support script-level traces.&lt;br /&gt;
* A new Ns_Task API designed to replace the old Ns_SockCallback API&lt;br /&gt;
which didn't do a very good job at managing timeouts along with I/O&lt;br /&gt;
events.  The ns_http command has been modified to use Ns_Task (the&lt;br /&gt;
old Ns_SockCallback-based ns_http is also still available via&lt;br /&gt;
configuration for the paranoid).&lt;br /&gt;
* Numerous bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unfortunately, no comprehensive list is maintained of these changes&lt;br /&gt;
and the documentation is not yet up to date.  Actually, the&lt;br /&gt;
documentation hasn't been up to date since version 2.3 which is a&lt;br /&gt;
great disappointment for me.  However, the ChangeLog has been&lt;br /&gt;
maintained quite well so it's possible to get an overview of the&lt;br /&gt;
various bug fixes and other minor updates from there.&lt;br /&gt;
&lt;br /&gt;
Dossy and Zoran may recall other new features as they've been active&lt;br /&gt;
on the release as well.  Overall, I believe we're done with 4.5 and&lt;br /&gt;
should tag it, complete the documentation, produce some quality&lt;br /&gt;
release notes, and move on to 5.0.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''AOLserver project 2004 Roadmap'''&lt;br /&gt;
 &lt;br /&gt;
This document will serve as the roadmap for the AOLserver project and Open Source community for 2004.&lt;br /&gt;
 &lt;br /&gt;
N.B.:  There is no designation whether any of the tasks necessary to complete items on the roadmap must be performed by an AOL employee or someone from the larger AOLserver community.  Ideally, tasks will be completed by whoever is enthusiastic about the work, has the necessary time to commit to completing it as well as the capability.  There is no explicit limit to the amount of contribution that can come from any participant in the project.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Goals and milestones for Q3 2004'''&lt;br /&gt;
&lt;br /&gt;
'''1)  Feature roadmap for AOLserver through 2004 and into 2005'''&lt;br /&gt;
&lt;br /&gt;
In order to enable the Open Source community to better participate, it is important that we have a clear list of [[Features]] that should be worked on.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
 &lt;br /&gt;
'''Goals and milestones for Q2 2004'''&lt;br /&gt;
 &lt;br /&gt;
'''1)  www.aolserver.com website revamp'''&lt;br /&gt;
&lt;br /&gt;
The project website deserves a more modern look and feel while maintaining the crisp, clean design aspects of the site.  The site needs to clearly represent the most current releases and recent changes.&lt;br /&gt;
&lt;br /&gt;
Specific information that should be easily accessible on the website initially:&lt;br /&gt;
* what it is&lt;br /&gt;
* how it's different&lt;br /&gt;
* where is useful, where it's not&lt;br /&gt;
* how to get started - basic guide, notes for apache users&lt;br /&gt;
* latest source and binary bundles&lt;br /&gt;
* basic intro docs and extensive, complete, accurate manpages&lt;br /&gt;
&lt;br /&gt;
''Update on 6/25: aolserver.org and aolserver.net should both point to aolserver.com by the week of 6/28.''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''2)  Freshen up documentation'''&lt;br /&gt;
&lt;br /&gt;
Currently available documentation for AOLserver mixes information for 2.3, 3.x and 4.x.  All of the documentation needs to be evaluated for correctness and updated where appropriate.  Documentation should be made available in at least three formats: plain text, HTML and PDF.  All documentation should be readily available from the project website.  &lt;br /&gt;
&lt;br /&gt;
The goal is to have a list of all documentation, both what exists and what we still need, by 5/26.  From there, the plan is to spend the next 4 weeks verifying or updating documentation.  Targeting 6/25 to have documentation for AOLserver 4.0 complete.&lt;br /&gt;
&lt;br /&gt;
''Update on 6/25:  [[Tcl API]] effort: 142 out of 228 commands or 62% complete.  Work on the [[Tutorials]] and HOWTO sections have also begun.  See the [[Documentation]] page for more.''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''3)  SourceForge bug and support trackers'''&lt;br /&gt;
&lt;br /&gt;
There are currently 56 open bugs, 3 open support requests, 29 open patches and 8 open feature requests in SourceForge.  Attention to these trackers is minimal at best which sends the wrong message about the project's commitment to supporting itself.  &lt;br /&gt;
&lt;br /&gt;
The current goal is to ensure that opened requests get assigned to someone within 24-48 hours and resolved in a reasonable timeframe.  Resolutions for common problems should be properly documented and published appropriately.&lt;br /&gt;
&lt;br /&gt;
''Update on 6/25:  78 open bugs, 4 open support tickets, 37 open patches, 14 open feature requests.''&lt;br /&gt;
&lt;br /&gt;
''Update on 7/2:  Bugs: 78 &amp;gt; 39 (-39 / -50%).  Support Requests: 4 &amp;gt; 2 (-2 / -50%).  Patches: 39 &amp;gt; 37 (-2 / -5%).  RFEs: 14 &amp;gt; 16 (+2 / +13%).  Current open bug breakdown by year: 2001 (7), 2002 (4), 2003 (20), 2004 (8).''&lt;br /&gt;
&lt;br /&gt;
''Update on 7/9:  Bugs: 39 &amp;gt; 66 (+27 / +41%).  Support Requests: 2 &amp;gt; 3 (+1 / 33%).  RFEs: 16 &amp;gt; 56 (+40 / +71%).  Current open bug breakdown: 2001 (8), 2002 (7), 2003 (24), 2004 (10).  The &amp;quot;Patches&amp;quot; tracker at SourceForge has been retired.''&lt;br /&gt;
&lt;br /&gt;
''Update on 7/16:  Bugs: 66 &amp;gt; 44 (-22 / -33%).  Support Requests: 2 &amp;gt; 2 (0 / NC).  RFEs: 56 &amp;gt; 40 (-16 / -28%).  Current open bug breakdown: 2001 (8), 2002 (5), 2003 (20), 2004 (11).''&lt;br /&gt;
&lt;br /&gt;
''Update on 7/23:  Bugs: 44 &amp;gt; 47 (+3 / 6%).  Support Requests: 2 &amp;gt; 2 (0 / NC).  RFEs: 40 &amp;gt; 41 (+1 / 2%).  Current open bug breakdown: 2001 (8), 2002 (5), 2003 (19), 2004 (15).''&lt;br /&gt;
&lt;br /&gt;
''Update on 9/1:  Bugs: 41.  Support Requests: 0.  Feature Requests: 49.  Current open bug breakdown: 2001 (7), 2002 (4), 2003 (13), 2004 (17).''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''4)  Better release management of AOLserver'''&lt;br /&gt;
&lt;br /&gt;
While maintaining a ChangeLog and tagging code periodically may be suitable for the developer community, the larger user audience of AOLserver has a varying degree of technical background.  Releases need to be managed such that a clear communication accessible to a non-technical background should be able to understand the value contained in the latest code release providing clear and compelling reasons to keep their installations up to date.  This same information should also be be published on the project website as well as distributed to the AOLSERVER-ANNOUNCE mailing list.&lt;br /&gt;
&lt;br /&gt;
We need to ensure that changes since the previous release will be collated and prepared along with the actual code release, then published on the wiki and the aolserver.com website.  Official releases will be published in source and binary form (when applicable) on the project website via the Project Files section in SourceForge.  An update to the AOLserver project record on Freshmeat.net should also be done.&lt;br /&gt;
&lt;br /&gt;
''Update on 7/16:  With the bug that slipped into the 4.0.6 release, it's obvious that even a simple automated test suite would prove useful.  With that, it's time to start documenting: [[How are releases tested]].''&lt;br /&gt;
&lt;br /&gt;
Release announcements:&lt;br /&gt;
* 07 Sep 2004: [http://listserv.aol.com/cgi-bin/wa?A2=ind0409&amp;amp;L=aolserver-announce&amp;amp;P=66 AOLserver 4.0.8]&lt;br /&gt;
* 19 Jul 2004: [http://listserv.aol.com/cgi-bin/wa?A2=ind0407&amp;amp;L=aolserver-announce&amp;amp;P=163 AOLserver 4.0.7]&lt;br /&gt;
* 16 Jul 2004: [http://listserv.aol.com/cgi-bin/wa?A2=ind0407&amp;amp;L=aolserver-announce&amp;amp;P=61 AOLserver 4.0.6]&lt;br /&gt;
* 07 Jun 2004: [http://listserv.aol.com/cgi-bin/wa?A2=ind0406&amp;amp;L=aolserver&amp;amp;P=4884 AOLserver 4.0.5]&lt;br /&gt;
* 26 Mar 2004: AOLserver 4.0.3&lt;br /&gt;
* 23 Nov 2003: AOLserver 4.0.2&lt;br /&gt;
* 20 Nov 2003: AOLserver 4.0.1&lt;br /&gt;
* 03 Nov 2003: AOLserver 4.0.0&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''5)  Establish metrics for measuring success and publish reports on a regular basis'''&lt;br /&gt;
&lt;br /&gt;
There are several simple measurements that we can take that can be automated on a regular schedule (daily, weekly, monthly) and published on the project website.  The first metric will be:&lt;br /&gt;
&lt;br /&gt;
Commit frequency per username: number of files affected, lines of code affected.&lt;br /&gt;
&lt;br /&gt;
This serves the purpose of making clear to the community where activity is taking place within the project as well as which individuals are actively involved and participating.  Without this, it is unclear from a high level what kind of progress is being made on the project, if any at all, giving people a sense that the project is inactive when that may not actually be the case.  Having this metric measured regularly and published will either confirm or dispel this belief and allow us to better manage this issue.&lt;br /&gt;
&lt;br /&gt;
''Update on 7/9:  The first [http://article.gmane.org/gmane.comp.web.aolserver/10810 CVS commit stats for June 2004] were posted to the AOLserver mailing list.''&lt;br /&gt;
&lt;br /&gt;
''Update on 9/1:  CVS commit stats for [http://article.gmane.org/gmane.comp.web.aolserver/11299 July 2004] and [http://article.gmane.org/gmane.comp.web.aolserver/11300 August 2004] have been posted to the AOLserver mailing list.''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''6)  Regular and open communications to the world'''&lt;br /&gt;
&lt;br /&gt;
In order to raise awareness about AOLserver to both attract users and developers, we need regular and open communication with the world.  The messages need to be clear, concise and accessible to a wide audience.  They need to be sent out regularly to keep the attention of our audience as well as to show steady progress.    &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''7)  Tighter integration of Java into the core execution environment'''&lt;br /&gt;
&lt;br /&gt;
With tighter Java integration into AOLserver, we will be able to leverage more available talent as well as more third-party developed software under AOLserver.  There are several efforts to bring Java into AOLserver but the project could benefit from having these separate efforts aligned and deliver a single solution.&lt;br /&gt;
&lt;br /&gt;
Currently, the [[nsjk2]] module is under active development, especially at AOL, for supporting Java/Tomcat with AOLserver.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''8)  Win32 platform becomes a first-class citizen again'''&lt;br /&gt;
&lt;br /&gt;
While even the more recent releases of AOLserver can still be built on Win32, the commitment of official support for it was left to the community to resolve.  Consider this the resolution: the audience for AOLserver on Win32 should not be diminished without good reason.&lt;br /&gt;
&lt;br /&gt;
''Update on 7/22:  The availability of [http://article.gmane.org/gmane.comp.web.aolserver/10927 experimental Win32 binaries] of AOLserver 4.0.7 was sent to the mailing list.  Links to downloads are on the [[Downloads]] page.''&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=John_Havard&amp;diff=2889</id>
		<title>John Havard</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=John_Havard&amp;diff=2889"/>
		<updated>2005-06-16T17:27:59Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1317&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;mailto:jh@hxe.us&amp;gt;&lt;br /&gt;
&lt;br /&gt;
John Havard&lt;br /&gt;
&lt;br /&gt;
http://www.sevensages.org/&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
[[Category Home Page]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_sendmail&amp;diff=2888</id>
		<title>Ns sendmail</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_sendmail&amp;diff=2888"/>
		<updated>2005-06-14T16:15:26Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 652&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FGFG&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Hal_Heisler&amp;diff=2887</id>
		<title>Hal Heisler</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Hal_Heisler&amp;diff=2887"/>
		<updated>2005-06-11T16:25:18Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 34&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;hh # heisler o net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I am currently thinking about how to use metakit and tclkit [http://www.equi4.com] with AOLserver.&lt;br /&gt;
&lt;br /&gt;
One idea that I keep mulling over is this. Create a scripted document containing the following payload in the virtual file system.&lt;br /&gt;
* AOLServer binaries&lt;br /&gt;
* TK configuration scripts&lt;br /&gt;
* A TK text editor.&lt;br /&gt;
* Tkcon for aolserver.&lt;br /&gt;
* A private tcl VFS.&lt;br /&gt;
* A metakit module.&lt;br /&gt;
&lt;br /&gt;
Running the scripted document would provide a TK based install that would configure AOLserver.  That would only happen the first time because the scripted document is also a database and would be able to save configuration settings.  After configuration the scripted document would be used to launch, monitor, and develop on AOLserver. This would be done by attaching to one of AOLservers interpreters and manipulating the private tcl VFS.  &lt;br /&gt;
&lt;br /&gt;
The system might be used to simplify the development and packaging of AOLserver based products.&lt;br /&gt;
&lt;br /&gt;
The concept would be easier to implement if nsd was a shared library.  Instead of installing AOLserver, starting it and then attaching to it one could simply do a package require nsd.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Home Page]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_cache_names&amp;diff=2886</id>
		<title>Ns cache names</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_cache_names&amp;diff=2886"/>
		<updated>2005-06-09T08:45:55Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1287&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
jkjjhkhkhjjkh&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_cache_keys&amp;diff=2885</id>
		<title>Ns cache keys</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_cache_keys&amp;diff=2885"/>
		<updated>2005-06-08T10:54:05Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1286&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://panoptic.com/wiki/aolserver/1286&lt;br /&gt;
ns_cache_keys&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Nsgd&amp;diff=2884</id>
		<title>Nsgd</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Nsgd&amp;diff=2884"/>
		<updated>2005-06-06T13:21:14Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 217&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Updated by Richard Kotal[mailto:richard.kotal@dolphingames.com].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is AOLserver module (nsgd 2.0) that implements interface to gd library.&lt;br /&gt;
* support for aolserver 4.0.x (3.x)&lt;br /&gt;
* fix memory leak in tclGdWriteCmd function&lt;br /&gt;
* support for gif,wbmp,jpeg,gd,png formats&lt;br /&gt;
* fix mime-type bug in tclGdReturnCmd function&lt;br /&gt;
* support for true-color&lt;br /&gt;
* fix problem with gdImageFill function from gd&lt;br /&gt;
&lt;br /&gt;
Download: http://www.aolserver.cz/download.php&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_mktemp&amp;diff=2883</id>
		<title>Ns mktemp</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_mktemp&amp;diff=2883"/>
		<updated>2005-05-24T15:50:27Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 601&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Man page: http://aolserver.com/docs/tcl/ns_mktemp.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''NAME'''&lt;br /&gt;
&lt;br /&gt;
: ns_mktemp - Make a unique temporary file name&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
: '''ns_mktemp''' ''template''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
: This command is a wrapper around the mktemp(3) function in the C standard library. It takes a template, which is a string whose last six characters must be XXXXXX, and returns a new string where those are replaced with random characters such as to make the string a unique file name. It is commonly used to safely create temporary files.&lt;br /&gt;
&lt;br /&gt;
: Note that some implementations of mktemp are not so safe - it creates predictable/only a small number of variations - please consult your system's man pages if this might be an issue to you. AOLserver could potentially be improved to use mkstemp instead.&lt;br /&gt;
&lt;br /&gt;
'''EXAMPLES'''&lt;br /&gt;
&lt;br /&gt;
    % ns_mktemp /tmp/aol-XXXXXX&lt;br /&gt;
    /tmp/aol-rhaGGx&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_returnmoved&amp;diff=2882</id>
		<title>Ns returnmoved</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_returnmoved&amp;diff=2882"/>
		<updated>2005-05-23T15:53:04Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1419&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NAME'''&lt;br /&gt;
&lt;br /&gt;
: ns_returnmoved - Returns HTTP 301 Permanently Moved&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
: '''ns_returnmoved''' ''url''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
: This command redirects the client by returning a 301 (Permanently Moved) HTTP status code, and a Location header pointing at ''url''.&lt;br /&gt;
&lt;br /&gt;
: '''NOTE:''' The script does not end at the time this command is invoked.  [[ns_adp_abort]] or [[ns_adp_return]] should be called to end script processing after '''ns_returnmoved'''.&lt;br /&gt;
&lt;br /&gt;
'''CODE'''&lt;br /&gt;
&lt;br /&gt;
: '''NOTE:''' This command is not yet part of the standard core Tcl API for AOLserver.&lt;br /&gt;
&lt;br /&gt;
  proc ns_returnmoved {url} {&lt;br /&gt;
      ns_set update [[ns_conn outputheaders]] Location $url&lt;br /&gt;
      ns_return 301 &amp;quot;text/html&amp;quot; [[subst \&lt;br /&gt;
  {&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//IETF//DTD HTML 2.0//EN&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;HTML&amp;gt;&lt;br /&gt;
  &amp;lt;HEAD&amp;gt;&lt;br /&gt;
  &amp;lt;TITLE&amp;gt;Moved&amp;lt;/TITLE&amp;gt;&lt;br /&gt;
  &amp;lt;/HEAD&amp;gt;&lt;br /&gt;
  &amp;lt;BODY&amp;gt;&lt;br /&gt;
  &amp;lt;H2&amp;gt;Moved&amp;lt;/H2&amp;gt;&lt;br /&gt;
  &amp;lt;A HREF=&amp;quot;$url&amp;quot;&amp;gt;The requested URL has moved here.&amp;lt;/A&amp;gt;&lt;br /&gt;
  &amp;lt;P ALIGN=RIGHT&amp;gt;&amp;lt;SMALL&amp;gt;&amp;lt;I&amp;gt;[ns_info name]]/[[ns_info patchlevel]] on [[ns_conn location]]&amp;lt;/I&amp;gt;&amp;lt;/SMALL&amp;gt;&amp;lt;/P&amp;gt;&lt;br /&gt;
  &amp;lt;/BODY&amp;gt;&amp;lt;/HTML&amp;gt;}]&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''EXAMPLES'''&lt;br /&gt;
&lt;br /&gt;
    ns_returnmoved http://www.aolserver.com/&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_return]], [[ns_returnadminnotice]], [[ns_returnbadrequest]], [[ns_returnerror]], [[ns_returnfile]], [[ns_returnforbidden]], [[ns_returnfp]], [[ns_returnnotfound]], [[ns_returnnotice]], [[ns_returnok]], [[ns_returnredirect]], [[ns_returnunauthorized]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_cookietime&amp;diff=2881</id>
		<title>Ns cookietime</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_cookietime&amp;diff=2881"/>
		<updated>2005-05-23T15:41:28Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1418&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NAME'''&lt;br /&gt;
&lt;br /&gt;
: ns_cookietime - Convert seconds to Netscape's cookie date format&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
: '''ns_cookietime''' ''time''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
: This command converts the time, specified as the number of seconds from 00:00:00 UTC Jan 1, 1970, to a string in Netscape's old cookie &amp;quot;Expires&amp;quot; date format (see [http://www.w3.org/Protocols/rfc2109/rfc2109.txt RFC 2109 Sec 10.1.2]).&lt;br /&gt;
&lt;br /&gt;
'''CODE'''&lt;br /&gt;
&lt;br /&gt;
: '''NOTE:''' This command is not yet part of the standard core Tcl API for AOLserver.&lt;br /&gt;
&lt;br /&gt;
  proc ns_cookietime {time} {&lt;br /&gt;
      regsub {, (\d+) (\S+) (\d+)} [[ns_httptime $time]] {, \1-\2-\3} string&lt;br /&gt;
      return $string&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
'''EXAMPLES'''&lt;br /&gt;
&lt;br /&gt;
    % ns_cookietime 0&lt;br /&gt;
    Thu, 01-Jan-1970 00:00:00 GMT&lt;br /&gt;
&lt;br /&gt;
    % ns_cookietime 8675309&lt;br /&gt;
    Sat, 11-Apr-1970 09:48:29 GMT&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_fmttime]], [[ns_gmtime]], [[ns_httptime]], [[ns_localtime]], [[ns_parsehttptime]], [[ns_parsetime]], [[ns_time]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_returnredirect&amp;diff=2880</id>
		<title>Ns returnredirect</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_returnredirect&amp;diff=2880"/>
		<updated>2005-05-23T14:49:37Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 644&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Man page: http://aolserver.com/docs/tcl/ns_returnredirect.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''NAME'''&lt;br /&gt;
&lt;br /&gt;
: ns_returnredirect - Redirect the client to another location&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
: '''ns_returnredirect''' ''?connid? url''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
: This command redirects the client by returning a 302 (Redirection) HTTP status code, and a Location header pointing at ''url''.&lt;br /&gt;
&lt;br /&gt;
: The optional ''connid'' parameter is deprecated and should not be used.  If ''url'' is not specified, a 204 (No Content) HTTP status code is returned.&lt;br /&gt;
&lt;br /&gt;
: '''NOTE:''' The script does not end at the time this command is invoked.  [[ns_adp_abort]] or [[ns_adp_return]] should be called to end script processing after '''ns_returnredirect'''.&lt;br /&gt;
&lt;br /&gt;
: 2005may23 [[Dossy]]: ''After many inquiries about being able to return a 301 instead of 302, I suggest introducing a new [[ns_returnmoved]] which implements the 301.''&lt;br /&gt;
&lt;br /&gt;
'''EXAMPLES'''&lt;br /&gt;
&lt;br /&gt;
    ns_returnredirect http://www.aolserver.com/&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_return]], [[ns_returnadminnotice]], [[ns_returnbadrequest]], [[ns_returnerror]], [[ns_returnfile]], [[ns_returnforbidden]], [[ns_returnfp]], [[ns_returnnotfound]], [[ns_returnnotice]], [[ns_returnok]], [[ns_returnunauthorized]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_httptime&amp;diff=2879</id>
		<title>Ns httptime</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_httptime&amp;diff=2879"/>
		<updated>2005-05-18T14:49:33Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 581&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Man page: http://aolserver.com/docs/tcl/ns_httptime.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''NAME'''&lt;br /&gt;
&lt;br /&gt;
: ns_httptime - Convert seconds to HTTP date format&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
: '''ns_httptime''' ''time''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
: This command converts the time, specified as the number of seconds from 00:00:00 UTC Jan 1, 1970, to a string in HTTP date format (see [http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3 RFC 2616 Sec 3.3]).&lt;br /&gt;
&lt;br /&gt;
'''EXAMPLES'''&lt;br /&gt;
&lt;br /&gt;
    % ns_httptime 0&lt;br /&gt;
    Thu, 01 Jan 1970 00:00:00 GMT&lt;br /&gt;
&lt;br /&gt;
    % ns_httptime 8675309                               &lt;br /&gt;
    Sat, 11 Apr 1970 09:48:29 GMT&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_cookietime]], [[ns_fmttime]], [[ns_gmtime]], [[ns_localtime]], [[ns_parsehttptime]], [[ns_parsetime]], [[ns_time]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_http&amp;diff=2878</id>
		<title>Ns http</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_http&amp;diff=2878"/>
		<updated>2005-05-12T19:07:45Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 577&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Man page: http://aolserver.com/docs/tcl/ns_http.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''NAME'''&lt;br /&gt;
&lt;br /&gt;
: ns_http - Simple HTTP client functionality&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
: '''ns_http''' ''option ?arg arg ...?''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
: This command provides a simple HTTP client mechanism.&lt;br /&gt;
&lt;br /&gt;
: The legal ''option''s (which may be abbreviated) are:&lt;br /&gt;
* '''ns_http cancel''' ''id''&lt;br /&gt;
* '''ns_http cleanup'''&lt;br /&gt;
* '''ns_http queue''' ''method url ?body? ?headers?''&lt;br /&gt;
&lt;br /&gt;
: ''body'' is the value which will be sent as the HTTP request body.  ''headers'' is the [[ns_set]] ID containing the additional headers to include in the HTTP request.&lt;br /&gt;
* '''ns_http wait''' ''id resultsVar ?timeout? ?headers? ?-servicetime svcTime?''&lt;br /&gt;
&lt;br /&gt;
: ''resultsVar'' is the name of a variable that should be used to store the HTTP response body.  Default ''timeout'' is &amp;quot;2:0&amp;quot; (2s, 0usec).  ''headers'' is the [[ns_set]] ID which will receive the headers from the HTTP response.&lt;br /&gt;
&lt;br /&gt;
'''EXAMPLES'''&lt;br /&gt;
&lt;br /&gt;
Valid HTTP GET:&lt;br /&gt;
&lt;br /&gt;
  % set id [[ns_http queue GET http://aolserver.com/]]&lt;br /&gt;
  http0&lt;br /&gt;
  % set status [[ns_http wait $id results]]&lt;br /&gt;
  1&lt;br /&gt;
  % string range $results 0 60&lt;br /&gt;
  &amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&lt;br /&gt;
&lt;br /&gt;
Timed out HTTP GET:&lt;br /&gt;
&lt;br /&gt;
  % set id [[ns_http queue GET http://aolserver.com:12345/]]&lt;br /&gt;
  http0&lt;br /&gt;
  % set status [[ns_http wait $id results 0]]&lt;br /&gt;
  0&lt;br /&gt;
  % set results&lt;br /&gt;
  timeout&lt;br /&gt;
&lt;br /&gt;
Bogus HTTP GET:&lt;br /&gt;
&lt;br /&gt;
  % catch {ns_http queue GET http://nonexistant.domain/} err&lt;br /&gt;
  1&lt;br /&gt;
  % set err&lt;br /&gt;
  could not connect to : http://nonexistant.domain/&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_requestauthorize&amp;diff=2877</id>
		<title>Ns requestauthorize</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_requestauthorize&amp;diff=2877"/>
		<updated>2005-04-21T15:25:50Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 631&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Man page: http://aolserver.com/docs/tcl/ns_requestauthorize.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''NAME'''&lt;br /&gt;
&lt;br /&gt;
: ns_requestauthorize - perform authorization check&lt;br /&gt;
&lt;br /&gt;
'''SYNOPSIS'''&lt;br /&gt;
&lt;br /&gt;
: '''ns_requestauthorize''' ''method url authuser authpasswd ?ipaddr?''&lt;br /&gt;
&lt;br /&gt;
'''DESCRIPTION'''&lt;br /&gt;
&lt;br /&gt;
: Ask the server to check permissions using the authProc provided by the [[nsperm]] module.  This function does the same permission check that the AOLserver does before serving a URL if the [[nsperm]] module is loaded.&lt;br /&gt;
&lt;br /&gt;
: The algorithm is as follows:&lt;br /&gt;
&lt;br /&gt;
   1. If the authuser is &amp;quot;nsadmin&amp;quot;, the password is correct, and the IP address of the client is allowed nsadmin access, then access is authorized. &lt;br /&gt;
&lt;br /&gt;
   2. Find the relevant permission record. If an exact match for the method and URL combination is not found, the end of the URL is pared down until a match is found. For example, if there is no match for &amp;quot;/products/cereals/raisin_bran.html,&amp;quot; then the server looks for a permission record for the URL &amp;quot;/products/cereals.&amp;quot; If that permission record is specified as &amp;quot;Exact URL match is NOT required,&amp;quot; then that permission record is used.&lt;br /&gt;
&lt;br /&gt;
By default, the server comes with a row that says GET on &amp;quot;/&amp;quot; is open to the world. If no relevant permission record is found, access is denied (forbidden).&lt;br /&gt;
&lt;br /&gt;
   1. If the authuser is in the &amp;quot;Allow Users&amp;quot; list, access is permitted. If the authuser is a member of a group in the &amp;quot;Allow Groups&amp;quot; list and not in the &amp;quot;Deny Users&amp;quot; list, access is permitted. &lt;br /&gt;
&lt;br /&gt;
   2. If the host is in the &amp;quot;Hosts to allow&amp;quot; list, access is permitted. If the host is in the &amp;quot;Hosts to deny&amp;quot; list, access is denied.&lt;br /&gt;
&lt;br /&gt;
   3. If the request does not come in with authorization data, access is denied. &lt;br /&gt;
&lt;br /&gt;
   4. The user and password are verified. If there is no password specified in the database, any password is accepted. &lt;br /&gt;
&lt;br /&gt;
   5. Otherwise, access is denied. Return Values: The following values can be returned by ns_requestauthorize.&lt;br /&gt;
&lt;br /&gt;
: This command returns one of the following values:&lt;br /&gt;
* '''OK''' - The user has permission to execute this URL and method.&lt;br /&gt;
* '''ERROR''' - There was an error performing the check.&lt;br /&gt;
* '''FORBIDDEN''' - There is no possible user/password/IP address combination that would give authorization.&lt;br /&gt;
* '''UNAUTHORIZED''' - The user does not have permission to execute this URL and method.&lt;br /&gt;
&lt;br /&gt;
'''SEE ALSO'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_checkurl]], [[nsperm]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Tcl_API&amp;diff=2876</id>
		<title>Tcl API</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Tcl_API&amp;diff=2876"/>
		<updated>2005-04-21T15:17:26Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 162&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Links to all of the Tcl commands provided by the AOLserver core &amp;quot;out of the box&amp;quot;.  To view a complete list of these commands in alphabetical order, try the [http://panoptic.com/wiki/aolserver/887%21 Category Core Tcl API references] page.&lt;br /&gt;
&lt;br /&gt;
Like what you see here?  Want to try your hand at documenting a command, too?  Here's [[how to document the core Tcl API]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''ADP commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_adp_abort]], [[ns_adp_append]], [[ns_adp_argc]], [[ns_adp_argv]], [[ns_adp_bind_args]], [[ns_adp_break]], [[ns_adp_debug]], [[ns_adp_debuginit]], [[ns_adp_dir]], [[ns_adp_dump]], [[ns_adp_eval]], [[ns_adp_exception]], [[ns_adp_include]], [[ns_adp_mime]], [[ns_adp_mimetype]], [[ns_adp_parse]], [[ns_adp_puts]] ([[ns_puts]]), [[ns_adp_registeradp]], [[ns_adp_registerproc]], [[ns_adp_registertag]], [[ns_adp_return]], [[ns_adp_safeeval]], [[ns_adp_stats]], [[ns_adp_stream]], [[ns_adp_tell]], [[ns_adp_trunc]]&lt;br /&gt;
&lt;br /&gt;
: [[ns_browsermatch]]&lt;br /&gt;
&lt;br /&gt;
: [[ns_conn]], [[ns_conncptofp]], [[ns_connsendfp]]&lt;br /&gt;
&lt;br /&gt;
: [[ns_getform]], [[ns_getformfile]]&lt;br /&gt;
&lt;br /&gt;
: [[ns_queryexists]], [[ns_queryget]], [[ns_querygetall]]&lt;br /&gt;
&lt;br /&gt;
: [[ns_return]], [[ns_returnadminnotice]], [[ns_returnbadrequest]], [[ns_returnerror]], [[ns_returnfile]], [[ns_returnforbidden]], [[ns_returnfp]], [[ns_returnnotfound]], [[ns_returnnotice]], [[ns_returnok]], [[ns_returnredirect]], [[ns_returnunauthorized]], &lt;br /&gt;
&lt;br /&gt;
: [[ns_setexpires]], [[ns_setformencoding]]&lt;br /&gt;
&lt;br /&gt;
: [[ns_write]], [[ns_writecontent]], [[ns_writefp]]&lt;br /&gt;
&lt;br /&gt;
'''Cache commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_cache_flush]], [[ns_cache_keys]], [[ns_cache_names]], [[ns_cache_size]], [[ns_cache_stats]]&lt;br /&gt;
&lt;br /&gt;
'''Concurrent programming commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_cond]], [[ns_critsec]], [[ns_event]], [[ns_job]], [[ns_kill]], [[ns_mutex]], [[ns_sema]], [[ns_thread]]&lt;br /&gt;
&lt;br /&gt;
'''Custom data structures and variable manipulation commands:'''&lt;br /&gt;
* TclX keyed lists:&lt;br /&gt;
&lt;br /&gt;
: [[keyldel]], [[keylget]], [[keylkeys]], [[keylset]]&lt;br /&gt;
* [[Thread-shared variables]] (aka Network Shared Variables or NSVs):&lt;br /&gt;
&lt;br /&gt;
: [[nsv_get]], [[nsv_exists]], [[nsv_set]], [[nsv_incr]], [[nsv_append]], [[nsv_lappend]], [[nsv_array]], [[nsv_unset]], [[nsv_names]]&lt;br /&gt;
* Sets and multisets:&lt;br /&gt;
&lt;br /&gt;
: [[ns_findset]], [[ns_set]]&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
: [[ns_share]], [[ns_var]]&lt;br /&gt;
&lt;br /&gt;
'''Database commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_buildsqldate]], [[ns_buildsqltime]], [[ns_buildsqltimestamp]], [[ns_db]], [[ns_dbquotename]], [[ns_dbquotevalue]], [[ns_localsqltimestamp]], [[ns_parsesqldate]], [[ns_parsesqltime]], [[ns_parsesqltimestamp]], [[ns_writecsv]]&lt;br /&gt;
&lt;br /&gt;
'''DNS lookup commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_addrbyhost]], [[ns_hostbyaddr]]&lt;br /&gt;
&lt;br /&gt;
'''File manipulation commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_chmod]], [[ns_cp]], [[ns_ftruncate]], [[ns_link]], [[ns_mkdir]], [[ns_mktemp]], [[ns_normalizepath]], [[ns_openexcl]], [[ns_purgefiles]], [[ns_rename]], [[ns_rmdir]], [[ns_rollfile]], [[ns_symlink]], [[ns_tmpnam]], [[ns_truncate]], [[ns_unlink]]&lt;br /&gt;
&lt;br /&gt;
'''HTML manipulation commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_formvalueput]], [[ns_hrefs]], [[ns_htmlselect]], [[ns_quotehtml]], [[ns_striphtml]], [[ns_tagelement]], [[ns_tagelementset]]&lt;br /&gt;
&lt;br /&gt;
'''HTTP commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_http]], [[ns_httpget]], [[ns_httpopen]], [[ns_httppost]]&lt;br /&gt;
&lt;br /&gt;
'''Image manipulation commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_gifsize]], [[ns_jpegsize]]&lt;br /&gt;
&lt;br /&gt;
'''Internationalization (I18N) support commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_charsets]], [[ns_choosecharset]], [[ns_cookiecharset]], [[ns_encodingforcharset]], [[ns_encodingfortype]], [[ns_formfieldcharset]], [[ns_urlcharset]]&lt;br /&gt;
&lt;br /&gt;
'''Logging commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_accesslog]], [[ns_log]], [[ns_logctl]], [[ns_logroll]]&lt;br /&gt;
&lt;br /&gt;
'''Request authorization commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_checkurl]], [[ns_requestauthorize]]&lt;br /&gt;
&lt;br /&gt;
'''Scheduling commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_after]], [[ns_atclose]], [[ns_atexit]], [[ns_atshutdown]], [[ns_atsignal]], [[ns_cancel]], [[ns_pause]], [[ns_resume]], [[ns_schedule_proc]], [[ns_schedule_daily]], [[ns_schedule_weekly]], [[ns_shutdown]], [[ns_unschedule_proc]]&lt;br /&gt;
&lt;br /&gt;
'''Server configuration commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_config]], [[ns_configsection]], [[ns_configsections]], [[ns_library]], [[ns_limits]], [[ns_modulepath]], [[ns_param]], [[ns_pools]], [[ns_section]]&lt;br /&gt;
&lt;br /&gt;
'''Server introspection commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_env]], [[ns_info]], [[ns_server]], [[ns_stats]]&lt;br /&gt;
&lt;br /&gt;
'''Socket I/O commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_sock]], [[ns_sockaccept]], [[ns_sockblocking]], [[ns_sockcallback]], [[ns_sockcheck]], [[ns_sockclose]], [[ns_sockdup]], [[ns_sockerrno]], [[ns_socketpair]], [[ns_sockioctl]], [[ns_socklisten]], [[ns_socklistencallback]], [[ns_socknbclose]], [[ns_socknonblocking]], [[ns_socknread]], [[ns_sockopen]], [[ns_sockpair]], [[ns_sockreadwait]], [[ns_sockselect]], [[ns_socksend]], [[ns_sockstrerror]]&lt;br /&gt;
&lt;br /&gt;
'''Tcl channel management commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_chan]], [[ns_cleanupchans]], [[ns_getchannels]]&lt;br /&gt;
&lt;br /&gt;
'''Tcl interpreter management commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_cleanup]], [[ns_eval]], [[ns_ictl]], [[ns_init]], [[ns_markfordelete]], [[ns_reinit]]&lt;br /&gt;
&lt;br /&gt;
'''Time commands:'''&lt;br /&gt;
&lt;br /&gt;
: [[ns_fmttime]], [[ns_gmtime]], [[ns_httptime]], [[ns_localtime]], [[ns_parsehttptime]], [[ns_parsetime]], [[ns_time]]&lt;br /&gt;
   &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Uncategorized:'''&lt;br /&gt;
* [[ns_cpfp]]&lt;br /&gt;
* [[ns_crypt]]&lt;br /&gt;
* [[ns_geturl]]&lt;br /&gt;
* [[ns_guesstype]]&lt;br /&gt;
* [[ns_headers]]&lt;br /&gt;
* [[ns_isformcached]]&lt;br /&gt;
* [[ns_issmallint]]&lt;br /&gt;
* [[ns_paren]]&lt;br /&gt;
* [[ns_parseheader]]&lt;br /&gt;
* [[ns_parsequery]]&lt;br /&gt;
* [[ns_rand]]&lt;br /&gt;
* [[ns_register_adptag]]&lt;br /&gt;
* [[ns_register_adp]]&lt;br /&gt;
* [[ns_register_proc]]&lt;br /&gt;
* [[ns_register_filter]]&lt;br /&gt;
* [[ns_register_trace]]&lt;br /&gt;
* [[ns_resetcachedform]]&lt;br /&gt;
* [[ns_sendmail]]&lt;br /&gt;
* [[ns_sleep]]&lt;br /&gt;
* [[ns_sourceproc]]&lt;br /&gt;
* [[ns_startcontent]]&lt;br /&gt;
* [[ns_unregister_adp]]&lt;br /&gt;
* [[ns_unregister_proc]]&lt;br /&gt;
* [[ns_updateheader]]&lt;br /&gt;
* [[ns_url2file]]&lt;br /&gt;
* [[ns_urldecode]]&lt;br /&gt;
* [[ns_urlencode]]&lt;br /&gt;
* [[ns_uudecode]]&lt;br /&gt;
* [[ns_uuencode]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_checkurl&amp;diff=2875</id>
		<title>Ns checkurl</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Ns_checkurl&amp;diff=2875"/>
		<updated>2005-04-21T15:15:59Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 530&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See: [[ns_requestauthorize]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[Category Core Tcl API]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=AOLserver_3.x_to_4.x_Upgrade_Notes&amp;diff=2874</id>
		<title>AOLserver 3.x to 4.x Upgrade Notes</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=AOLserver_3.x_to_4.x_Upgrade_Notes&amp;diff=2874"/>
		<updated>2005-04-16T01:52:28Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1413&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Let this page serve as a collection of pitfalls and gotchas and other relevant information to anyone who is upgrading from AOLserver 3.x to AOLserver 4.x.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[nsdb]] - In AOLserver 3.x, nsdb was integrated into the nsd.  In AOLserver 4.0, it was extracted into its own loadable module which the nsd now loads.  So, if you want to use database drivers, you will now need to explicitly load '''nsdb''' in your server's '''ns/server/${servername}/modules''' section using &amp;quot;ns_param nsdb nsdb.so&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[ns_adp_eval]] - In AOLserver 3.x, this command took an optional ''-parser parser'' arg before the ''page'' arg, which was removed in AOLserver 4.x.  This will cause scripts which use [ns_adp_eval -parser fancy {... ADP ...}] to simply return the string &amp;quot;-parser&amp;quot; as it's interpreting that argument as the ''page'' argument, evaluating it and then returning it.  When migrating from AOLserver 3.x to 4.x, all uses of '''ns_adp_eval''' must be checked, and if ''-parser'' is specified, it must be removed.&lt;br /&gt;
&lt;br /&gt;
custom C modules - If you have your own custom C modules that you use with AOLserver, you should read the [http://aolserver.com/docs/devel/c/as4_moduleportingguide.html AOLserver 4.0 Module Porting Guide].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Nsssl&amp;diff=2873</id>
		<title>Nsssl</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Nsssl&amp;diff=2873"/>
		<updated>2005-04-14T07:52:13Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 183&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See: [http://cvs.sourceforge.net/viewcvs.py/*checkout*/aolserver/aolserver/nsssl/nsssl.html?rev=HEAD SF CVS: aolserver/nsssl/nsssl.html]&lt;br /&gt;
&lt;br /&gt;
AOLserver [[socket driver]] module which implements SSL/TLS encryption for&lt;br /&gt;
incoming connections using the proprietary [http://www.rsasecurity.com/node.asp?id=1202 BSAFE] library.&lt;br /&gt;
Supplied as standard.&lt;br /&gt;
&lt;br /&gt;
If you do not have acces to BSAFE, try [[nsopenssl]] or [[nsnss]] which&lt;br /&gt;
use freely available libraries.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category Documentation]] - [[SSL]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Nsmysql&amp;diff=2872</id>
		<title>Nsmysql</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Nsmysql&amp;diff=2872"/>
		<updated>2005-04-12T16:33:32Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 56&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;nsmysql is an internal MySQL database driver for AOLserver 3.x and 4.x, by [[Panoptic Computer Network]].&lt;br /&gt;
&lt;br /&gt;
The latest version is v1.0 (CVS tag nsmysql_v1).&lt;br /&gt;
* [[nsmysql API]]&lt;br /&gt;
* [[nsmysql FAQ]]&lt;br /&gt;
&lt;br /&gt;
'''Downloads:'''&lt;br /&gt;
&lt;br /&gt;
Source is available via HTTP and FTP:&lt;br /&gt;
* FTP: ftp://ftp.panoptic.com/pub/nsmysql/nsmysql_v1.tar.gz&lt;br /&gt;
* HTTP: http://panoptic.com/nsmysql/nsmysql_v1.tar.gz&lt;br /&gt;
* HTTP: http://aolserver.com/downloads/nsmysql_v1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Binaries are available here:&lt;br /&gt;
&lt;br /&gt;
Win32:&lt;br /&gt;
* FTP, v0.6: ftp://ftp.panoptic.com/pub/nsmysql/binaries/nsmysql-0.6-win32.zip&lt;br /&gt;
* HTTP, v0.6: http://panoptic.com/nsmysql/binaries/nsmysql-0.6-win32.zip&lt;br /&gt;
&lt;br /&gt;
Linux 2.4, glibc 2.3:&lt;br /&gt;
* FTP, v0.6: ftp://ftp.panoptic.com/pub/nsmysql/binaries/nsmysql-0.6-linux2.4.tar.gz&lt;br /&gt;
* HTTP, v0.6: http://panoptic.com/nsmysql/binaries/nsmysql-0.6-linux2.4.tar.gz&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=SAIM_Proposal&amp;diff=2871</id>
		<title>SAIM Proposal</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=SAIM_Proposal&amp;diff=2871"/>
		<updated>2005-04-12T00:46:07Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1415&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Idea:'''&lt;br /&gt;
&lt;br /&gt;
Provide a mechanism to create an ADP which installs a (small) AOLserver application. All files etc. should be included in the ADP. The user copies the ADP into his pageroot, opens the page in a browser, posiibly fills out some configuration data and clicks &amp;quot;install&amp;quot; after which he is redirected to the running application&lt;br /&gt;
&lt;br /&gt;
'''Motivation:'''&lt;br /&gt;
&lt;br /&gt;
Provide a simple way to package applications for AOLserver, thereby lowering the amount of time a (new) user has to invest to get a useful instance of AOLserver up and running. This would go hand in hand with the proposed [[Batteries Included]] binary distributions. &lt;br /&gt;
&lt;br /&gt;
'''Design:'''&lt;br /&gt;
&lt;br /&gt;
I'm not too sure about this yet. I have a prototype which does little more than read a &amp;quot;spec file&amp;quot;, base64 encode the files specified in the spec, wrap the base64 encoded files with some TCL to unpack and copy them to the right locations on the server and a simple form, that asks the user under what url prefix he'd like to be able to reach the application.&lt;br /&gt;
&lt;br /&gt;
The big decision here is how to make the packaging step general enough to be useful for most people but not too general that you end up duplicating the same code for every application and a hand crafted solution would be less work. From my viewpoint there are two main ways to structure the whole process. A declarative way telling an installer engine which files of what type there are and what config variables the user should provide. The second way is an imperativ approach, where all we provide are some fairly general functions to pack/unpack files, copy them to specific locations, ask for certain config variables etc. and leave the actual work to small TCL bits the person packaging the applications has to write using these functions.&lt;br /&gt;
&lt;br /&gt;
Both approaches have their merits. The declarativ way is definently simpler to handle but also less flexible, if a certain feature is not implemented, your out of luck. The imperative way gives the packager maximum flexability but requires more upfront work.&lt;br /&gt;
&lt;br /&gt;
'''Unresolved questions:'''&lt;br /&gt;
* How are config variables passed to the application? -- [[Olaf]]&lt;br /&gt;
&lt;br /&gt;
[[Dossy]] 2005apr11: ''I think the debconf style of adding &amp;quot;magic comments&amp;quot; around the config section for the app in the config file could be safe.  This way, the app could rewrite the config file (after taking a backup copy) to update settings for the app in question.  Ideally, each app's configs would live in its own Tcl file, and all the app would do to the main config is add a line like: &amp;quot;source /path/to/appconfig.tcl&amp;quot; on installation.  All app-specific config. settings would be managed by the app in that '''appconfig.tcl''' file.''&lt;br /&gt;
* How do we prevent/handle multiple instances of an application within one virtual server? - I think multiple instances are not the way to go, if you need this kind of functionality, your probably better of with OACS or require the whole instance for your application anyway. -- [[Olaf]]&lt;br /&gt;
&lt;br /&gt;
[[Dossy]] 2005apr11: ''Yeah, this whole virtual server thing is just messy.  Lets solve the problem for the simple case first, then see what real (not imagined) problems there are in the complex case.  I bet if we drive to the simplest possible solution for the simple case, the changes required to accomodate the more complex solution will be possible.''&lt;br /&gt;
* How are required database pools handled? Should the installer edit the nsd startup file (IMHO BAD) or require the user to manually create some pools from which the installer will let him choose one or more for the application. -- [[Olaf]]&lt;br /&gt;
&lt;br /&gt;
[[Dossy]] 2005apr11: ''This config. stuff would also go into the '''appconfig.tcl''' file that's managed by the app.  Perhaps we need a framework for building the ''install.adp'' as well as a ''config.adp'' that lets you modify some (but perhaps not all) settings set at install time.''&lt;br /&gt;
* Upgrades? -- [[Olaf]]&lt;br /&gt;
&lt;br /&gt;
[[Dossy]] 2005apr11: ''Again, lets solve the simple case (first install) then see what problems there are left to solve for the upgrade case.''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Would anyone use something like this / is there any interest in something like this? What features to you see as essetional? What approach to specifiying the install instructions would you prefer?&lt;br /&gt;
&lt;br /&gt;
[[Dossy]] 2005apr11: ''I'm in favor of a hybrid declarative/imperative approach: a config file that specifies what info. the installer must collect during pre-install; a list of files to wrap inside the installer, along with an (optional) post-install callback Tcl script to handle any app-specific customizations to the standard installer's behaviors.''&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Olaf&amp;diff=2870</id>
		<title>Olaf</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Olaf&amp;diff=2870"/>
		<updated>2005-04-12T00:34:27Z</updated>

		<summary type="html">&lt;p&gt;WikiSysop: imported from WiKit id 1416&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See: [[Olaf Mersmann]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
</feed>