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

📄 query_man.c

📁 harvest是一个下载html网页得机器人
💻 C
📖 第 1 页 / 共 2 页
字号:
{	if (qptr) {		switch (qptr->type) {		case LOGICAL:		Debug (75, 4, ("node is LOGICAL; llist=%x  rlist=%x\n",			qptr->llist, qptr->rlist));			if (qptr->rlist)				QM_free_qlist((qlist_t *) qptr->rlist);			if (qptr->llist)				QM_free_qlist((qlist_t *) qptr->llist);			break;		case FUNCTION:		Debug (75, 4, ("node is FUNCTION; llist=%x  rlist=%x\n",			qptr->llist, qptr->rlist));			if (qptr->rlist)				QM_free_args((arg_t *) qptr->rlist);			if (qptr->llist)				QM_free_qlist((qlist_t *) qptr->llist);			break;		case SELECT:		Debug (75, 4, ("node is SELECT; llist=%x  rlist=%x\n",			qptr->llist, qptr->rlist));			if (qptr->rlist) {				xfree(qptr->rlist);				qptr->rlist = NULL;			}			if (qptr->llist) {				xfree(qptr->llist);				qptr->llist = NULL;			}			break;		}		xfree(qptr);		qptr = NULL;	}	return SUCCESS;}#define BulkBeginStr "@DELETE{  }\n@REFRESH{  }\n@UPDATE{\n"static int QM_bulk_count;int QM_send_bulk_begin(sock)int sock;{	Debug(75, 1, ("Starting a Broker-to-Broker transfer...\n"));	SWRITE(sock, BULK_SUC, strlen(BULK_SUC));	SWRITE(sock, BulkBeginStr, strlen(BulkBeginStr));	QM_bulk_count = 0;	return SUCCESS;}int QM_send_bulk_end(sock)int sock;{	SWRITE(sock, "}\n", 2);	/* close the @UPDATE */	SWRITE(sock, BULK_END, strlen(BULK_END));	Log("Bulk transfer returned %d objects.\n", QM_bulk_count);	Debug(75, 1, ("Finished Broker-to-Broker transfer...\n"));	return SUCCESS;}/* -----------------------------------------------------------------    QM_send_bulk_fd -- send a file to the socket ofile, based on FD   ----------------------------------------------------------------- */int QM_send_bulk_fd(FD, ofile, tmp)fd_t FD;FILE *ofile;reg_t *tmp;	/* needed for logging */{	FILE *ifile;	char buf[BUFSIZ];	int n;	if (tmp == NULL)		return ERROR;	LOGBULK_R(tmp);	if ((ifile = SM_Read_Obj(FD)) == NULL) {		return ERROR;	}	while ((n = fread(buf, 1, BUFSIZ, ifile)) > 0) {		fwrite(buf, 1, n, ofile);	}	fclose(ifile);	fflush(ofile);	QM_bulk_count++;	return SUCCESS;}/* *  QM_return_attributes - Selects and returns the desired attributes *  for FD to rsock socket. */void QM_return_attributes(FD, rsock)fd_t FD;int rsock;{	FILE *fp;	Template *T = NULL;	AVPair *pair;	int i;	char buf[BUFSIZ];	if (QM_nattlist <= 0)	/* any attributes to return? */		return;	/* Parse the SOIF */	if ((fp = SM_Read_Obj(FD)) != NULL) {		init_parse_template_file(fp);		T = parse_template();		finish_parse_template();		fclose(fp);	}		/* Valid SOIF? */	if (T == NULL)		return;	/* Now return the attributes */	for (i = 0; i < QM_nattlist; i++) {		if ((pair = extract_AVPair(T->list, QM_attlist[i])) != NULL) {			sprintf(buf, "%03d - %s %ld\n",				BR_ATTRIBUTE,				QM_attlist[i],				(long) pair->vsize);			(void) write(rsock, buf, strlen(buf));			(void) write(rsock, pair->value, pair->vsize);		}	}	free_template(T);	/* clean up */}#ifdef QM_RET_EMBED_ATT/* *  QM_return_embed_attrs - Selects and returns the desired attributes *  of the form embed<nn>-attr for matched lines for FD to rsock socket. * *  Experimental --DW */void QM_return_embed_attrs(FD, rsock, num)fd_t FD;int rsock;int num;{        FILE *fp;        Template *T = NULL;        AVPair *pair;        int i;        char buf[BUFSIZ];        char embedattr[128];        if (QM_nattlist <= 0)   /* any attributes to return? */                return;        /* Parse the SOIF */        if ((fp = SM_Read_Obj(FD)) != NULL) {                init_parse_template_file(fp);                T = parse_template();                finish_parse_template();                fclose(fp);        }        /* Valid SOIF? */        if (T == NULL)                return;        /* Now return the attributes */        for (i = 0; i < QM_nattlist; i++) {                sprintf (embedattr, "embed<%d>-%s", num, QM_attlist[i]);                if ((pair = extract_AVPair(T->list, embedattr)) != NULL) {                        sprintf(buf, "%03d - %s %ld\n",				BR_ATTRIBUTE,                                QM_attlist[i],				(long) pair->vsize);                        (void) write(rsock, buf, strlen(buf));                        (void) write(rsock, pair->value, pair->vsize);                }        }        free_template(T);       /* clean up */}/*** QM_find_embed_attrs**** Searches for 'embed<num>-' on a matched line (Glimpse only).** If found, passes 'num' to QM_return_embed_attrs()*/void QM_find_embed_attrs (FD, rsock, ml)fd_t FD;int rsock;char *ml;{	int num;	char jnk[64];	if (sscanf (ml, "Matched line:  embed<%d>-", &num) == 1) {		QM_return_embed_attrs(FD, rsock, num);	} else	if (sscanf (ml, "Matched line:  %[^#]# embed<%d>-", jnk, &num) == 2) {		QM_return_embed_attrs(FD, rsock, num);	}}#endif/* ----------------------------------------------------------------- *   QM_user_object -- send data about an object back to user.   * ----------------------------------------------------------------- */int QM_user_object(rsock, fd, opsize, opdata)int rsock;fd_t fd;int opsize;char *opdata[];{	reg_t *entry;	int i;	char buf[BUFSIZ], *s;	int len;	/* Be careful not to sprintf something too large! */	if ((entry = RG_Get_Entry(fd)) == NULL)		return FAIL;	/* ----- Show URL ----- */	sprintf(buf, "%03d - %s\n", BR_URL, entry->url);	SWRITE(rsock, buf, strlen(buf));	/* ----- Show Description ----- */	if (QM_descflag == 1 && entry->desc != NULL && entry->descs > 0) {		sprintf(buf, "%03d - %d\n", BR_DESCRIPTION, entry->descs);		SWRITE(rsock, buf, strlen(buf));		SWRITE(rsock, entry->desc, entry->descs);	}	/* ----- Pointer to Summary Object ----- */	s = SM_Get_Obj_URL(fd);	sprintf(buf, "%03d - %s\n", BR_SUMMARY_URL, s);	xfree(s); s = NULL;	SWRITE(rsock, buf, strlen(buf));	/* ----- Opaque Data ----- */	if (QM_opaqueflag == 1) { for (i = 0; i < opsize; i++) {			if (opdata[i] && (len = strlen(opdata[i])) > 0) {				if (len > (BUFSIZ-15))					*(opdata[i]+BUFSIZ-15) = '\0';				sprintf(buf, "%03d - %s\n",					BR_OPAQUE_DATA,					opdata[i]);				SWRITE(rsock, buf, strlen(buf));#ifdef QM_RET_EMBED_ATT				if (QM_nattlist > 0)				QM_find_embed_attrs (fd, rsock, opdata[i]);#endif			}		}	}	/* ----- Attribute Requests ----- */	QM_return_attributes(fd, rsock);	/* ----- Object End ----- */	sprintf (buf, "%d - object end\n", BR_END_OBJECT);	SWRITE(rsock, buf, strlen(buf));	LOGQUERY_R(entry);	return SUCCESS;}/* -----------------------------------------------------------------    QM_user_done -- send trailer information from user query.   ----------------------------------------------------------------- */int QM_user_done(rsock, count)int rsock, count;{	char ret[BUFSIZ];	extern char *BrkHomePage, *WebServer;	QM_free_attributes();	/* do this first */	if (BrkHomePage != NULL && WebServer != NULL) {		sprintf(ret, "%03d - http://%s%s\n",			BR_BROKER_URL, WebServer, BrkHomePage);		SWRITE(rsock, ret, strlen(ret));	}	/* End the Query results with 103 */	sprintf(ret, "%03d - %d Returned Object(s).\n",		BR_END_RESULTS, count);	Log("Query returned %d objects.\n", count);	SWRITE(rsock, ret, strlen(ret));	return SUCCESS;}/* *  QM_add_attribute() - Adds the given #attribute argument to the *  query.  Must normalize the attribute name. */int QM_add_attribute(att)char *att;{	QM_attlist[QM_nattlist] = xstrdup(att);	(void)COL_Normalize_Name(QM_attlist[QM_nattlist]);	Debug(75,5,("QM: Adding attribute: %s\n",QM_attlist[QM_nattlist]));	QM_nattlist++;	return SUCCESS;}int QM_free_attributes(){	int i;	for (i = 0; i < QM_nattlist; i++) {		if (QM_attlist[i] != NULL) {			xfree(QM_attlist[i]);			QM_attlist[i] = NULL;		}	}	QM_nattlist = 0;	return SUCCESS;}int QM_user_warning(rsock, message)int rsock;char *message;{	char ret[BUFSIZ];	sprintf(ret, "%03d - %s\n", BR_USER_MSG, message);	SWRITE(rsock, ret, strlen(ret));	return SUCCESS;}int QM_send_bulk_err(sock)int sock;{	Debug(75, 1, ("Error occurred in Broker-to-Broker transfer.\n"));	SWRITE(sock, BULK_ERR, strlen(BULK_ERR));	return SUCCESS;}static void admin_log(n,s)int n;char *s;{	char *p, *q, *w, *t, buf[BUFSIZ];	/* remove password from broker.out */	for (t = buf, w = s; *w; ) *t++ = tolower(*w++);	if ((p = (char *) strstr(buf, "#password")) != NULL) {		p += strlen("#password");		q = strchr(p+1, '#');		q = (q == NULL) ? t : q - 1;		for (t = buf, w = s; *w; t++, w++) *t = (t < p || t > q) ? *w : 'X';		*t = '\0';		Log("Processing Admin Command %d: %s\n", n, buf);	} else {		Log("Processing Admin Command %d: %s\n", n, s);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -