X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=www%2Fwsh.c;h=9ee4a1424c785bdb979ef7d0bb6e0bf3018ea020;hb=0869c05bd5a456f027823ca0783216acf4424b65;hp=55eb3d8f0f7d35bcb9955c521b36235666d6deb8;hpb=c38544a87dfb550dfe4731c450bbde093c095bde;p=egate.git diff --git a/www/wsh.c b/www/wsh.c index 55eb3d8..9ee4a14 100644 --- a/www/wsh.c +++ b/www/wsh.c @@ -41,7 +41,10 @@ * USE OR PERFORMANCE OF THIS SOFTWARE. * * $Log: wsh.c,v $ - * Revision 1.12 1996/02/19 15:45:00 adam + * Revision 1.13 1996/02/29 15:36:34 adam + * Main shell loop implemented as a separate function called wshmain. + * + * Revision 1.12 1996/02/19 15:45:00 adam * Sort of targets in multiple-targets selection. * * Revision 1.11 1996/02/12 10:10:32 adam @@ -88,145 +91,28 @@ */ #include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include #include "whtml.h" #include "wtcl.h" #include "wirtcl.h" -static WCLIENT wcl; -static char *mod = "wsh"; - int main (int argc, char **argv) { - char *script, *parms, parms_buf[512]; - int timeout; - W_Interp w_interp; - GW_DB gw_db; - GwRes shRes; -#if 0 - struct rlimit rlim; - - rlim.rlim_cur = RLIM_INFINITY; - rlim.rlim_max = RLIM_INFINITY; - setrlimit (RLIMIT_CORE, &rlim); -#endif - - gw_log_init (*argv); - gw_log_file (GW_LOG_ALL, "egwsh_log"); -#if 0 - gw_log_level (GW_LOG_ALL); -#endif - gw_log (GW_LOG_STAT, mod, "Europagate www shell: %s", *argv); - shRes = gw_res_init (); - gw_res_merge (shRes, "egw.res"); - gw_res_merge (shRes, "shell.res"); + W_Interp_Type w_interp_type; -#if 1 - gw_log_level (gw_log_mask_str ( - gw_res_get (shRes, "log.level", "default"))); -#endif - if (!(wcl = wproto_init (gw_res_get (shRes, "fifo.dir", "/tmp/egw")))) - { - gw_log (GW_LOG_FATAL, mod, "init"); - exit(1); - } - gw_log_session (wcl->id); if (!strcmp (*argv, "egwtcl")) - w_interp = w_interp_create (w_interp_tcl, wcl, NULL); + w_interp_type = w_interp_tcl; else if (!strcmp (*argv, "egwirtcl")) - w_interp = w_interp_create (w_interp_irtcl, wcl, NULL); + w_interp_type = w_interp_irtcl; else if (!strcmp (*argv, "egwhtml")) - w_interp = w_interp_create (w_interp_html, wcl, NULL); + w_interp_type = w_interp_html; else { - gw_log (GW_LOG_FATAL, mod, "Cannot determine shell type. prog=%s", + gw_log (GW_LOG_FATAL, "wsh", "Cannot determine shell type. prog=%s", *argv); exit (1); } - w_interp_load_state (w_interp, NULL); - timeout = atoi (gw_res_get (shRes, "timeout", "120")); - if (timeout < 1) - timeout = 1; - while (1) - { - char *p; - int r; - - r = wproto_process (wcl, timeout); - if (r <= 0) - { - gw_db = gw_db_open ("www.db", 0, 0); - if (gw_db) - break; - gw_log (GW_LOG_DEBUG, mod, "Cannot terminate - new request"); - timeout = 10; - continue; - } - timeout = atoi (gw_res_get (shRes, "timeout", "120")); - if (timeout < 1) - timeout = 1; - wo_clear (wcl, NULL); - strcpy (parms_buf, wcl->wf_parms); - script = parms = parms_buf; - while (*parms && *parms != '/') - parms++; - if (*parms) - *parms++ = '\0'; - if (*script) - { - p = script + strlen(script); - while (*--p && p != script) - switch (*p) - { - case '+': - wproto_cache (wcl, wcl->cache_level+1); - *p = '\0'; - break; - case '-': - if (p[1]) - wproto_cache (wcl, wcl->cache_level-atoi(p+1)); - else - wproto_cache (wcl, wcl->cache_level-1); - *p = '\0'; - break; - case '=': - if (isdigit(p[1])) - wproto_cache (wcl, atoi(p+1)); - *p = '\0'; - break; - case ';': - wo_printf (wcl, "Expires: %s\n", p[1] ? p+1 : "0"); - gw_log (GW_LOG_DEBUG, mod, "Expires: %s", p[1] ?p+1:"0"); - *p = '\0'; - break; - } - } - wo_printf (wcl, "Content-type: text/html\n\n"); - for (p = parms; *p; p++) - if (*p == '+') - *p = ' '; - gw_log (GW_LOG_STAT, mod, "script: %s", script); - gw_log (GW_LOG_STAT, mod, "parms: %s", parms); - if (w_interp_exec (w_interp, script, parms)) - { - wo_printf (wcl, "wsh error\n"); - wo_printf (wcl, "Couldn't execute script %s", - script); - } - wo_finish(wcl); - } - w_interp_save_state (w_interp, NULL); - wproto_terminate(wcl); - return 0; + wshmain (argc, argv, w_interp_type); + exit (0); } +