/*
- * 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.77 2000-03-20 19:08:36 adam
+ * Revision 1.81 2001-02-14 21:42:07 adam
+ * Fixed versions as returned in INIT response.
+ *
+ * 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.
*
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)
{
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;
+#if ZMBOL
q->implementation_name = "Z'mbol Information Server";
- q->implementation_version = "Z'mbol 1.0";
+ q->implementation_version = "Z'mbol " VERSION;
+#else
+ q->implementation_name = "Zebra Information Server";
+ q->implementation_version = "Zebra " VERSION;
+#endif
logf (LOG_DEBUG, "bend_init");
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;
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;
}
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;
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)
}
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)
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");
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");
int bend_segment (void *handle, bend_segment_rr *rr)
{
ZebraHandle zh = (ZebraHandle) handle;
+ Z_Segment *segment = rr->segment;
- zebra_admin_import_segment (zh, rr->segment);
+ if (segment->num_segmentRecords)
+ zebra_admin_import_segment (zh, rr->segment);
+ else
+ zebra_admin_import_end (zh);
return 0;
}
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);
}
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);
}
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,
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);
}