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

📄 ztest.c

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