Europagate buttons.
[egate.git] / www / wsh.c
index 20213df..f15ae87 100644 (file)
--- a/www/wsh.c
+++ b/www/wsh.c
  * USE OR PERFORMANCE OF THIS SOFTWARE.
  *
  * $Log: wsh.c,v $
- * Revision 1.6  1995/11/06 10:51:19  adam
+ * Revision 1.8  1995/12/20 16:31:33  adam
+ * Bug fix: shell might terminate even though new request was initiated
+ * by the cgi interface program.
+ * Work on more simple user interface and Europagate buttons.
+ *
+ * Revision 1.7  1995/11/06  17:44:23  adam
+ * State reestablised when shell restarts. History of previous
+ * result sets.
+ *
+ * Revision 1.6  1995/11/06  10:51:19  adam
  * End of response marker in response from wsh/wproto to wcgi.
  * Shells are respawned when necessary.
  *
 #include <unistd.h>
 #include <ctype.h>
 
+#include <gw-db.h>
 #include "whtml.h"
 #include "wtcl.h"
 #include "wirtcl.h"
 
-#define TIMEOUT_SHORT 120
-#define TIMEOUT_MEDIUM 1800
-#define TIMEOUT_LONG 7200
+#define TIMEOUT 60
 
 static WCLIENT wcl;
 static char *mod = "wsh";
@@ -85,8 +93,9 @@ static char *mod = "wsh";
 int main (int argc, char **argv)
 {
     char *script, *parms, parms_buf[512];
-    int timeout = TIMEOUT_SHORT;
+    int timeout;
     W_Interp w_interp;
+    GW_DB gw_db;
 
     chdir("/usr/local/etc/httpd/cgi-bin");
     gw_log_init (*argv);
@@ -112,10 +121,24 @@ int main (int argc, char **argv)
                *argv);
         exit (1);
     }
-    while (wproto_process(wcl, timeout) > 0)
+    w_interp_load_state (w_interp, NULL);
+    timeout = TIMEOUT;
+    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 = TIMEOUT;
        wo_clear (wcl, "text/html");
        strcpy (parms_buf, wcl->wf_parms);
        script = parms = parms_buf;
@@ -162,6 +185,7 @@ int main (int argc, char **argv)
         }
        wo_finish(wcl);
     }
+    w_interp_save_state (w_interp, NULL);
     wproto_terminate(wcl);
     return 0;
 }