X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=include%2Fyaz%2Fbackend.h;h=a02e1fa6023e861da902bf06ad8f05dc103922dc;hp=10e8e0acb9ab5578f400c1a2d35da73c85a7ca65;hb=8d08fd5b79e49e14ca014de8e6bed12a2cc0468d;hpb=d9ee01635f03f9095a66f71b73580560d48798e8 diff --git a/include/yaz/backend.h b/include/yaz/backend.h index 10e8e0a..a02e1fa 100644 --- a/include/yaz/backend.h +++ b/include/yaz/backend.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995-1999, Index Data. + * Copyright (c) 1995-2001, Index Data. * * Permission to use, copy, modify, distribute, and sell this software and * its documentation, in whole or in part, for any purpose, is hereby granted, @@ -24,7 +24,41 @@ * OF THIS SOFTWARE. * * $Log: backend.h,v $ - * Revision 1.1 1999-11-30 13:47:11 adam + * Revision 1.12 2001-03-25 21:55:12 adam + * Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate. + * + * Revision 1.11 2001/01/30 21:34:17 adam + * Added step-size for Scan backend interface. + * + * Revision 1.10 2000/10/02 11:07:44 adam + * Added peer_name member for bend_init handler. Changed the YAZ + * client so that tcp: can be avoided in target spec. + * + * Revision 1.9 2000/08/31 10:20:12 adam + * Added member request_format and output_format for backend fetch method. + * + * Revision 1.8 2000/08/31 09:51:25 adam + * Added record_syntax member for fetch method (raw OID). + * + * Revision 1.7 2000/04/05 07:39:55 adam + * Added shared library support (libtool). + * + * Revision 1.6 2000/03/20 19:06:25 adam + * Added Segment request for fronend server. Work on admin for client. + * + * Revision 1.5 2000/03/15 12:59:49 adam + * Added handle member to statserv_control. + * + * Revision 1.4 2000/02/28 11:20:06 adam + * Using autoconf. New definitions: YAZ_BEGIN_CDECL/YAZ_END_CDECL. + * + * Revision 1.3 2000/01/12 14:36:07 adam + * Added printing stream (ODR) for backend functions. + * + * Revision 1.2 1999/12/16 23:36:19 adam + * Implemented ILL protocol. Minor updates ASN.1 compiler. + * + * Revision 1.1 1999/11/30 13:47:11 adam * Improved installation. Moved header files to include/yaz. * * Revision 1.28 1999/11/04 14:58:44 adam @@ -76,36 +110,12 @@ #include #include -#include -#ifdef __cplusplus -extern "C" { -#endif +YAZ_BEGIN_CDECL typedef struct request *bend_request; typedef struct association *bend_association; -/* old search request input */ -typedef struct -{ - char *setname; /* name to give to this set */ - int replace_set; /* replace set, if it already exists */ - int num_bases; /* number of databases in list */ - char **basenames; /* databases to search */ - Z_ReferenceId *referenceId;/* reference ID */ - Z_Query *query; /* query structure */ - ODR stream; /* encoding stream */ - ODR decode; /* decoding stream */ -} bend_searchrequest; - -/* old search request output */ -typedef struct -{ - int hits; /* number of hits */ - int errcode; /* 0==OK */ - char *errstring; /* system error string or NULL */ -} bend_searchresult; - /* extended search handler (rr = request response) */ typedef struct { char *setname; /* name to give to this set */ @@ -116,6 +126,7 @@ typedef struct { Z_Query *query; /* query structure */ ODR stream; /* encode stream */ ODR decode; /* decode stream */ + ODR print; /* print stream */ bend_request request; bend_association association; @@ -134,6 +145,7 @@ typedef struct { Z_ReferenceId *referenceId;/* reference ID */ Z_RecordComposition *comp; /* Formatting instructions */ ODR stream; /* encoding stream - memory source if required */ + ODR print; /* printing stream */ bend_request request; bend_association association; @@ -142,47 +154,26 @@ typedef struct { char *errstring; /* system error string or NULL */ } bend_present_rr; -YAZ_EXPORT bend_searchresult *bend_search(void *handle, bend_searchrequest *r, - int *fd); -YAZ_EXPORT int bend_searchresponse(void *handle, bend_search_rr *bsrr); - -typedef struct -{ +typedef struct bend_fetch_rr { char *setname; /* set name */ int number; /* record number */ Z_ReferenceId *referenceId;/* reference ID */ - oid_value format; /* One of the CLASS_RECSYN members */ + oid_value request_format; /* One of the CLASS_RECSYN members */ + int *request_format_raw; /* same as above (raw OID) */ Z_RecordComposition *comp; /* Formatting instructions */ ODR stream; /* encoding stream - memory source if req */ - int surrogate_flag; /* surrogate diagnostic flag (rw) */ -} bend_fetchrequest; + ODR print; /* printing stream */ -typedef struct -{ char *basename; /* name of database that provided record */ int len; /* length of record or -1 if structured */ char *record; /* record */ int last_in_set; /* is it? */ - oid_value format; /* format */ + oid_value output_format; /* format */ + int *output_format_raw; /* used instead of above if not-null */ int errcode; /* 0==success */ char *errstring; /* system error string or NULL */ -} bend_fetchresult; - -YAZ_EXPORT bend_fetchresult *bend_fetch(void *handle, bend_fetchrequest *r, - int *fd); -YAZ_EXPORT bend_fetchresult *bend_fetchresponse(void *handle); - -typedef struct -{ - int num_bases; /* number of elements in databaselist */ - char **basenames; /* databases to search */ - oid_value attributeset; - Z_ReferenceId *referenceId; /* reference ID */ - Z_AttributesPlusTerm *term; - int term_position; /* desired index of term in result list */ - int num_entries; /* number of entries requested */ - ODR stream; /* encoding stream - memory source if required */ -} bend_scanrequest; + int surrogate_flag; /* surrogate diagnostic */ +} bend_fetch_rr; struct scan_entry { char *term; /* the returned scan term */ @@ -196,16 +187,6 @@ typedef enum { BEND_SCAN_PARTIAL /* not all entries could be found */ } bend_scan_status; -typedef struct bend_scanresult -{ - int num_entries; - struct scan_entry *entries; - int term_position; - bend_scan_status status; - int errcode; - char *errstring; -} bend_scanresult; - typedef struct bend_scan_rr { int num_bases; /* number of elements in databaselist */ char **basenames; /* databases to search */ @@ -213,7 +194,9 @@ typedef struct bend_scan_rr { Z_ReferenceId *referenceId; /* reference ID */ Z_AttributesPlusTerm *term; ODR stream; /* encoding stream - memory source if required */ + ODR print; /* printing stream */ + int *step_size; /* step size */ int term_position; /* desired index of term in result list/returned */ int num_entries; /* number of entries requested/returned */ @@ -223,10 +206,6 @@ typedef struct bend_scan_rr { char *errstring; } bend_scan_rr; -YAZ_EXPORT bend_scanresult *bend_scan(void *handle, bend_scanrequest *r, - int *fd); -YAZ_EXPORT bend_scanresult *bend_scanresponse(void *handle); - /* delete handler */ typedef struct bend_delete_rr { int function; @@ -236,11 +215,9 @@ typedef struct bend_delete_rr { int delete_status; /* status for the whole operation */ int *statuses; /* status each set - indexed as setnames */ ODR stream; + ODR print; } bend_delete_rr; -/* close handler */ -YAZ_EXPORT void bend_close(void *handle); - /* sort handler */ typedef struct bend_sort_rr { @@ -249,6 +226,7 @@ typedef struct bend_sort_rr char *output_setname; Z_SortKeySpecList *sort_sequence; ODR stream; + ODR print; Z_ReferenceId *referenceId;/* reference ID */ int sort_status; @@ -256,35 +234,49 @@ typedef struct bend_sort_rr char *errstring; } bend_sort_rr; -/* extended services handler. Added in from DALI */ 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 */ + Z_TaskPackage *taskPackage; } bend_esrequest_rr; +typedef struct bend_segment_rr { + Z_Segment *segment; + ODR stream; + ODR decode; + ODR print; + bend_request request; + bend_association association; +} bend_segment_rr; + typedef struct bend_initrequest { - char *configname; Z_IdAuthentication *auth; ODR stream; /* encoding stream */ + ODR print; /* printing stream */ Z_ReferenceId *referenceId;/* reference ID */ + char *peer_name; /* dns host of peer (client) */ 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_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); } bend_initrequest; typedef struct bend_initresult @@ -294,8 +286,6 @@ typedef struct bend_initresult void *handle; /* private handle to the backend module */ } bend_initresult; -YAZ_EXPORT bend_initresult *bend_init(bend_initrequest *r); - YAZ_EXPORT void bend_request_send (bend_association a, bend_request req, Z_APDU *res); @@ -308,8 +298,50 @@ YAZ_EXPORT int bend_backend_respond (bend_association a, bend_request req); YAZ_EXPORT void bend_request_setdata(bend_request r, void *p); YAZ_EXPORT void *bend_request_getdata(bend_request r); -#ifdef __cplusplus -} -#endif +typedef struct statserv_options_block +{ + int dynamic; /* fork on incoming requests */ + int threads; /* use threads */ + int one_shot; /* one session then exit(1) */ + int 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 */ + 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 */ + char setuid[ODR_MAXNAME+1]; /* setuid to this user after binding */ + void (*bend_start)(struct statserv_options_block *p); + void (*bend_stop)(struct statserv_options_block *p); + int (*options_func)(int argc, char **argv); + int (*check_ip)(void *cd, const char *addr, int len, int type); + char daemon_name[128]; + int inetd; /* Do we use the inet deamon or not */ + + void *handle; /* Handle */ + bend_initresult *(*bend_init)(bend_initrequest *r); + void (*bend_close)(void *handle); +#ifdef WIN32 + /* We only have these members for the windows version */ + /* They seemed a bit large to have them there in general */ + char service_name[128]; /* NT Service Name */ + char app_name[128]; /* Application Name */ + char service_dependencies[128]; /* The services we are dependent on */ + char service_display_name[128]; /* The service display name */ +#endif /* WIN32 */ +} 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 int statserv_start(int argc, char **argv); +YAZ_EXPORT void statserv_closedown(void); +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); + +YAZ_END_CDECL #endif