📄 client.c
字号:
/* see if we can find USR:SearchResult-1 */static void display_searchResult (Z_OtherInformation *o){ int i; if (!o) return ; for (i = 0; i < o->num_elements; i++) { if (o->list[i]->which == Z_OtherInfo_externallyDefinedInfo) { Z_External *ext = o->list[i]->information.externallyDefinedInfo; if (ext->which == Z_External_searchResult1) { int j; Z_SearchInfoReport *sr = ext->u.searchResult1; printf ("SearchResult-1:"); for (j = 0; j < sr->num; j++) { if (!sr->elements[j]->subqueryExpression) printf (" %d", j); display_queryExpression ( sr->elements[j]->subqueryExpression); display_queryExpression ( sr->elements[j]->subqueryInterpretation); display_queryExpression ( sr->elements[j]->subqueryRecommendation); if (sr->elements[j]->subqueryCount) printf ("(%d)", *sr->elements[j]->subqueryCount); } printf ("\n"); } } }}static int process_searchResponse(Z_SearchResponse *res){ printf ("Received SearchResponse.\n"); print_refid (res->referenceId); if (*res->searchStatus) printf("Search was a success.\n"); else printf("Search was a bloomin' failure.\n"); printf("Number of hits: %d", *res->resultCount); if (setnumber >= 0) printf (", setno %d", setnumber); printf ("\n"); display_searchResult (res->additionalSearchInfo); printf("records returned: %d\n", *res->numberOfRecordsReturned); setno += *res->numberOfRecordsReturned; if (res->records) display_records(res->records); return 0;}static void print_level(int iLevel){ int i; for (i = 0; i < iLevel * 4; i++) printf(" ");}static void print_int(int iLevel, const char *pTag, int *pInt){ if (pInt != NULL) { print_level(iLevel); printf("%s: %d\n", pTag, *pInt); }}static void print_string(int iLevel, const char *pTag, const char *pString){ if (pString != NULL) { print_level(iLevel); printf("%s: %s\n", pTag, pString); }}static void print_oid(int iLevel, const char *pTag, Odr_oid *pOid){ if (pOid != NULL) { int *pInt = pOid; print_level(iLevel); printf("%s:", pTag); for (; *pInt != -1; pInt++) printf(" %d", *pInt); printf("\n"); }}static void print_referenceId(int iLevel, Z_ReferenceId *referenceId){ if (referenceId != NULL) { int i; print_level(iLevel); printf("Ref Id (%d, %d): ", referenceId->len, referenceId->size); for (i = 0; i < referenceId->len; i++) printf("%c", referenceId->buf[i]); printf("\n"); }}static void print_string_or_numeric(int iLevel, const char *pTag, Z_StringOrNumeric *pStringNumeric){ if (pStringNumeric != NULL) { switch (pStringNumeric->which) { case Z_StringOrNumeric_string: print_string(iLevel, pTag, pStringNumeric->u.string); break; case Z_StringOrNumeric_numeric: print_int(iLevel, pTag, pStringNumeric->u.numeric); break; default: print_level(iLevel); printf("%s: valid type for Z_StringOrNumeric\n", pTag); break; } }}static void print_universe_report_duplicate( int iLevel, Z_UniverseReportDuplicate *pUniverseReportDuplicate){ if (pUniverseReportDuplicate != NULL) { print_level(iLevel); printf("Universe Report Duplicate: \n"); iLevel++; print_string_or_numeric(iLevel, "Hit No", pUniverseReportDuplicate->hitno); }}static void print_universe_report_hits( int iLevel, Z_UniverseReportHits *pUniverseReportHits){ if (pUniverseReportHits != NULL) { print_level(iLevel); printf("Universe Report Hits: \n"); iLevel++; print_string_or_numeric(iLevel, "Database", pUniverseReportHits->database); print_string_or_numeric(iLevel, "Hits", pUniverseReportHits->hits); }}static void print_universe_report(int iLevel, Z_UniverseReport *pUniverseReport){ if (pUniverseReport != NULL) { print_level(iLevel); printf("Universe Report: \n"); iLevel++; print_int(iLevel, "Total Hits", pUniverseReport->totalHits); switch (pUniverseReport->which) { case Z_UniverseReport_databaseHits: print_universe_report_hits(iLevel, pUniverseReport->u.databaseHits); break; case Z_UniverseReport_duplicate: print_universe_report_duplicate(iLevel, pUniverseReport->u.duplicate); break; default: print_level(iLevel); printf("Type: %d\n", pUniverseReport->which); break; } }}static void print_external(int iLevel, Z_External *pExternal){ if (pExternal != NULL) { print_level(iLevel); printf("External: \n"); iLevel++; print_oid(iLevel, "Direct Reference", pExternal->direct_reference); print_int(iLevel, "InDirect Reference", pExternal->indirect_reference); print_string(iLevel, "Descriptor", pExternal->descriptor); switch (pExternal->which) { case Z_External_universeReport: print_universe_report(iLevel, pExternal->u.universeReport); break; default: print_level(iLevel); printf("Type: %d\n", pExternal->which); break; } }}static int process_resourceControlRequest (Z_ResourceControlRequest *req){ printf ("Received ResourceControlRequest.\n"); print_referenceId(1, req->referenceId); print_int(1, "Suspended Flag", req->suspendedFlag); print_int(1, "Partial Results Available", req->partialResultsAvailable); print_int(1, "Response Required", req->responseRequired); print_int(1, "Triggered Request Flag", req->triggeredRequestFlag); print_external(1, req->resourceReport); return 0;}void process_ESResponse(Z_ExtendedServicesResponse *res){ printf("Status: "); switch (*res->operationStatus) { case Z_ExtendedServicesResponse_done: printf ("done\n"); break; case Z_ExtendedServicesResponse_accepted: printf ("accepted\n"); break; case Z_ExtendedServicesResponse_failure: printf ("failure\n"); display_diagrecs(res->diagnostics, res->num_diagnostics); break; default: printf ("unknown\n"); } if ( (*res->operationStatus != Z_ExtendedServicesResponse_failure) && (res->num_diagnostics != 0) ) { display_diagrecs(res->diagnostics, res->num_diagnostics); } print_refid (res->referenceId); if (res->taskPackage && res->taskPackage->which == Z_External_extendedService) { Z_TaskPackage *taskPackage = res->taskPackage->u.extendedService; Odr_oct *id = taskPackage->targetReference; Z_External *ext = taskPackage->taskSpecificParameters; if (id) { printf ("Target Reference: "); print_stringn (id->buf, id->len); printf ("\n"); } if (ext->which == Z_External_update) { Z_IUUpdateTaskPackage *utp = ext->u.update->u.taskPackage; if (utp && utp->targetPart) { Z_IUTargetPart *targetPart = utp->targetPart; int i; for (i = 0; i<targetPart->num_taskPackageRecords; i++) { Z_IUTaskPackageRecordStructure *tpr = targetPart->taskPackageRecords[i]; printf ("task package record %d\n", i+1); if (tpr->which == Z_IUTaskPackageRecordStructure_record) { display_record (tpr->u.record); } else { printf ("other type\n"); } } } } }}const char *get_ill_element (void *clientData, const char *element){ return 0;}static Z_External *create_external_itemRequest(){ struct ill_get_ctl ctl; ILL_ItemRequest *req; Z_External *r = 0; int item_request_size = 0; char *item_request_buf = 0; ctl.odr = out; ctl.clientData = 0; ctl.f = get_ill_element; req = ill_get_ItemRequest(&ctl, "ill", 0); if (!req) printf ("ill_get_ItemRequest failed\n"); if (!ill_ItemRequest (out, &req, 0, 0)) { if (apdu_file) { ill_ItemRequest(print, &req, 0, 0); odr_reset(print); } item_request_buf = odr_getbuf (out, &item_request_size, 0); if (item_request_buf) odr_setbuf (out, item_request_buf, item_request_size, 1); printf ("Couldn't encode ItemRequest, size %d\n", item_request_size); return 0; } else { oident oid; item_request_buf = odr_getbuf (out, &item_request_size, 0); oid.proto = PROTO_GENERAL; oid.oclass = CLASS_GENERAL; oid.value = VAL_ISO_ILL_1; r = (Z_External *) odr_malloc (out, sizeof(*r)); r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid)); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_single; r->u.single_ASN1_type = (Odr_oct *) odr_malloc (out, sizeof(*r->u.single_ASN1_type)); r->u.single_ASN1_type->buf = (unsigned char *) odr_malloc (out, item_request_size); r->u.single_ASN1_type->len = item_request_size; r->u.single_ASN1_type->size = item_request_size; memcpy (r->u.single_ASN1_type->buf, item_request_buf, item_request_size); do_hex_dump(item_request_buf,item_request_size); } return r;}static Z_External *create_external_ILL_APDU(int which){ struct ill_get_ctl ctl; ILL_APDU *ill_apdu; Z_External *r = 0; int ill_request_size = 0; char *ill_request_buf = 0; ctl.odr = out; ctl.clientData = 0; ctl.f = get_ill_element; ill_apdu = ill_get_APDU(&ctl, "ill", 0); if (!ill_APDU (out, &ill_apdu, 0, 0)) { if (apdu_file) { printf ("-------------------\n"); ill_APDU(print, &ill_apdu, 0, 0); odr_reset(print); printf ("-------------------\n"); } ill_request_buf = odr_getbuf (out, &ill_request_size, 0); if (ill_request_buf) odr_setbuf (out, ill_request_buf, ill_request_size, 1); printf ("Couldn't encode ILL-Request, size %d\n", ill_request_size); return 0; } else { oident oid; ill_request_buf = odr_getbuf (out, &ill_request_size, 0); oid.proto = PROTO_GENERAL; oid.oclass = CLASS_GENERAL; oid.value = VAL_ISO_ILL_1; r = (Z_External *) odr_malloc (out, sizeof(*r)); r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid)); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_single; r->u.single_ASN1_type = (Odr_oct *) odr_malloc (out, sizeof(*r->u.single_ASN1_type)); r->u.single_ASN1_type->buf = (unsigned char *) odr_malloc (out, ill_request_size); r->u.single_ASN1_type->len = ill_request_size; r->u.single_ASN1_type->size = ill_request_size; memcpy (r->u.single_ASN1_type->buf, ill_request_buf, ill_request_size);/* printf ("len = %d\n", ill_request_size); *//* do_hex_dump(ill_request_buf,ill_request_size); *//* printf("--- end of extenal\n"); */ } return r;}static Z_External *create_ItemOrderExternal(const char *type, int itemno){ Z_External *r = (Z_External *) odr_malloc(out, sizeof(Z_External)); oident ItemOrderRequest; ItemOrderRequest.proto = PROTO_Z3950; ItemOrderRequest.oclass = CLASS_EXTSERV; ItemOrderRequest.value = VAL_ITEMORDER; r->direct_reference = odr_oiddup(out,oid_getoidbyent(&ItemOrderRequest)); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_itemOrder; r->u.itemOrder = (Z_ItemOrder *) odr_malloc(out,sizeof(Z_ItemOrder)); memset(r->u.itemOrder, 0, sizeof(Z_ItemOrder)); r->u.itemOrder->which=Z_IOItemOrder_esRequest; r->u.itemOrder->u.esRequest = (Z_IORequest *) odr_malloc(out,sizeof(Z_IORequest)); memset(r->u.itemOrder->u.esRequest, 0, sizeof(Z_IORequest)); r->u.itemOrder->u.esRequest->toKeep = (Z_IOOriginPartToKeep *) odr_malloc(out,sizeof(Z_IOOriginPartToKeep)); memset(r->u.itemOrder->u.esRequest->toKeep, 0, sizeof(Z_IOOriginPartToKeep)); r->u.itemOrder->u.esRequest->notToKeep = (Z_IOOriginPartNotToKeep *) odr_malloc(out,sizeof(Z_IOOriginPartNotToKeep)); memset(r->u.itemOrder->u.esRequest->notToKeep, 0, sizeof(Z_IOOriginPartNotToKeep)); r->u.itemOrder->u.esRequest->toKeep->supplDescription = NULL; r->u.itemOrder->u.esRequest->toKeep->contact = NULL; r->u.itemOrder->u.esRequest->toKeep->addlBilling = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -