-*- mode:org -*-
* Requirements:
** lua 5.1 ( http://www.lua.org/ )
** Apache HTTPD 2.2 ( http://httpd.apache.org/ ) or Apache HTTPD 2.3

* Documentation
  See docs/README

* Building
  For now, see docs/building-from-subversion.txt

* To Consider
  Allow definition of lua_State instances associated with arbitrary
  pool using the pool's user_data constuct. There would, here, be two
  types, pooled and singleton. On the other hand, singleton would work
  fine for almost all cases -- the exception being a process or server
  pool, and then we could stay singleton anyway and lock around it.

  The current "server scope" behavior could, instead, fall into
  connection scope, for long-lived connections, really we want thread
  scope (which Brian Akins knows how to do). Is there a pool
  associated with a thread? Contention on the pool is a pain in a
  highly concurrent environment.

  Could use apr_thread_data_(get|set) if I can find a way to hook into
  thread destruction. Looks like apr threads let you use the standard
  APR_POOL_DECLARE_ACCESSOR(thread); defined method, just need to look
  up what form that takes. -- apr_thread_pool_get -- just attach to
  that pool.

  Given that, we can associate a hash of lua_State instances with
  arbitrary pools, such as the request pool, thread pool, server pool,
  etc. We then use the file as key into the hash. Users, able to
  specify the handler function, can then make use of the same file
  with different handlers to reuse states.

  

* Task List
** TODO Use r->file to determine file, doing rewriting in translate_name   
** TODO Provide means to get useful output from lua errors in response body
   Probably have to put it on the vm spec for pre-handler errors, as
   it is pre-handler, will prolly be on the request_config somewhere,
   but sometimes cannot put there, so... fun
** TODO Mapping in the server_rec
** TODO Connection scoped vms
** TODO Figure out how reentrancy works regarding filter chain stuff. 
   Do we need new "threads"?
** TODO Flesh out apw_*getvm for each flavor we allow
** TODO Rework apw_sgetvm to use the create_vm stuff like apw_rgetvm
** TODO apw_rgetvm needs to handle connection scoped vms     
** TODO provide means to implement authn and authz providers
** TODO: Flatten LuaHook* to LuaHook phase file fn ?
** TODO: document or remove block sections
** TODO: test per-dir behavior of block sections
** TODO: Suppress internal details (fs path to scripts, etc) in error responses
    
* License
  Apache License, Version 2.0,
  
  http://www.apache.org/licenses/LICENSE-2.0 

  See NOTICE file for more information
        
* Problems and Patches:
  Please use dev@httpd.apache.org for discussing mod_lua development
  To subscribe send email to dev-subscribe@httpd.apache.org  
  Note that this is for development discussion, not user support :-)
   
* Contributors Include
** Brian McCallister
** Paul Querna
** Garrett Rooney
** Martin Traverso
** Brian Akins
** Justin Erenkrantz
** Philip M. Gollucci
** Stefan Fritsch
** Eric Covener
** Daniel Gruno
