X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzserver.c;h=0509ecb27d6f79e9bfa16d72943cec9d911763d8;hb=1ccf2613ceef2359f589cb3dd7e72a899c618b2f;hp=9afe88a5130aeaae1d24a0b2cea95cc7aef2e14e;hpb=eb2b742588ce07fb4516bbca22c93b938b13e433;p=idzebra-moved-to-github.git diff --git a/index/zserver.c b/index/zserver.c index 9afe88a..0509ecb 100644 --- a/index/zserver.c +++ b/index/zserver.c @@ -1,10 +1,22 @@ /* - * Copyright (C) 1995-1999, Index Data + * Copyright (C) 1995-2000, Index Data * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss * * $Log: zserver.c,v $ - * Revision 1.76 2000-03-15 15:00:31 adam + * Revision 1.80 2000-09-05 14:04:05 adam + * Updates for prefix 'yaz_' for YAZ log functions. + * + * Revision 1.79 2000/05/09 10:56:50 adam + * Added call to xmalloc/nmem debugging functions. + * + * Revision 1.78 2000/04/05 09:49:35 adam + * On Unix, zebra/z'mbol uses automake. + * + * Revision 1.77 2000/03/20 19:08:36 adam + * Added remote record import using Z39.50 extended services and Segment + * Requests. + * + * Revision 1.76 2000/03/15 15:00:31 adam * First work on threaded version. * * Revision 1.75 1999/11/30 13:48:04 adam @@ -295,6 +307,10 @@ static int bend_sort (void *handle, bend_sort_rr *rr); static int bend_delete (void *handle, bend_delete_rr *rr); static int bend_esrequest (void *handle, bend_esrequest_rr *rr); +static int bend_segment (void *handle, bend_segment_rr *rr); +static int bend_search (void *handle, bend_search_rr *r); +static int bend_fetch (void *handle, bend_fetch_rr *r); +static int bend_scan (void *handle, bend_scan_rr *r); bend_initresult *bend_init (bend_initrequest *q) { @@ -310,6 +326,10 @@ bend_initresult *bend_init (bend_initrequest *q) q->bend_sort = bend_sort; q->bend_delete = bend_delete; q->bend_esrequest = bend_esrequest; + q->bend_segment = bend_segment; + q->bend_search = bend_search; + q->bend_fetch = bend_fetch; + q->bend_scan = bend_scan; q->implementation_name = "Z'mbol Information Server"; q->implementation_version = "Z'mbol 1.0"; @@ -349,22 +369,20 @@ bend_initresult *bend_init (bend_initrequest *q) return r; } -bend_searchresult *bend_search (void *handle, bend_searchrequest *q, int *fd) +int bend_search (void *handle, bend_search_rr *r) { ZebraHandle zh = (ZebraHandle) handle; - bend_searchresult *r = (bend_searchresult *) - odr_malloc (q->stream, sizeof(*r)); r->hits = 0; r->errcode = 0; r->errstring = NULL; - logf (LOG_LOG, "ResultSet '%s'", q->setname); - switch (q->query->which) + logf (LOG_LOG, "ResultSet '%s'", r->setname); + switch (r->query->which) { case Z_Query_type_1: case Z_Query_type_101: - zebra_search_rpn (zh, q->decode, q->stream, q->query->u.type_1, - q->num_bases, q->basenames, q->setname); + zebra_search_rpn (zh, r->decode, r->stream, r->query->u.type_1, + r->num_bases, r->basenames, r->setname); r->errcode = zh->errCode; r->errstring = zh->errString; r->hits = zh->hits; @@ -376,21 +394,19 @@ bend_searchresult *bend_search (void *handle, bend_searchrequest *q, int *fd) default: r->errcode = 107; } - return r; + return 0; } -bend_fetchresult *bend_fetch (void *handle, bend_fetchrequest *q, int *num) +int bend_fetch (void *handle, bend_fetch_rr *r) { ZebraHandle zh = (ZebraHandle) handle; - bend_fetchresult *r = (bend_fetchresult *) - odr_malloc (q->stream, sizeof(*r)); ZebraRetrievalRecord retrievalRecord; - retrievalRecord.position = q->number; + retrievalRecord.position = r->number; r->last_in_set = 0; - zebra_records_retrieve (zh, q->stream, q->setname, q->comp, - q->format, 1, &retrievalRecord); + zebra_records_retrieve (zh, r->stream, r->setname, r->comp, + r->request_format, 1, &retrievalRecord); if (zh->errCode) /* non Surrogate Diagnostic */ { r->errcode = zh->errCode; @@ -398,7 +414,7 @@ bend_fetchresult *bend_fetch (void *handle, bend_fetchrequest *q, int *num) } else if (retrievalRecord.errCode) /* Surrogate Diagnostic */ { - q->surrogate_flag = 1; + r->surrogate_flag = 1; r->errcode = retrievalRecord.errCode; r->errstring = retrievalRecord.errString; r->basename = retrievalRecord.base; @@ -409,27 +425,22 @@ bend_fetchresult *bend_fetch (void *handle, bend_fetchrequest *q, int *num) r->basename = retrievalRecord.base; r->record = retrievalRecord.buf; r->len = retrievalRecord.len; - r->format = retrievalRecord.format; + r->output_format = retrievalRecord.format; } - return r; + return 0; } -bend_scanresult *bend_scan (void *handle, bend_scanrequest *q, int *num) +static int bend_scan (void *handle, bend_scan_rr *r) { ZebraScanEntry *entries; ZebraHandle zh = (ZebraHandle) handle; - bend_scanresult *r = (bend_scanresult *) - odr_malloc (q->stream, sizeof(*r)); int is_partial, i; - r->term_position = q->term_position; - r->num_entries = q->num_entries; - r->entries = (struct scan_entry *) - odr_malloc (q->stream, sizeof(*r->entries) * q->num_entries); - zebra_scan (zh, q->stream, q->term, - q->attributeset, - q->num_bases, q->basenames, + odr_malloc (r->stream, sizeof(*r->entries) * r->num_entries); + zebra_scan (zh, r->stream, r->term, + r->attributeset, + r->num_bases, r->basenames, &r->term_position, &r->num_entries, &entries, &is_partial); if (is_partial) @@ -443,12 +454,14 @@ bend_scanresult *bend_scan (void *handle, bend_scanrequest *q, int *num) } r->errcode = zh->errCode; r->errstring = zh->errString; - return r; + return 0; } void bend_close (void *handle) { zebra_close ((ZebraHandle) handle); + xmalloc_trav("bend_close"); + nmem_print_list(); } int bend_sort (void *handle, bend_sort_rr *rr) @@ -483,8 +496,8 @@ static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) case Z_ESAdminOriginPartToKeep_truncate: yaz_log(LOG_LOG, "adm-truncate"); break; - case Z_ESAdminOriginPartToKeep_delete: - yaz_log(LOG_LOG, "adm-delete"); + case Z_ESAdminOriginPartToKeep_drop: + yaz_log(LOG_LOG, "adm-drop"); break; case Z_ESAdminOriginPartToKeep_create: yaz_log(LOG_LOG, "adm-create"); @@ -492,6 +505,7 @@ static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) break; case Z_ESAdminOriginPartToKeep_import: yaz_log(LOG_LOG, "adm-import"); + zebra_admin_import_begin (zh, r->toKeep->databaseName); break; case Z_ESAdminOriginPartToKeep_refresh: yaz_log(LOG_LOG, "adm-refresh"); @@ -499,6 +513,14 @@ static int es_admin_request (ZebraHandle zh, Z_AdminEsRequest *r) case Z_ESAdminOriginPartToKeep_commit: yaz_log(LOG_LOG, "adm-commit"); break; + case Z_ESAdminOriginPartToKeep_shutdown: + yaz_log(LOG_LOG, "shutdown"); + zebra_admin_shutdown(zh); + break; + case Z_ESAdminOriginPartToKeep_start: + yaz_log(LOG_LOG, "start"); + zebra_admin_start(zh); + break; default: yaz_log(LOG_LOG, "unknown admin"); zh->errCode = 1001; @@ -528,6 +550,18 @@ static int es_admin (ZebraHandle zh, Z_Admin *r) return 0; } +int bend_segment (void *handle, bend_segment_rr *rr) +{ + ZebraHandle zh = (ZebraHandle) handle; + Z_Segment *segment = rr->segment; + + if (segment->num_segmentRecords) + zebra_admin_import_segment (zh, rr->segment); + else + zebra_admin_import_end (zh); + return 0; +} + int bend_esrequest (void *handle, bend_esrequest_rr *rr) { ZebraHandle zh = (ZebraHandle) handle; @@ -610,7 +644,7 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) odr_errmsg(odr_geterror(rr->decode)), odr_offset(rr->decode)); yaz_log(LOG_LOG, "PDU dump:"); - odr_dumpBER(log_file(), + odr_dumpBER(yaz_log_file(), r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len); } @@ -635,7 +669,7 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) odr_errmsg(odr_geterror(rr->decode)), odr_offset(rr->decode)); yaz_log(LOG_LOG, "PDU dump:"); - odr_dumpBER(log_file(), + odr_dumpBER(yaz_log_file(), r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len); } @@ -675,19 +709,25 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) switch (*toKeep->action) { case Z_IUOriginPartToKeep_recordInsert: - yaz_log (LOG_LOG, " recordInsert"); + yaz_log (LOG_LOG, "recordInsert"); break; case Z_IUOriginPartToKeep_recordReplace: - yaz_log (LOG_LOG, " recordUpdate"); + yaz_log (LOG_LOG, "recordUpdate"); break; case Z_IUOriginPartToKeep_recordDelete: - yaz_log (LOG_LOG, " recordDelete"); + yaz_log (LOG_LOG, "recordDelete"); break; case Z_IUOriginPartToKeep_elementUpdate: - yaz_log (LOG_LOG, " elementUpdate"); + yaz_log (LOG_LOG, "elementUpdate"); break; case Z_IUOriginPartToKeep_specialUpdate: - yaz_log (LOG_LOG, " specialUpdate"); + yaz_log (LOG_LOG, "specialUpdate"); + break; + case Z_ESAdminOriginPartToKeep_shutdown: + yaz_log (LOG_LOG, "shutDown"); + break; + case Z_ESAdminOriginPartToKeep_start: + yaz_log (LOG_LOG, "start"); break; default: yaz_log (LOG_LOG, " unknown (%d)", *toKeep->action); @@ -731,7 +771,7 @@ int bend_esrequest (void *handle, bend_esrequest_rr *rr) rec->u.sutrs->len, rec->u.sutrs->buf); break; - case Z_External_octet : + case Z_External_octet: if (rec->u.octet_aligned->len > 170) yaz_log (LOG_LOG, "%d bytes:\n%.168s ...", rec->u.octet_aligned->len, @@ -783,8 +823,10 @@ static void bend_start (struct statserv_options_block *sob) static void bend_stop(struct statserv_options_block *sob) { if (sob->handle) - zebra_stop(sob->handle); - sob->handle = 0; + { + ZebraService service = sob->handle; + zebra_stop(service); + } } int main (int argc, char **argv) @@ -796,12 +838,7 @@ int main (int argc, char **argv) sob->bend_start = bend_start; sob->bend_stop = bend_stop; - if (sob->dynamic) - { - sob->dynamic = 0; - sob->threads = 1; - } statserv_setcontrol (sob); - return statserv_main (argc, argv); + return statserv_main (argc, argv, bend_init, bend_close); }