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 association *bend_association;
00047
00054 typedef struct {
00055 char *setname;
00056 int replace_set;
00057 int num_bases;
00058 char **basenames;
00059 Z_ReferenceId *referenceId;
00060 Z_Query *query;
00061 ODR stream;
00062 ODR decode;
00063 ODR print;
00065 bend_association association;
00066 Odr_int hits;
00067 int errcode;
00068 char *errstring;
00069 Z_OtherInformation *search_info;
00070 char *srw_sortKeys;
00071 char *srw_setname;
00072 int *srw_setnameIdleTime;
00073 int estimated_hit_count;
00074 int partial_resultset;
00075 Z_SRW_extra_arg *extra_args;
00076 char *extra_response_data;
00077 } bend_search_rr;
00078
00080 typedef struct {
00081 char *setname;
00082 int start;
00083 int number;
00084 Odr_oid *format;
00085 Z_ReferenceId *referenceId;
00086 Z_RecordComposition *comp;
00087 ODR stream;
00088 ODR print;
00089 bend_association association;
00091 int errcode;
00092 char *errstring;
00093 } bend_present_rr;
00094
00096 typedef struct bend_fetch_rr {
00097 char *setname;
00098 int number;
00099 Z_ReferenceId *referenceId;
00100 Odr_oid *request_format;
00101 Z_RecordComposition *comp;
00102 ODR stream;
00103 ODR print;
00105 char *basename;
00106 int len;
00107 char *record;
00108 int last_in_set;
00109 Odr_oid *output_format;
00110 int errcode;
00111 char *errstring;
00112 int surrogate_flag;
00113 char *schema;
00114 } bend_fetch_rr;
00115
00117 struct scan_entry {
00118 char *term;
00119 Odr_int occurrences;
00120 int errcode;
00121 char *errstring;
00122 char *display_term;
00123 };
00124
00125 typedef enum {
00126 BEND_SCAN_SUCCESS,
00127 BEND_SCAN_PARTIAL
00128 } bend_scan_status;
00129
00131 typedef struct bend_scan_rr {
00132 int num_bases;
00133 char **basenames;
00134 Odr_oid *attributeset;
00135 Z_ReferenceId *referenceId;
00136 Z_AttributesPlusTerm *term;
00137 ODR stream;
00138 ODR print;
00140 int *step_size;
00141 int term_position;
00142 int num_entries;
00144
00145
00146 struct scan_entry *entries;
00147 bend_scan_status status;
00148 int errcode;
00149 char *errstring;
00150 char *scanClause;
00151 char *setname;
00152 } bend_scan_rr;
00153
00155 typedef struct bend_update_rr {
00156 int num_bases;
00157 char **basenames;
00158 Z_ReferenceId *referenceId;
00159 ODR stream;
00160 ODR print;
00161 char *operation;
00162 char *operation_status;
00163 char *record_id;
00164 Z_SRW_recordVersion *record_versions;
00165 int num_versions;
00166 char *record_packing;
00167 char *record_schema;
00168 char *record_data;
00169 char *extra_record_data;
00170 char *extra_request_data;
00171 char *extra_response_data;
00172 char *uri;
00173 char *message;
00174 char *details;
00175 } bend_update_rr;
00176
00178 typedef struct bend_delete_rr {
00179 int function;
00180 int num_setnames;
00181 char **setnames;
00182 Z_ReferenceId *referenceId;
00183 int delete_status;
00184 int *statuses;
00185 ODR stream;
00186 ODR print;
00187 } bend_delete_rr;
00188
00190 typedef struct bend_sort_rr
00191 {
00192 int num_input_setnames;
00193 char **input_setnames;
00194 char *output_setname;
00195 Z_SortKeySpecList *sort_sequence;
00196 ODR stream;
00197 ODR print;
00198 Z_ReferenceId *referenceId;
00199
00200 int sort_status;
00201 int errcode;
00202 char *errstring;
00203 } bend_sort_rr;
00204
00206 typedef struct bend_esrequest_rr
00207 {
00208 int ItemNo;
00209 Z_ExtendedServicesRequest *esr;
00210
00211 ODR stream;
00212 ODR decode;
00213 ODR print;
00214 Z_ReferenceId *referenceId;
00215 bend_association association;
00216 int errcode;
00217 char *errstring;
00218 Z_TaskPackage *taskPackage;
00219 } bend_esrequest_rr;
00220
00222 typedef struct bend_segment_rr {
00223 Z_Segment *segment;
00224 ODR stream;
00225 ODR decode;
00226 ODR print;
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
00312 int named_result_sets;
00313 } bend_initrequest;
00314
00316 typedef struct bend_initresult
00317 {
00318 int errcode;
00319 char *errstring;
00320 void *handle;
00321 } bend_initresult;
00322
00324 typedef struct statserv_options_block
00325 {
00326 int dynamic;
00327 int threads;
00328 int one_shot;
00329 char apdufile[ODR_MAXNAME+1];
00330 char logfile[ODR_MAXNAME+1];
00331 char default_listen[1024];
00332 enum oid_proto default_proto;
00333 int idle_timeout;
00334 int maxrecordsize;
00335 char configname[ODR_MAXNAME+1];
00336 char setuid[ODR_MAXNAME+1];
00337 void (*bend_start)(struct statserv_options_block *p);
00338 void (*bend_stop)(struct statserv_options_block *p);
00339 int (*options_func)(int argc, char **argv);
00340 int (*check_ip)(void *cd, const char *addr, int len, int type);
00341 char daemon_name[128];
00342 int inetd;
00344 void *handle;
00345 bend_initresult *(*bend_init)(bend_initrequest *r);
00346 void (*bend_close)(void *handle);
00347 #ifdef WIN32
00348
00349
00350 char service_name[128];
00351 char app_name[128];
00352 char service_dependencies[128];
00353 char service_display_name[128];
00354 #endif
00355 struct bend_soap_handler *soap_handlers;
00356 char pid_fname[128];
00357 int background;
00358 char cert_fname[128];
00359 char xml_config[128];
00360 } statserv_options_block;
00361
00362 YAZ_EXPORT int statserv_main(
00363 int argc, char **argv,
00364 bend_initresult *(*bend_init)(bend_initrequest *r),
00365 void (*bend_close)(void *handle));
00366
00367 YAZ_EXPORT statserv_options_block *statserv_getcontrol(void);
00368 YAZ_EXPORT void statserv_setcontrol(statserv_options_block *block);
00369 YAZ_EXPORT int check_ip_tcpd(void *cd, const char *addr, int len, int type);
00370
00371 YAZ_EXPORT int bend_assoc_is_alive(bend_association assoc);
00372
00373 YAZ_END_CDECL
00374
00375 #endif
00376
00377
00378
00379
00380
00381
00382
00383
00384