From af019cc83166ab755de4b9c9133c23caacc2f103 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Wed, 2 May 2007 11:53:25 +0000 Subject: [PATCH] Added new member 'query_charset' for bend_initrequest structure. A backend init handler should set this member to its native character set for query terms. When defined, the frontend server logic will announce this character set to a client if the negotiationModel bit is set by the client. ALL server implementors are encouraged to specify this. If they don't, a warning is issued. --- NEWS | 9 ++++++++- include/yaz/backend.h | 32 +++++++++++++++++++------------- src/seshigh.c | 24 ++++++++++++++++++------ src/statserv.c | 3 +-- ztest/ztest.c | 4 +++- 5 files changed, 49 insertions(+), 23 deletions(-) diff --git a/NEWS b/NEWS index 8617be2..e7c9427 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,11 @@ ---- 3.0.0 2007/05/01 +--- 3.0.0 2007/05/02 + +Added new member 'query_charset' for bend_initrequest structure. A +backend init handler should set this member to its native character set +for query terms. When defined, the frontend server logic will announce +this character set to a client if the negotiationModel bit is set by the +client. ALL server implementors are encouraged to specify this. If they +don't, a warning is issued. Added CCL utility to remove terms (stop words) from resulting RPN tree. This is handled by functions with prefix ccl_stop_words_ . diff --git a/include/yaz/backend.h b/include/yaz/backend.h index c7df87a..9fcd3bf 100644 --- a/include/yaz/backend.h +++ b/include/yaz/backend.h @@ -24,7 +24,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* $Id: backend.h,v 1.43 2007-04-12 13:52:57 adam Exp $ */ +/* $Id: backend.h,v 1.44 2007-05-02 11:53:25 adam Exp $ */ /** * \file backend.h @@ -233,31 +233,38 @@ typedef struct { typedef struct bend_initrequest { + /* arguments to be read by a backend */ Z_IdAuthentication *auth; ODR stream; /* encoding stream */ ODR print; /* printing stream */ Z_ReferenceId *referenceId;/* reference ID */ char *peer_name; /* dns host of peer (client) */ - + ODR decode; /* decoding stream */ + /* character set and language negotiation - see include/yaz/z-charneg.h */ + Z_CharSetandLanguageNegotiation *charneg_request; + + + /* stuff to be modified/set by backend */ + + /* character negotiation response */ + Z_External *charneg_response; + char *query_charset; + int records_in_same_charset; /* as query_charset */ char *implementation_id; char *implementation_name; char *implementation_version; - int (*bend_sort) (void *handle, bend_sort_rr *rr); - int (*bend_search) (void *handle, bend_search_rr *rr); - int (*bend_fetch) (void *handle, bend_fetch_rr *rr); - int (*bend_present) (void *handle, bend_present_rr *rr); + int (*bend_sort)(void *handle, bend_sort_rr *rr); + int (*bend_search)(void *handle, bend_search_rr *rr); + int (*bend_fetch)(void *handle, bend_fetch_rr *rr); + int (*bend_present)(void *handle, bend_present_rr *rr); int (*bend_esrequest) (void *handle, bend_esrequest_rr *rr); int (*bend_delete)(void *handle, bend_delete_rr *rr); int (*bend_scan)(void *handle, bend_scan_rr *rr); int (*bend_segment)(void *handle, bend_segment_rr *rr); - - ODR decode; /* decoding stream */ - /* character set and language negotiation - see include/yaz/z-charneg.h */ - Z_CharSetandLanguageNegotiation *charneg_request; - Z_External *charneg_response; int (*bend_explain)(void *handle, bend_explain_rr *rr); int (*bend_srw_scan)(void *handle, bend_scan_rr *rr); int (*bend_srw_update)(void *handle, bend_update_rr *rr); + } bend_initrequest; typedef struct bend_initresult @@ -284,11 +291,10 @@ typedef struct statserv_options_block int dynamic; /* fork on incoming requests */ int threads; /* use threads */ int one_shot; /* one session then exit(1) */ - int __UNUSED__loglevel; /* desired logging-level */ char apdufile[ODR_MAXNAME+1]; /* file for pretty-printed PDUs */ char logfile[ODR_MAXNAME+1]; /* file for diagnostic output */ char default_listen[1024]; /* 0 == no default listen */ - enum oid_proto default_proto; /* PROTO_SR or PROTO_Z3950 */ + enum oid_proto default_proto; /* PROTO_SR or PROTO_Z3950 */ int idle_timeout; /* how many minutes to wait before closing */ int maxrecordsize; /* maximum value for negotiation */ char configname[ODR_MAXNAME+1]; /* given to the backend in bend_init */ diff --git a/src/seshigh.c b/src/seshigh.c index 690e872..83ecd1d 100644 --- a/src/seshigh.c +++ b/src/seshigh.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: seshigh.c,v 1.115 2007-04-16 21:53:09 adam Exp $ + * $Id: seshigh.c,v 1.116 2007-05-02 11:53:25 adam Exp $ */ /** * \file seshigh.c @@ -496,6 +496,7 @@ static void assoc_init_reset(association *assoc) assoc->init->implementation_version = 0; assoc->init->implementation_id = 0; assoc->init->implementation_name = 0; + assoc->init->query_charset = 0; assoc->init->bend_sort = NULL; assoc->init->bend_search = NULL; assoc->init->bend_present = NULL; @@ -2282,9 +2283,21 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) ODR_MASK_SET(resp->options, Z_Options_sort); strcat(options, " sort"); } - - if (ODR_MASK_GET(req->options, Z_Options_negotiationModel) - && assoc->init->charneg_response) + + if (!assoc->init->charneg_response && !assoc->init->charneg_request) + { + if (assoc->init->query_charset) + { + assoc->init->charneg_response = yaz_set_response_charneg( + assoc->encode, assoc->init->query_charset, 0, 0); + } + else + { + yaz_log(YLOG_WARN, "default query_charset not defined by backend"); + } + } + if (assoc->init->charneg_response + && ODR_MASK_GET(req->options, Z_Options_negotiationModel)) { Z_OtherInformation **p; Z_OtherInformationUnit *p0; @@ -2301,7 +2314,6 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) ODR_MASK_SET(resp->options, Z_Options_negotiationModel); strcat(options, " negotiation"); } - if (ODR_MASK_GET(req->options, Z_Options_triggerResourceCtrl)) ODR_MASK_SET(resp->options, Z_Options_triggerResourceCtrl); @@ -2340,7 +2352,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.115 $"); + version = odr_strdup(assoc->encode, "$Revision: 1.116 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; resp->implementationVersion = odr_prepend(assoc->encode, diff --git a/src/statserv.c b/src/statserv.c index 7f23e16..83dd422 100644 --- a/src/statserv.c +++ b/src/statserv.c @@ -5,7 +5,7 @@ * NT threaded server code by * Chas Woodfield, Fretwell Downing Informatics. * - * $Id: statserv.c,v 1.47 2007-01-19 10:29:13 adam Exp $ + * $Id: statserv.c,v 1.48 2007-05-02 11:53:25 adam Exp $ */ /** @@ -92,7 +92,6 @@ statserv_options_block control_block = { 1, /* dynamic mode */ 0, /* threaded mode */ 0, /* one shot (single session) */ - 0, /* __UNUSED_loglevel */ "", /* no PDUs */ "", /* diagnostic output to stderr */ "tcp:@:9999", /* default listener port */ diff --git a/ztest/ztest.c b/ztest/ztest.c index 5769d52..6ae20f2 100644 --- a/ztest/ztest.c +++ b/ztest/ztest.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: ztest.c,v 1.88 2007-04-16 21:53:09 adam Exp $ + * $Id: ztest.c,v 1.89 2007-05-02 11:53:25 adam Exp $ */ /* @@ -721,6 +721,8 @@ bend_initresult *bend_init(bend_initrequest *q) q->bend_srw_scan = ztest_scan; q->bend_srw_update = ztest_update; + q->query_charset = "ISO-8859-1"; + return r; } -- 1.7.10.4