X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fseshigh.c;h=2c266261a8026b39d5be0e2735257f4759a05675;hb=a1c7e0185783d67c7d6022ae7d70dd890b7c0309;hp=18ebe90389f3a76cc42967bfacf8de333b590f72;hpb=b86de9339d429e755e5446fda4051f3685f67fda;p=yaz-moved-to-github.git diff --git a/src/seshigh.c b/src/seshigh.c index 18ebe90..2c26626 100644 --- a/src/seshigh.c +++ b/src/seshigh.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: seshigh.c,v 1.71 2006-03-16 08:55:28 adam Exp $ + * $Id: seshigh.c,v 1.76 2006-05-05 20:02:22 quinn Exp $ */ /** * \file seshigh.c @@ -360,10 +360,10 @@ void ir_session(IOCHAN h, int event) if (!z_GDU(assoc->decode, &req->gdu_request, 0, 0)) { yaz_log(YLOG_WARN, "ODR error on incoming PDU: %s [element %s] " - "[near byte %d] ", + "[near byte %ld] ", odr_errmsg(odr_geterror(assoc->decode)), odr_getelement(assoc->decode), - odr_offset(assoc->decode)); + (long) odr_offset(assoc->decode)); if (assoc->decode->error != OHTTP) { yaz_log(YLOG_WARN, "PDU dump:"); @@ -488,7 +488,7 @@ static void assoc_init_reset(association *assoc) yaz_log(log_requestdetail, "peer %s", assoc->init->peer_name); } -static int srw_bend_init(association *assoc, Z_SRW_diagnostic **d, int *num) +static int srw_bend_init(association *assoc, Z_SRW_diagnostic **d, int *num, Z_SRW_PDU *sr) { statserv_options_block *cb = statserv_getcontrol(); if (!assoc->init) @@ -502,6 +502,26 @@ static int srw_bend_init(association *assoc, Z_SRW_diagnostic **d, int *num) assoc->maximumRecordSize = 3000000; assoc->preferredMessageSize = 3000000; + + if (sr->username) + { + Z_IdAuthentication *auth = odr_malloc(assoc->decode, sizeof(*auth)); + int len; + + len = strlen(sr->username) + 1; + if (sr->password) + len += strlen(sr->password) + 2; + auth->which = Z_IdAuthentication_open; + auth->u.open = odr_malloc(assoc->decode, len); + strcpy(auth->u.open, sr->username); + if (sr->password && *sr->password) + { + strcat(auth->u.open, "/"); + strcat(auth->u.open, sr->password); + } + assoc->init->auth = auth; + } + #if 1 ce = yaz_set_proposal_charneg(assoc->decode, &encoding, 1, 0, 0, 1); assoc->init->charneg_request = ce->u.charNeg3; @@ -515,10 +535,12 @@ static int srw_bend_init(association *assoc, Z_SRW_diagnostic **d, int *num) return 0; } assoc->backend = binitres->handle; + assoc->init->auth = 0; if (binitres->errcode) { + int srw_code = yaz_diag_bib1_to_srw(binitres->errcode); assoc->state = ASSOC_DEAD; - yaz_add_srw_diagnostic(assoc->encode, d, num, binitres->errcode, + yaz_add_srw_diagnostic(assoc->encode, d, num, srw_code, binitres->errstring); return 0; } @@ -641,7 +663,7 @@ static int cql2pqf(ODR odr, const char *cql, cql_transform_t ct, int r; int srw_errcode = 0; const char *add = 0; - char rpn_buf[512]; + char rpn_buf[5120]; r = cql_parser_string(cp, cql); if (r) @@ -707,16 +729,17 @@ static int cql2pqf_scan(ODR odr, const char *cql, cql_transform_t ct, } static void srw_bend_search(association *assoc, request *req, - Z_SRW_searchRetrieveRequest *srw_req, + Z_SRW_PDU *sr, Z_SRW_searchRetrieveResponse *srw_res, int *http_code) { int srw_error = 0; Z_External *ext; + Z_SRW_searchRetrieveRequest *srw_req = sr->u.request; *http_code = 200; yaz_log(log_requestdetail, "Got SRW SearchRetrieveRequest"); - srw_bend_init(assoc, &srw_res->diagnostics, &srw_res->num_diagnostics); + srw_bend_init(assoc, &srw_res->diagnostics, &srw_res->num_diagnostics, sr); if (srw_res->num_diagnostics == 0 && assoc->init) { bend_search_rr rr; @@ -774,8 +797,8 @@ static void srw_bend_search(association *assoc, request *req, const char *pqf_msg; size_t off; int code = yaz_pqf_error (pqf_parser, &pqf_msg, &off); - yaz_log(log_requestdetail, "Parse error %d %s near offset %d", - code, pqf_msg, off); + yaz_log(log_requestdetail, "Parse error %d %s near offset %ld", + code, pqf_msg, (long) off); srw_error = YAZ_SRW_QUERY_SYNTAX_ERROR; } @@ -975,13 +998,14 @@ static char *srw_bend_explain_default(void *handle, bend_explain_rr *rr) } static void srw_bend_explain(association *assoc, request *req, - Z_SRW_explainRequest *srw_req, + Z_SRW_PDU *sr, Z_SRW_explainResponse *srw_res, int *http_code) { + Z_SRW_explainRequest *srw_req = sr->u.explain_request; yaz_log(log_requestdetail, "Got SRW ExplainRequest"); *http_code = 404; - srw_bend_init(assoc, &srw_res->diagnostics, &srw_res->num_diagnostics); + srw_bend_init(assoc, &srw_res->diagnostics, &srw_res->num_diagnostics, sr); if (assoc->init) { bend_explain_rr rr; @@ -1019,14 +1043,15 @@ static void srw_bend_explain(association *assoc, request *req, } static void srw_bend_scan(association *assoc, request *req, - Z_SRW_scanRequest *srw_req, + Z_SRW_PDU *sr, Z_SRW_scanResponse *srw_res, int *http_code) { + Z_SRW_scanRequest *srw_req = sr->u.scan_request; yaz_log(log_requestdetail, "Got SRW ScanRequest"); *http_code = 200; - srw_bend_init(assoc, &srw_res->diagnostics, &srw_res->num_diagnostics); + srw_bend_init(assoc, &srw_res->diagnostics, &srw_res->num_diagnostics, sr); if (srw_res->num_diagnostics == 0 && assoc->init) { struct scan_entry *save_entries; @@ -1203,14 +1228,15 @@ static void srw_bend_scan(association *assoc, request *req, } static void srw_bend_update(association *assoc, request *req, - Z_SRW_updateRequest *srw_req, + Z_SRW_PDU *sr, Z_SRW_updateResponse *srw_res, int *http_code) { + Z_SRW_updateRequest *srw_req = sr->u.update_request; yaz_log(YLOG_DEBUG, "Got SRW UpdateRequest"); yaz_log(YLOG_DEBUG, "num_diag = %d", srw_res->num_diagnostics ); *http_code = 404; - srw_bend_init(assoc, &srw_res->diagnostics, &srw_res->num_diagnostics); + srw_bend_init(assoc, &srw_res->diagnostics, &srw_res->num_diagnostics, sr); if (assoc->init) { bend_update_rr rr; @@ -1462,6 +1488,7 @@ static void process_http_request(association *assoc, request *req) yaz_mime_types_add(types, "html", "text/html"); yaz_mime_types_add(types, "htm", "text/html"); yaz_mime_types_add(types, "txt", "text/plain"); + yaz_mime_types_add(types, "js", "application/x-javascript"); yaz_mime_types_add(types, "gif", "image/gif"); yaz_mime_types_add(types, "png", "image/png"); @@ -1515,7 +1542,7 @@ static void process_http_request(association *assoc, request *req) } else { - srw_bend_search(assoc, req, sr->u.request, res->u.response, + srw_bend_search(assoc, req, sr, res->u.response, &http_code); } if (http_code == 200) @@ -1530,7 +1557,7 @@ static void process_http_request(association *assoc, request *req) res->u.explain_response->diagnostics = diagnostic; res->u.explain_response->num_diagnostics = num_diagnostic; } - srw_bend_explain(assoc, req, sr->u.explain_request, + srw_bend_explain(assoc, req, sr, res->u.explain_response, &http_code); if (http_code == 200) soap_package->u.generic->p = res; @@ -1544,7 +1571,7 @@ static void process_http_request(association *assoc, request *req) res->u.scan_response->diagnostics = diagnostic; res->u.scan_response->num_diagnostics = num_diagnostic; } - srw_bend_scan(assoc, req, sr->u.scan_request, + srw_bend_scan(assoc, req, sr, res->u.scan_response, &http_code); if (http_code == 200) soap_package->u.generic->p = res; @@ -1559,7 +1586,7 @@ static void process_http_request(association *assoc, request *req) res->u.update_response->num_diagnostics = num_diagnostic; } yaz_log(YLOG_DEBUG, "num_diag = %d", res->u.update_response->num_diagnostics ); - srw_bend_update(assoc, req, sr->u.update_request, + srw_bend_update(assoc, req, sr, res->u.update_response, &http_code); if (http_code == 200) soap_package->u.generic->p = res; @@ -2071,7 +2098,7 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) assoc->init->implementation_name, odr_prepend(assoc->encode, "GFS", resp->implementationName)); - version = odr_strdup(assoc->encode, "$Revision: 1.71 $"); + version = odr_strdup(assoc->encode, "$Revision: 1.76 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; resp->implementationVersion = odr_prepend(assoc->encode,