* Copyright (c) 1995-2003, Index Data
* See the file LICENSE for details.
*
- * $Id: seshigh.c,v 1.136 2003-02-17 14:35:42 adam Exp $
+ * $Id: seshigh.c,v 1.142 2003-02-18 14:47:23 adam Exp $
*/
/*
#include <io.h>
#define S_ISREG(x) (x & _S_IFREG)
#include <process.h>
+#include <sys/stat.h>
#else
#include <sys/stat.h>
#include <unistd.h>
xfree(h);
xmalloc_trav("session closed");
if (control_block && control_block->one_shot)
+ {
exit (0);
+ }
}
static void do_close_req(association *a, int reason, char *message,
*cls->closeReason = reason;
cls->diagnosticInformation = message;
process_z_response(a, req, &apdu);
- iochan_settimeout(a->client_chan, 60);
+ iochan_settimeout(a->client_chan, 20);
}
else
{
/* We aren't speaking to this fellow */
if (assoc->state == ASSOC_DEAD)
{
- yaz_log(LOG_LOG, "Closed connection after reject");
+ yaz_log(LOG_LOG, "Connection closed - end of session");
cs_close(conn);
destroy_association(assoc);
iochan_destroy(h);
{ /* restore mask for cs_get operation ... */
iochan_clearflag(h, EVENT_OUTPUT|EVENT_INPUT);
iochan_setflag(h, assoc->cs_get_mask);
- yaz_log(LOG_LOG, "queue empty mask=%d", assoc->cs_get_mask);
if (assoc->state == ASSOC_DEAD)
iochan_setevent(assoc->client_chan, EVENT_TIMEOUT);
}
else
{
assoc->cs_put_mask = EVENT_OUTPUT;
- yaz_log(LOG_LOG, "queue not empty");
}
break;
default:
rr.comp->u.complex->generic = (Z_Specification *)
odr_malloc(assoc->decode, sizeof(Z_Specification));
- rr.comp->u.complex->generic->which = Z_Specification_uri;
- rr.comp->u.complex->generic->u.uri = srw_req->recordSchema;
+ rr.comp->u.complex->generic->which = Z_Schema_uri;
+ rr.comp->u.complex->generic->schema.uri = srw_req->recordSchema;
rr.comp->u.complex->generic->elementSpec = 0;
rr.stream = assoc->encode;
char *base = "Default";
bend_search_rr rr;
Z_External *ext;
+
+ yaz_log(LOG_LOG, "Got SRW SearchRetrieveRequest");
if (!assoc->init)
srw_bend_init(assoc);
srw_res->num_records = j;
if (!j)
srw_res->records = 0;
- yaz_log(LOG_LOG, "got %d records", j);
}
}
}
ctype = "text/html";
}
z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype);
- yaz_log(LOG_LOG, "OK send page %s size=%ld", fpath, sz);
}
fclose(f);
}
#endif
if (!strcmp(hreq->path, "/"))
{
+#ifdef DOCDIR
struct stat sbuf;
+#endif
const char *doclink = "";
p = z_get_HTTP_Response(o, 200);
hres = p->u.HTTP_Response;
}
else if (!strcmp(hreq->method, "POST"))
{
-#if HAVE_XSLT
const char *content_type = z_HTTP_header_lookup(hreq->headers,
"Content-Type");
const char *soap_action = z_HTTP_header_lookup(hreq->headers,
!yaz_strcmp_del("text/xml", content_type, "; "))
{
Z_SOAP *soap_package = 0;
- int ret;
+ int ret = -1;
int http_code = 500;
static Z_SOAP_Handler soap_handlers[2] = {
+#if HAVE_XML2
{"http://www.loc.gov/zing/srw/v1.0/", 0,
(Z_SOAP_fun) yaz_srw_codec},
+#endif
{0, 0, 0}
};
-
ret = z_soap_codec(assoc->decode, &soap_package,
&hreq->content_buf, &hreq->content_len,
soap_handlers);
+#if HAVE_XML2
if (!ret && soap_package->which == Z_SOAP_generic &&
soap_package->u.generic->no == 0)
{
http_code = 200;
}
}
-
+#endif
p = z_get_HTTP_Response(o, 200);
hres = p->u.HTTP_Response;
ret = z_soap_codec(assoc->encode, &soap_package,
hres->code = http_code;
z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/xml");
}
-#endif
if (!p) /* still no response ? */
p = z_get_HTTP_Response(o, 500);
}
}
else
{
+ int t;
+ const char *alive = z_HTTP_header_lookup(hreq->headers, "Keep-Alive");
+
+ if (alive && isdigit(*alive))
+ t = atoi(alive);
+ else
+ t = 30;
+ if (t < 0 || t > 3600)
+ t = 3600;
+ iochan_settimeout(assoc->client_chan,t);
z_HTTP_header_add(o, &hres->headers, "Connection", "Keep-Alive");
}
process_gdu_response(assoc, req, p);
switch (req->apdu_request->which)
{
case Z_APDU_initRequest:
+ iochan_settimeout(assoc->client_chan,
+ statserv_getcontrol()->idle_timeout * 60);
res = process_initRequest(assoc, req); break;
case Z_APDU_searchRequest:
res = process_searchRequest(assoc, req, &fd); break;