00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00036 #ifndef BACKEND_H
00037 #define BACKEND_H
00038
00039 #include <yaz/yconfig.h>
00040 #include <yaz/proto.h>
00041 #include <yaz/srw.h>
00042 #include <yaz/oid_db.h>
00043
00044 YAZ_BEGIN_CDECL
00045
00046 typedef struct request *bend_request;
00047 typedef struct association *bend_association;
00048
00050 typedef struct {
00051 char *setname;
00052 int replace_set;
00053 int num_bases;
00054 char **basenames;
00055 Z_ReferenceId *referenceId;
00056 Z_Query *query;
00057 ODR stream;
00058 ODR decode;
00059 ODR print;
00060
00061 bend_request request;
00062 bend_association association;
00063 int *fd;
00064 int hits;
00065 int errcode;
00066 char *errstring;
00067 Z_OtherInformation *search_info;
00068 char *srw_sortKeys;
00069 char *srw_setname;
00070 int *srw_setnameIdleTime;
00071 int estimated_hit_count;
00072 int partial_resultset;
00073 } bend_search_rr;
00074
00076 typedef struct {
00077 char *setname;
00078 int start;
00079 int number;
00080 Odr_oid *format;
00081 Z_ReferenceId *referenceId;
00082 Z_RecordComposition *comp;
00083 ODR stream;
00084 ODR print;
00085 bend_request request;
00086 bend_association association;
00087
00088 int hits;
00089 int errcode;
00090 char *errstring;
00091 } bend_present_rr;
00092
00094 typedef struct bend_fetch_rr {
00095 char *setname;
00096 int number;
00097 Z_ReferenceId *referenceId;
00098 Odr_oid *request_format;
00099 Z_RecordComposition *comp;
00100 ODR stream;
00101 ODR print;
00102
00103 char *basename;
00104 int len;
00105 char *record;
00106 int last_in_set;
00107 Odr_oid *output_format;
00108 int errcode;
00109 char *errstring;
00110 int surrogate_flag;
00111 char *schema;
00112 } bend_fetch_rr;
00113
00115 struct scan_entry {
00116 char *term;
00117 int occurrences;
00118 int errcode;
00119 char *errstring;
00120 char *display_term;
00121 };
00122
00123 typedef enum {
00124 BEND_SCAN_SUCCESS,
00125 BEND_SCAN_PARTIAL
00126 } bend_scan_status;
00127
00129 typedef struct bend_scan_rr {
00130 int num_bases;
00131 char **basenames;
00132 Odr_oid *attributeset;
00133 Z_ReferenceId *referenceId;
00134 Z_AttributesPlusTerm *term;
00135 ODR stream;
00136 ODR print;
00137
00138 int *step_size;
00139 int term_position;
00140 int num_entries;
00141
00142
00143
00144 struct scan_entry *entries;
00145 bend_scan_status status;
00146 int errcode;
00147 char *errstring;
00148 char *scanClause;
00149 char *setname;
00150 } bend_scan_rr;
00151
00153 typedef struct bend_update_rr {
00154 int num_bases;
00155 char **basenames;
00156 Z_ReferenceId *referenceId;
00157 ODR stream;
00158 ODR print;
00159 char *operation;
00160 char *operation_status;
00161 char *record_id;
00162 Z_SRW_recordVersion *record_versions;
00163 int num_versions;
00164 char *record_packing;
00165 char *record_schema;
00166 char *record_data;
00167 char *extra_record_data;
00168 char *extra_request_data;
00169 char *extra_response_data;
00170 char *uri;
00171 char *message;
00172 char *details;
00173 } bend_update_rr;
00174
00176 typedef struct bend_delete_rr {
00177 int function;
00178 int num_setnames;
00179 char **setnames;
00180 Z_ReferenceId *referenceId;
00181 int delete_status;
00182 int *statuses;
00183 ODR stream;
00184 ODR print;
00185 } bend_delete_rr;
00186
00188 typedef struct bend_sort_rr
00189 {
00190 int num_input_setnames;
00191 char **input_setnames;
00192 char *output_setname;
00193 Z_SortKeySpecList *sort_sequence;
00194 ODR stream;
00195 ODR print;
00196 Z_ReferenceId *referenceId;
00197
00198 int sort_status;
00199 int errcode;
00200 char *errstring;
00201 } bend_sort_rr;
00202
00204 typedef struct bend_esrequest_rr
00205 {
00206 int ItemNo;
00207 Z_ExtendedServicesRequest *esr;
00208
00209 ODR stream;
00210 ODR decode;
00211 ODR print;
00212 Z_ReferenceId *referenceId;
00213 bend_request request;
00214 bend_association association;
00215 int errcode;
00216 char *errstring;
00217 Z_TaskPackage *taskPackage;
00218 } bend_esrequest_rr;
00219
00221 typedef struct bend_segment_rr {
00222 Z_Segment *segment;
00223 ODR stream;
00224 ODR decode;
00225 ODR print;
00226 bend_request request;
00227 bend_association association;
00228 } bend_segment_rr;
00229
00231 typedef struct {
00232 ODR stream;
00233 ODR decode;
00234 ODR print;
00235 char *explain_buf;
00236 char *database;
00237 char *schema;
00238 void *server_node_ptr;
00239 } bend_explain_rr;
00240
00247 typedef struct bend_initrequest
00248 {
00250 Z_IdAuthentication *auth;
00252 ODR stream;
00254 ODR print;
00256 ODR decode;
00258 Z_ReferenceId *referenceId;
00260 char *peer_name;
00261
00266 Z_CharSetandLanguageNegotiation *charneg_request;
00267
00269 Z_External *charneg_response;
00270
00275 char *query_charset;
00276
00282 int records_in_same_charset;
00283
00284 char *implementation_id;
00285 char *implementation_name;
00286 char *implementation_version;
00287
00289 int (*bend_sort)(void *handle, bend_sort_rr *rr);
00291 int (*bend_search)(void *handle, bend_search_rr *rr);
00293 int (*bend_fetch)(void *handle, bend_fetch_rr *rr);
00295 int (*bend_present)(void *handle, bend_present_rr *rr);
00297 int (*bend_esrequest) (void *handle, bend_esrequest_rr *rr);
00299 int (*bend_delete)(void *handle, bend_delete_rr *rr);
00301 int (*bend_scan)(void *handle, bend_scan_rr *rr);
00303 int (*bend_segment)(void *handle, bend_segment_rr *rr);
00305 int (*bend_explain)(void *handle, bend_explain_rr *rr);
00307 int (*bend_srw_scan)(void *handle, bend_scan_rr *rr);
00309 int (*bend_srw_update)(void *handle, bend_update_rr *rr);
00310
00311 } bend_initrequest;
00312
00314 typedef struct bend_initresult
00315 {
00316 int errcode;
00317 char *errstring;
00318 void *handle;
00319 } bend_initresult;
00320
00321 YAZ_EXPORT void bend_request_send (bend_association a, bend_request req,
00322 Z_APDU *res);
00323
00324 YAZ_EXPORT bend_request bend_request_mk (bend_association a);
00325
00326 YAZ_EXPORT void bend_request_destroy (bend_request *req);
00327
00328 YAZ_EXPORT Z_ReferenceId *bend_request_getid (ODR odr, bend_request req);
00329 YAZ_EXPORT int bend_backend_respond (bend_association a, bend_request req);
00330 YAZ_EXPORT void bend_request_setdata(bend_request r, void *p);
00331 YAZ_EXPORT void *bend_request_getdata(bend_request r);
00332
00334 typedef struct statserv_options_block
00335 {
00336 int dynamic;
00337 int threads;
00338 int one_shot;
00339 char apdufile[ODR_MAXNAME+1];
00340 char logfile[ODR_MAXNAME+1];
00341 char default_listen[1024];
00342 enum oid_proto default_proto;
00343 int idle_timeout;
00344 int maxrecordsize;
00345 char configname[ODR_MAXNAME+1];
00346 char setuid[ODR_MAXNAME+1];
00347 void (*bend_start)(struct statserv_options_block *p);
00348 void (*bend_stop)(struct statserv_options_block *p);
00349 int (*options_func)(int argc, char **argv);
00350 int (*check_ip)(void *cd, const char *addr, int len, int type);
00351 char daemon_name[128];
00352 int inetd;
00353
00354 void *handle;
00355 bend_initresult *(*bend_init)(bend_initrequest *r);
00356 void (*bend_close)(void *handle);
00357 #ifdef WIN32
00358
00359
00360 char service_name[128];
00361 char app_name[128];
00362 char service_dependencies[128];
00363 char service_display_name[128];
00364 #endif
00365 struct bend_soap_handler *soap_handlers;
00366 char pid_fname[128];
00367 int background;
00368 char cert_fname[128];
00369 char xml_config[128];
00370 } statserv_options_block;
00371
00372 YAZ_EXPORT int statserv_main(
00373 int argc, char **argv,
00374 bend_initresult *(*bend_init)(bend_initrequest *r),
00375 void (*bend_close)(void *handle));
00376 YAZ_EXPORT statserv_options_block *statserv_getcontrol(void);
00377 YAZ_EXPORT void statserv_setcontrol(statserv_options_block *block);
00378 YAZ_EXPORT int check_ip_tcpd(void *cd, const char *addr, int len, int type);
00379
00380 YAZ_EXPORT int bend_assoc_is_alive(bend_association assoc);
00381
00382 YAZ_END_CDECL
00383
00384 #endif
00385
00386
00387
00388
00389
00390
00391
00392