X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=www%2Fwproto.c;h=4cba04c1038405a320a11e68894e6e5cd4e87f76;hb=ce3ef5c24347417e973e9e6739466dfc701fe19d;hp=bc46653947c3f2ed81f9244a6cfc6b4312599f0a;hpb=71b5b2cf0d923cf64e9353c9250bd2912e446e0a;p=egate.git diff --git a/www/wproto.c b/www/wproto.c index bc46653..4cba04c 100644 --- a/www/wproto.c +++ b/www/wproto.c @@ -41,7 +41,33 @@ * USE OR PERFORMANCE OF THIS SOFTWARE. * * $Log: wproto.c,v $ - * Revision 1.6 1995/11/06 10:51:17 adam + * Revision 1.12 1996/01/05 16:35:02 adam + * Minor changes. + * + * Revision 1.11 1996/01/05 16:21:21 adam + * Bug fix: shell (wproto) sometimes closed server FIFO before cgi + * program opened it - solution: cgi sends OK when response has been read. + * + * Revision 1.10 1995/12/22 14:21:16 adam + * More work on scan. The search.egw script takes care of cached + * query page (doesn't always increment nextSetNo). To make new search set + * either 'New query' must be selected or the query page must be reloaded. + * The msearch script doesn't do this yet, however. + * + * Revision 1.9 1995/11/14 16:31:36 adam + * Temporary remove of ccl entry. + * + * Revision 1.8 1995/11/13 15:41:45 adam + * Arrow gifs. + * Gateway uses record element set names B(rief) and F(ull). + * Bug fix. Didn't save idAuthentication correctly. + * + * Revision 1.7 1995/11/10 14:47:32 adam + * Plus (+) characters automatically converted to space in forms. + * Work on search in multiple targets. Doesn't work well - yet. + * Presentation formats enhanced. + * + * Revision 1.6 1995/11/06 10:51:17 adam * End of response marker in response from wsh/wproto to wcgi. * Shells are respawned when necessary. * @@ -65,6 +91,7 @@ */ #include +#include #include #include #include @@ -113,7 +140,11 @@ void wo_clear (WCLIENT wc, char *type) if (!wc->outbuffer) wc->outbuffer = malloc(wc->outbuffer_size = OUTBUFFER_CHUNK); wc->outbuffer_offset = 0; +#if 0 + wo_printf(wc, "Expires: 0\nContent-type: %s\n\n", type); +#else wo_printf(wc, "Content-type: %s\n\n", type); +#endif } int wo_puthtml (WCLIENT wc, char *name) @@ -186,11 +217,19 @@ int wo_overflow(WCLIENT wc, char ch) int wo_finish(WCLIENT wc) { + char buf[4]; gw_log (GW_LOG_DEBUG, mod, "wo_finish"); - + wo_putc (wc, 0); if (wo_flush(wc) < 0) return -1; +#if 1 + gw_log (GW_LOG_DEBUG, mod, "reading ack"); + if (read(wc->linein, buf, 2) != 2) + { + gw_log (GW_LOG_DEBUG, mod, "read ack"); + } +#endif close(wc->lineout); wc->lineout = -1; if (wc->cache_fd >= 0) @@ -211,10 +250,21 @@ static void descramble(char *t, const char *o) { sscanf(o + 1, "%2x", &v); o += 3; - *(t++) = (char) v; + if (v == '+') + *t = ' '; + else + *t = (char) v; + t++; } else - *(t++) = *(o++); + { + if (*o == '+') + *t = ' '; + else + *t = *o; + t++; + o++; + } } *t = '\0'; } @@ -309,18 +359,24 @@ int wproto_process(WCLIENT wc, int timeout) p++; p++; /* we don't deal with envvars yet */ decode_form(wc->wf_data, p); - if (wc->lineout < 0 && (wc->lineout = open(wc->wf_serverp, O_WRONLY)) - < 0) - { - gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, mod, "open %s", wc->wf_serverp); - exit(1); - } + if (wc->lineout < 0) + { + gw_log (GW_LOG_DEBUG, mod, "open %s", wc->wf_serverp); + if ((wc->lineout = open(wc->wf_serverp, O_WRONLY)) < 0) + { + gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, mod, "open %s", + wc->wf_serverp); + exit(1); + } + } /* look in cache only if request carries no forms data. */ if (!*wc->wf_data[0].name && (level = wproto_findcache(wc, wc->wf_parms)) >= 0) { + gw_log (GW_LOG_DEBUG, mod, "wproto_dumpcache"); wproto_dumpcache(wc, level); wo_finish(wc); + } else { @@ -349,10 +405,7 @@ WCLIENT wproto_init(void) new->id = atoi (val); sprintf(new->path, "%s/%s/clt%d", FIFOROOT, FIFODIR, new->id); if (mkfifo(new->path, 0666 | S_IFIFO) < 0) - { - gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, mod, "mkfifo(%s)", new->path); - exit(1); - } + gw_log (GW_LOG_WARN|GW_LOG_ERRNO, mod, "mkfifo(%s)", new->path); gw_log (GW_LOG_DEBUG, mod, "Synchronizing with server."); sprintf(path2, "%s/%s/srv%d", FIFOROOT, FIFODIR, getppid()); if ((new->lineout = open(path2, O_WRONLY)) < 0)