📄 ztest.c
字号:
targetPart->globalDiagnostics = (Z_DiagRec **) odr_nullval(); targetPart->num_taskPackageRecords = 1; targetPart->taskPackageRecords = (Z_IUTaskPackageRecordStructure **) odr_malloc (rr->stream, sizeof(Z_IUTaskPackageRecordStructure *)); targetPart->taskPackageRecords[0] = (Z_IUTaskPackageRecordStructure *) odr_malloc (rr->stream, sizeof(Z_IUTaskPackageRecordStructure)); targetPart->taskPackageRecords[0]->which = Z_IUTaskPackageRecordStructure_record; targetPart->taskPackageRecords[0]->u.record = z_ext_record (rr->stream, VAL_SUTRS, "test", 4); targetPart->taskPackageRecords[0]->correlationInfo = 0; targetPart->taskPackageRecords[0]->recordStatus = odr_intdup (rr->stream, Z_IUTaskPackageRecordStructure_success); targetPart->taskPackageRecords[0]->num_supplementalDiagnostics = 0; targetPart->taskPackageRecords[0]->supplementalDiagnostics = 0; } if (notToKeep) { int i; for (i = 0; i < notToKeep->num; i++) { Z_External *rec = notToKeep->elements[i]->record; if (rec->direct_reference) { struct oident *oident; oident = oid_getentbyoid(rec->direct_reference); if (oident) yaz_log (LOG_LOG, "record %d type %s", i, oident->desc); } switch (rec->which) { case Z_External_sutrs: if (rec->u.octet_aligned->len > 170) yaz_log (LOG_LOG, "%d bytes:\n%.168s ...", rec->u.sutrs->len, rec->u.sutrs->buf); else yaz_log (LOG_LOG, "%d bytes:\n%s", rec->u.sutrs->len, rec->u.sutrs->buf); break; case Z_External_octet : if (rec->u.octet_aligned->len > 170) yaz_log (LOG_LOG, "%d bytes:\n%.168s ...", rec->u.octet_aligned->len, rec->u.octet_aligned->buf); else yaz_log (LOG_LOG, "%d bytes\n%s", rec->u.octet_aligned->len, rec->u.octet_aligned->buf); } } } } } else if (rr->esr->taskSpecificParameters->which == Z_External_update0) { yaz_log(LOG_LOG, "Received DB Update (version 0)"); } else { yaz_log (LOG_WARN, "Unknown Extended Service(%d)", rr->esr->taskSpecificParameters->which); } return 0;}/* result set delete */int ztest_delete (void *handle, bend_delete_rr *rr){ if (rr->num_setnames == 1 && !strcmp (rr->setnames[0], "1")) rr->delete_status = Z_DeleteStatus_success; else rr->delete_status = Z_DeleteStatus_resultSetDidNotExist; return 0;}/* Our sort handler really doesn't sort... */int ztest_sort (void *handle, bend_sort_rr *rr){ rr->errcode = 0; rr->sort_status = Z_SortStatus_success; return 0;}/* present request handler */int ztest_present (void *handle, bend_present_rr *rr){ return 0;}/* retrieval of a single record (present, and piggy back search) */int ztest_fetch(void *handle, bend_fetch_rr *r){ char *cp; r->errstring = 0; r->last_in_set = 0; r->basename = "Default"; r->output_format = r->request_format; if (r->request_format == VAL_SUTRS) { /* this section returns a small record */ char buf[100]; sprintf(buf, "This is dummy SUTRS record number %d\n", r->number); r->len = strlen(buf); r->record = (char *) odr_malloc (r->stream, r->len+1); strcpy(r->record, buf); } else if (r->request_format == VAL_GRS1) { r->len = -1; r->record = (char*) dummy_grs_record(r->number, r->stream); if (!r->record) { r->errcode = 13; return 0; } } else if (r->request_format == VAL_POSTSCRIPT) { char fname[20]; FILE *f; long size; sprintf (fname, "part.%d.ps", r->number); f = fopen(fname, "rb"); if (!f) { r->errcode = 13; return 0; } fseek (f, 0L, SEEK_END); size = ftell (f); if (size <= 0 || size >= 5000000) { r->errcode = 14; return 0; } fseek (f, 0L, SEEK_SET); r->record = (char*) odr_malloc (r->stream, size); r->len = size; r->output_format = VAL_POSTSCRIPT; fread (r->record, size, 1, f); fclose (f); } else if (r->request_format == VAL_TEXT_XML && (cp = dummy_xml_record (r->number, r->stream))) { r->len = strlen(cp); r->record = cp; r->output_format = VAL_TEXT_XML; } else if ((cp = dummy_marc_record(r->number, r->stream))) { r->len = strlen(cp); r->record = cp; r->output_format = VAL_USMARC; } else { r->errcode = 13; return 0; } r->errcode = 0; return 0;}/* * silly dummy-scan what reads words from a file. */int ztest_scan(void *handle, bend_scan_rr *q){ static FILE *f = 0; static struct scan_entry list[200]; static char entries[200][80]; int hits[200]; char term[80], *p; int i, pos; int term_position_req = q->term_position; int num_entries_req = q->num_entries; q->errcode = 0; q->errstring = 0; q->entries = list; q->status = BEND_SCAN_SUCCESS; if (!f && !(f = fopen("dummy-words", "r"))) { perror("dummy-words"); exit(1); } if (q->term->term->which != Z_Term_general) { q->errcode = 229; /* unsupported term type */ return 0; } if (*q->step_size != 0) { q->errcode = 205; /*Only zero step size supported for Scan */ return 0; } if (q->term->term->u.general->len >= 80) { q->errcode = 11; /* term too long */ return 0; } if (q->num_entries > 200) { q->errcode = 31; return 0; } memcpy(term, q->term->term->u.general->buf, q->term->term->u.general->len); term[q->term->term->u.general->len] = '\0'; for (p = term; *p; p++) if (islower(*p)) *p = toupper(*p); fseek(f, 0, SEEK_SET); q->num_entries = 0; for (i = 0, pos = 0; fscanf(f, " %79[^:]:%d", entries[pos], &hits[pos]) == 2; i++, pos < 199 ? pos++ : (pos = 0)) { if (!q->num_entries && strcmp(entries[pos], term) >= 0) /* s-point fnd */ { if ((q->term_position = term_position_req) > i + 1) { q->term_position = i + 1; q->status = BEND_SCAN_PARTIAL; } for (; q->num_entries < q->term_position; q->num_entries++) { int po; po = pos - q->term_position + q->num_entries+1; /* find pos */ if (po < 0) po += 200; if (!strcmp (term, "SD") && q->num_entries == 2) { list[q->num_entries].term = entries[pos]; list[q->num_entries].occurrences = -1; list[q->num_entries].errcode = 233; list[q->num_entries].errstring = "SD for Scan Term"; } else { list[q->num_entries].term = entries[po]; list[q->num_entries].occurrences = hits[po]; } } } else if (q->num_entries) { list[q->num_entries].term = entries[pos]; list[q->num_entries].occurrences = hits[pos]; q->num_entries++; } if (q->num_entries >= num_entries_req) break; } if (feof(f)) q->status = BEND_SCAN_PARTIAL; return 0;}static int ztest_explain(void *handle, bend_explain_rr *rr){ rr->explain_buf = "<explain>\n" "\t<serverInfo>\n" "\t\t<host>localhost</host>\n" "\t\t<port>210</port>\n" "\t</serverInfo>\n" "</explain>\n"; return 0;}bend_initresult *bend_init(bend_initrequest *q){ bend_initresult *r = (bend_initresult *) odr_malloc (q->stream, sizeof(*r)); int *counter = (int *) xmalloc (sizeof(int)); *counter = 0; r->errcode = 0; r->errstring = 0; r->handle = counter; /* user handle, in this case a simple int */ q->bend_sort = ztest_sort; /* register sort handler */ q->bend_search = ztest_search; /* register search handler */ q->bend_present = ztest_present; /* register present handle */ q->bend_esrequest = ztest_esrequest; q->bend_delete = ztest_delete; q->bend_fetch = ztest_fetch; q->bend_scan = ztest_scan; q->bend_explain = ztest_explain; return r;}void bend_close(void *handle){ xfree (handle); /* release our user-defined handle */ return;}int main(int argc, char **argv){ return statserv_main(argc, argv, bend_init, bend_close);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -