⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.c

📁 harvest是一个下载html网页得机器人
💻 C
📖 第 1 页 / 共 5 页
字号:
/* 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 + -