Minor changes.
[egate.git] / www / wsh.c
index c6093f4..f15ae87 100644 (file)
--- a/www/wsh.c
+++ b/www/wsh.c
  * USE OR PERFORMANCE OF THIS SOFTWARE.
  *
  * $Log: wsh.c,v $
- * Revision 1.7  1995/11/06 17:44:23  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.
  *
 #include <unistd.h>
 #include <ctype.h>
 
+#include <gw-db.h>
 #include "whtml.h"
 #include "wtcl.h"
 #include "wirtcl.h"
 
-#define TIMEOUT_SHORT 60
-#define TIMEOUT_MEDIUM 1800
-#define TIMEOUT_LONG 7200
+#define TIMEOUT 60
 
 static WCLIENT wcl;
 static char *mod = "wsh";
@@ -89,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);
@@ -117,10 +122,23 @@ int main (int argc, char **argv)
         exit (1);
     }
     w_interp_load_state (w_interp, NULL);
-    while (wproto_process(wcl, timeout) > 0)
+    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;