X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=doc%2Ffrontend.xml;h=0f83a6ebb12ed221ab51640214ff6540344e37a7;hp=a455153fe2e20324ea15ec54a3573d652a320675;hb=4f8ea8cfaf2f3d95e4efcf9494526c2b4be43eb8;hpb=96ca9f70fe68d941a7604f3dd1a6d5817556ddf0 diff --git a/doc/frontend.xml b/doc/frontend.xml index a455153..0f83a6e 100644 --- a/doc/frontend.xml +++ b/doc/frontend.xml @@ -1,6 +1,6 @@ - + Generic server - Introduction + Introduction If you aren't into documentation, a good way to learn how the @@ -13,7 +13,7 @@ If you have a database system that you would like to make available by - means of Z39.50, SRW o SRU, &yaz; basically offers your two options. You + means of Z39.50 or SRU, &yaz; basically offers your two options. You can use the APIs provided by the &asn;, &odr;, and &comstack; modules to create and decode PDUs, and exchange them with a client. @@ -99,6 +99,10 @@ Result-Set Sort (optional). + + Return Explain for SRU (optional). + + @@ -163,7 +167,7 @@ int statserv_main(int argc, char **argv, -statserv_options_block *statserv_getcontrol(void); + statserv_options_block *statserv_getcontrol(void); @@ -196,12 +200,6 @@ statserv_options_block *statserv_getcontrol(void); - int loglevel - Set this by ORing the constants defined in - include/yaz/yaz-log.h. - - - char logfile[ODR_MAXNAME+1] File for diagnostic output ("": stderr). @@ -232,7 +230,7 @@ statserv_options_block *statserv_getcontrol(void); int idle_timeout; Maximum session idle-time, in minutes. Zero indicates - no (infinite) timeout. Default is 120 minutes. + no (infinite) timeout. Default is 15 minutes. @@ -317,7 +315,7 @@ void statserv_setcontrol(statserv_options_block *block); functions representing the services that you wish to implement. - Init + Init bend_initresult (*bend_init)(bend_initrequest *r); @@ -332,8 +330,8 @@ bend_initresult (*bend_init)(bend_initrequest *r); - This handler is also called when operating in SRW/SRU mode - when - a connection has been made (even though SRW/SRU does not offer + This handler is also called when operating in SRU mode - when + a connection has been made (even though SRU does not offer this service). @@ -372,6 +370,8 @@ typedef struct bend_initrequest /* character set and language negotiation - see include/yaz/z-charneg.h */ Z_CharSetandLanguageNegotiation *charneg_request; Z_External *charneg_response; + int (*bend_srw_explain)(void *handle, bend_explain_rr *rr); + int (*bend_srw_scan)(void *handle, bend_scan_rr *rr); } bend_initrequest; typedef struct bend_initresult @@ -429,7 +429,7 @@ typedef struct bend_initresult - Search and retrieve + Search and Retrieve We now describe the handlers that are required to support search - and retrieve. You must support two functions - one for search - and one @@ -458,6 +458,7 @@ typedef struct { int hits; /* number of hits */ int errcode; /* 0==OK */ char *errstring; /* system error string or NULL */ + Z_OtherInformation *search_info; } bend_search_rr; @@ -496,20 +497,20 @@ typedef struct { The bend_search handler is also called when - the frontend server receives a SRW/SRU SearchRetrieveRequest. - For SRW/SRU, a CQL query is usually provided by the client. + the frontend server receives a SRU SearchRetrieveRequest. + For SRU, a CQL query is usually provided by the client. The CQL query is available as part of Z_Query structure (note that CQL is now part of Z39.50 via an external). To support CQL in existing implementations that only do Type-1, we refer to the CQL-to-PQF tool described - here. + here. To maintain backwards compatibility, the frontend server of yaz always assume that error codes are BIB-1 diagnostics. - For SRW/SRU operation, a Bib-1 diagnostic code is mapped to - SRW/SRU diagnostic. + For SRU operation, a Bib-1 diagnostic code is mapped to + SRU diagnostic. @@ -541,15 +542,15 @@ typedef struct bend_fetch_rr { The frontend server calls the bend_fetch handler when it needs database records to fulfill a Z39.50 Search Request, a - Z39.50 Present Request or a SRW SearchRetrieveRequest. + Z39.50 Present Request or a SRU SearchRetrieveRequest. The setname is simply the name of the result set that holds the reference to the desired record. The number is the offset into the set (with 1 being the first record in the set). The format field - is the record format requested by the client (See section - Object Identifiers). The value - VAL_NONE indicates that the client did not - request a specific format. The stream argument + is the record format requested by the client (See + ). + The value VAL_NONE indicates that the client did + not request a specific format. The stream argument is an &odr; stream which should be used for allocating space for structured data records. The stream will be reset when all records have been assembled, and @@ -559,11 +560,11 @@ typedef struct bend_fetch_rr { - If a SRW/SRU SearchRetrieveRequest is received by the frontend server, + If a SRU SearchRetrieveRequest is received by the frontend server, the referenceId is NULL and the request_format (transfer syntax) is XML (OID name VAL_TEXT_XML). - The schema for SRW/SRU is stored in both the + The schema for SRU is stored in both the Z_RecordComposition structure and schema (simple string). @@ -649,7 +650,7 @@ typedef struct { - Delete + Delete For back-ends that supports delete of a result set only one handler @@ -683,7 +684,7 @@ typedef struct bend_delete_rr { - scan + Scan For servers that wish to offer the scan service one handler @@ -715,8 +716,21 @@ typedef struct bend_scan_rr { bend_scan_status status; int errcode; char *errstring; + char *scanClause; /* CQL scan clause */ } bend_scan_rr; + + This backend server handles both Z39.50 scan + and SRU scan. In order for a handler to distinguish between SRU (CQL) scan + Z39.50 Scan , it must check for a non-NULL value of + scanClause. + + + + if designed today, it would be a choice using a union or similar, + but that would break binary compatibility with existing servers. + + @@ -726,27 +740,13 @@ typedef struct bend_scan_rr { The finished application has the following invocation syntax (by way of statserv_main()): - - - appname - - - - - - - - - - - - listener-spec - + + &gfs-synopsis; The options are: - &ztest-options; + &gfs-options; @@ -764,7 +764,7 @@ typedef struct bend_scan_rr { hostname | IP-number [: portnumber] - + The port number defaults to 210 (standard Z39.50 port). @@ -779,7 +779,7 @@ typedef struct bend_scan_rr { which causes the server to listen on any local interface. - Running the GFS on Unix + Running the GFS on Unix Assuming the server application appname is started as root, the following will make it listen on port 210. @@ -790,16 +790,15 @@ typedef struct bend_scan_rr { - The server will accept Z39.50 requests and offer SRW/SRU service - on port 210. + The server will accept Z39.50 requests and offer SRU service on port 210. - Setting up Apache as SRW/SRU Frontend + Setting up Apache as SRU Frontend - If you use Apache + If you use Apache as your public web server and want to offer HTTP port 80 access to the YAZ server on 210, you can use the - + ProxyPass directive. If you have virtual host @@ -810,14 +809,15 @@ typedef struct bend_scan_rr { ErrorLog /home/srw/logs/error_log TransferLog /home/srw/logs/access_log ProxyPass / http://srw.mydomain:210/ - </VirualHost> + </VirtualHost> The above for the Apache 1.3 series. - Running a aerver with local access only + + Running a server with local access only Servers that is only being accessed from the local host should listen on UNIX file socket rather than a Internet socket. To listen on @@ -828,6 +828,9 @@ typedef struct bend_scan_rr { + Virtual Hosts + &gfs-virtual; +