TO DO
Main
- Editar arquivo de copyright.
- Por mod_lua no controle de versão.
- Desenvolver os métodos de request_rec. Bem como server_rec e connection_rec.
- Simular o ambiente de CGI no sandbox.
Em vez de print, redirecionar STDIN e STDOUT para a conexão do Apache.
Simular variáveis de ambiente de CGI no sandbox.
- Ver uma forma legal de tratar error dos sandbox, como php faz quando uma função falha, que põe informações no meio do html. Ver ml_err para exemplo.
- Implementar os outros eventos do mod_lua.
- O que fazer quando não houver handlers num evento?
- O mod_lua deve suporta handlers stacked.
Future
- Implementar sessão de uma forma bem transparente para os Lua scripts, semelhante o PHP.
- Implementar, encontrar ou melhorar um pacote de comunicação com banco de dados. Deve suportar no mínimo o MySQL e o PostgrSQL. E, deve ser geral como a DBI do Perl.
- Analisar se io.setvbuf de Lua 5.1 não poderia ser utilizada para perturbar os fake streams disponíveis para o box, que são todo unbuffered.
Done
- Começar a mostrar mensagem de erros na página. Agora, quando um erro ocorre dentro do sandbox, esse é interceptado e mostrado na página.
- Implementar o hardtimeout do Apache para evitar abuso de CPU. O Apache só consegue fazer algo se o cgi estiver gerando output, do contrário ele não tira o CGI da memória.
- A diretiva LuaPath passou a apenas a setar a variável LUA_PATH do lua_State global. E a diretiva LuaRequire, agora, apenas chama o pacote. Isso permite os "require"s dos pacotes, executados mais tarde, ter um LUA_PATH setado pela configuração do Apache.
- Trocar calloc por alloc no modlua_config.c.
- Tratar o header como um CGI, ou seja, descobrindo o mesmo do STDOUT do sandbox.
- No meu desktop de casa, há um arquivo com mais informações sobre a configuração do Apache. Documentado no site.
- A configuração do Apache deve busca os lua handlers dentro do source, assim não é necessário manter duas cópias do handlers. Alterado.
- Criar modlua_lua.c.
- Chamada e passagem de request_rec o LuaHandler.
Aqui, teremos um problema, o request_rec pode ser copiado, dentro de lua no handler, para uma variável global! O request_rec será desalocado, mas a referência ficará... A solução adotada foi tratar o request_rec como um file handle, ou seja, verificar se ele não já foi fechado e retornar erro se for o caso.
- A função import pode ser trocado por require interno de Lua? Sim. A primeira versão de mod_lua definia essa função porque usava Lua 4.0.
- O init module é chamado várias vezes? Como é detectado ou liberado memória? Segundo a documentação, ele é chamado duas vezes no startup para garantir que o Apache sobrevive a um reload. Para liberar a memória, basta utiliza a cleanup API.
- Configuração no httpd.conf. Falta apenas o LuaRequire. LuaPath canoniza os caminhos para ficar coerente como o estilo do Apache.
- Construir um Makefile.
- Conhecer so parâmetros do GCC para compilar o módulo.
- Aprender estilo de código do Apache.