New GFS search member: present_number
[yaz-moved-to-github.git] / include / yaz / backend.h
index 2af7a13..dd2806c 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data.
+ * Copyright (C) 1995-2013 Index Data.
  * All rights reserved.
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -25,7 +25,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/** 
+/**
  * \file backend.h
  * \brief Header for GFS
  *
@@ -42,8 +42,7 @@
 #include <yaz/oid_db.h>
 
 YAZ_BEGIN_CDECL
-    
-typedef struct request *bend_request;
+
 typedef struct association *bend_association;
 
 /** \brief Information for Z39.50/SRU search handler
@@ -63,9 +62,7 @@ typedef struct {
     ODR decode;                /**< decode stream (input) */
     ODR print;                 /**< print stream (input) */
 
-    bend_request request;      /**< GFS request handle (input) */
-    bend_association association; /**< GFS association / sesssion (input) */
-    int *fd;                   /**< select fd - not working (output) */
+    bend_association association; /**< GFS association / session (input) */
     Odr_int hits;              /**< hits (output) */
     int errcode;               /**< Diagnostic code / 0 for no error (output) */
     char *errstring;           /**< Additional info (output) */
@@ -77,6 +74,8 @@ typedef struct {
     int partial_resultset;     /**< 1=partial results; 0=full (output)*/
     Z_SRW_extra_arg *extra_args; /**< SRU extra request parameters (input) */
     char *extra_response_data;   /**< SRW extra XML response (output) */
+    Z_OtherInformation *search_input; /**< extra search info request (input) */
+    Odr_int present_number;    /**<  piggyback present number (>0) (input) */
 } bend_search_rr;
 
 /** \brief Information for present handler. Does not replace bend_fetch. */
@@ -89,8 +88,7 @@ typedef struct {
     Z_RecordComposition *comp; /**< Formatting instructions (input) */
     ODR stream;                /**< encoding stream (input) */
     ODR print;                 /**< printing stream (input) */
-    bend_request request;      /**< GFS request handle (input) */
-    bend_association association; /**< GFS association / sesssion (input) */
+    bend_association association; /**< GFS association / session (input) */
 
     int errcode;               /**< Diagnostic code / 0 for no error (output) */
     char *errstring;           /**< Additional info (output) */
@@ -141,8 +139,8 @@ typedef struct bend_scan_rr {
     ODR stream;         /**< encoding stream (input) */
     ODR print;          /**< printing stream (input) */
 
-    Odr_int *step_size;     /**< step size */
-    Odr_int term_position;  /**< desired index of term in result list/returned */
+    int *step_size;     /**< step size */
+    int term_position;  /**< desired index of term in result list/returned */
     int num_entries;    /**< number of entries requested/returned */
 
     /* scan term entries. The called handler does not have
@@ -185,9 +183,9 @@ typedef struct bend_delete_rr {
     char **setnames;
     Z_ReferenceId *referenceId;
     int delete_status;    /**< status for the whole operation */
-    Odr_int *statuses;    /**< status each set - indexed as setnames */
+    int *statuses;    /**< status each set - indexed as setnames */
     ODR stream;
-    ODR print; 
+    ODR print;
 } bend_delete_rr;
 
 /** \brief Information for Z39.50 sort handler */
@@ -211,12 +209,11 @@ typedef struct bend_esrequest_rr
 {
     int ItemNo;
     Z_ExtendedServicesRequest *esr;
-    
+
     ODR stream;                /* encoding stream */
     ODR decode;                /* decoding stream */
     ODR print;                 /* printing stream */
     Z_ReferenceId *referenceId;/* reference ID */
-    bend_request request;
     bend_association association;
     int errcode;               /* 0==success, -1==accepted, >0 = failure */
     char *errstring;           /* system error string or NULL */
@@ -229,7 +226,6 @@ typedef struct bend_segment_rr {
     ODR stream;
     ODR decode;
     ODR print;
-    bend_request request;
     bend_association association;
 } bend_segment_rr;
 
@@ -248,40 +244,40 @@ typedef struct {
 
 This includes both request
 information (to be read) and response information which should be
-set by the bend_init handler 
+set by the bend_init handler
 */
 typedef struct bend_initrequest
 {
     /** \brief user/name/password to be read */
-    Z_IdAuthentication *auth; 
+    Z_IdAuthentication *auth;
     /** \brief encoding stream (for results) */
     ODR stream;
     /** \brief printing stream */
     ODR print;
     /** \brief decoding stream (use stream for results) */
-    ODR decode; 
+    ODR decode;
     /** \brief reference ID */
     Z_ReferenceId *referenceId;
     /** \brief peer address of client */
-    char *peer_name;           
-    
-    /** \brief character set and language negotiation 
+    char *peer_name;
 
-    see include/yaz/z-charneg.h 
+    /** \brief character set and language negotiation
+
+    see include/yaz/z-charneg.h
     */
     Z_CharSetandLanguageNegotiation *charneg_request;
 
     /** \brief character negotiation response */
     Z_External *charneg_response;
 
-    /** \brief character set (encoding) for query terms 
-        
+    /** \brief character set (encoding) for query terms
+
     This is NULL by default. It should be set to the native character
     set that the backend assumes for query terms */
-    char *query_charset;      
+    char *query_charset;
+
+    /** \brief whehter query_charset also applies to recors
 
-    /** \brief whehter query_charset also applies to recors 
-    
     Is 0 (No) by default. Set to 1 (yes) if records is in the same
     character set as queries. If in doubt, use 0 (No).
     */
@@ -335,7 +331,7 @@ typedef struct statserv_options_block
     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 */
@@ -363,12 +359,14 @@ typedef struct statserv_options_block
     int background;                 /**< auto daemon */
     char cert_fname[128];           /**< SSL certificate fname */
     char xml_config[128];           /**< XML config filename */
+    int keepalive;                  /**< keep alive if HTTP 1.1 (default: 1) */
 } statserv_options_block;
 
 YAZ_EXPORT int statserv_main(
     int argc, char **argv,
     bend_initresult *(*bend_init)(bend_initrequest *r),
     void (*bend_close)(void *handle));
+
 YAZ_EXPORT statserv_options_block *statserv_getcontrol(void);
 YAZ_EXPORT void statserv_setcontrol(statserv_options_block *block);
 YAZ_EXPORT int check_ip_tcpd(void *cd, const char *addr, int len, int type);