/* * Copyright (C) 2003 Sam Horrocks * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ Required functionality for each major component of SpeedyCGI: Apache Module: - Set options from the httpd.conf file (set) - Set options from the environment (init) - Use the OPTVAL values - Set the the script's argv (set_script) Speedy Command-Line - Set options from argv and environment (init) - Use the OPTVAL values Frontend: - Possibly read values from the #! line in the script file. (read_shbang) - Get the script argv (script_argv) - Use the OPTVAL values - Call the speedy backend (exec_argv and exec_envp) Backend: - Get perl/speedy options from the command line (init) - Get the script argv (script_argv) - Use the OPTVAL values - Set options from calls via CGI::SpeedyCGI (set_byname) - Call perl with the correct argv (perl_argv) - Call the speedy backend (exec_argv and exec_envp) Functionality for the speedy_opt module: Inputs: - The #! line in the script - Argv to the speedy-frontend - Argv to the speedy-backend - Unix environment variables - Settings in the httpd.conf file - Script argv - Settings in the backend made by the perl program Outputs: - Argv for speedy_backend - For mod_speedycgi, use: - Settings from the httpd.conf file - The script argv set by the code - For others: - Original argv from program - Environment for speedy_backend - Original env from program - The script argv - For mod_speedycgi, must use the previously input argv - For others, get from the program's argv - Argv for perl - Arg0 must be path from #! line in script - Perl options from original argv - Perl options from the #! line - Perl options from the PerlArgs option - Current value of the script argv - OPTVAL values - Settings from httpd.conf file - Settings from environment - Options from the program argv - Options from the #! line Program design: Globs: exec_argv, exec_envp, script_argv, perl_argv void speedy_opt_init(const char * const *argv, const char * const *envp); - Take the argv and split it into perl args, speedy args and script args - Append to the speedy args any options that were changed prior to this call. - Set our OptRec values based on the speedy args - Append to the perl args the value of the PerlArgs option, if set - Store into exec_argv the perl args plus, speedy args and the script args - Point script_argv to a location inside exec_argv - Copy the envp into exec_envp - Set our OptRec values based on the environment void speedy_opt_read_shbang(); - Split the #! line into arg0, perl args and speedy options - Put arg0 into perl_argv[0] - Append the other perl args to the end of perl_argv - Set our OptRec values based on the speedy args void speedy_opt_set_script_argv(const char * const *argv); - Replace the existing script_argv with a copy of this argv const char * const *speedy_opt_script_argv(); - Return the existing script_argv char **speedy_opt_perl_argv(); - If not called before, append the script argv to the end of perl_argv - Return the perl_argv const char * const *speedy_opt_exec_argv(); - Return the exec_argv const char * const *speedy_opt_exec_envp(); - Return the existing exec_envp