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

📄 csusrlst.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
字号:
/*								     CSUsrLst.c*//* Library include files */#include "WWWLib.h"#include "CSLApp.h"struct _HTStream {    const HTStreamClass *	isa;    HTRequest *			request;    HTStream *			target;    HTChunk *			buffer;    HTEOLState			EOLstate;/*    HTList *                    URLs; */};HTList * UserList = 0;typedef struct {	char * name;	char * url;} UserListStruct_t;PRIVATE BOOL CSUserList_addLine(HTStream * me){	UserListStruct_t * newEl;	char * pURL;	char * end;	end = strrchr(HTChunk_data(me->buffer), ' ');	pURL = end + 1;	while (*(end-1) == ' ')		end--;	*end = 0;	if ((newEl = (UserListStruct_t *)HT_CALLOC(1, sizeof(UserListStruct_t))) == NULL)		HT_OUTOFMEM("UserListStruct_t");    StrAllocCopy(newEl->name, HTChunk_data(me->buffer));    StrAllocCopy(newEl->url, pURL);/*    HTList_addObject(me->URLs, (void *)pURL); */    HTList_addObject(UserList, (void *)newEl);    return YES;}PUBLIC BOOL CSUserList_destroy(void){    char * userName;    while ((userName = (char *) HTList_removeLastObject(UserList)))        HT_FREE(userName);    HTList_delete(UserList);    UserList = NULL;    return YES;}PUBLIC char * CSUserList_findURL(char * username){    HTList * cur = UserList;    UserListStruct_t * pUser;    while ((pUser = (UserListStruct_t *) HTList_nextObject(cur))) {        if (!strcasecomp(username, pUser->name))            return pUser->url;    }    return 0;}PUBLIC int CSUserList_enum(CSUserListCallback* pCallback, void * pVoid){    HTList * cur = UserList;    UserListStruct_t * pUser;    int retVal, i = 0;    while ((pUser = (UserListStruct_t *) HTList_nextObject(cur))) {        if ((retVal = (*pCallback)(pUser->name, pUser->url, i, pVoid)) != CSError_OK)            return (retVal);        i++;    }    return 0;}/***	Folding is either of CF LWS, LF LWS, CRLF LWS*/PRIVATE int CSUserList_put_block (HTStream * me, const char * b, int l){    while (l > 0) {	if (me->EOLstate == EOL_FCR) {	    if (*b == LF)				   	     /* CRLF */			me->EOLstate = EOL_FLF;	    else if (isspace((int) *b))				   /* Folding: CR SP */			me->EOLstate = EOL_DOT;	    else {						 /* New line */			CSUserList_addLine(me);			me->EOLstate = EOL_BEGIN;			HTChunkClear(me->buffer);			continue;	    }	} else if (me->EOLstate == EOL_FLF) {	    if (isspace((int) *b))		       /* Folding: LF SP or CR LF SP */			me->EOLstate = EOL_DOT;	    else {						/* New line */			CSUserList_addLine(me);			me->EOLstate = EOL_BEGIN;			HTChunkClear(me->buffer);			continue;			}	} else if (me->EOLstate == EOL_DOT) {	    if (isspace((int) *b)) {			me->EOLstate = EOL_BEGIN;			HTChunkPutc(me->buffer, ' ');	    } else {			CSUserList_addLine(me);			me->EOLstate = EOL_BEGIN;			HTChunkClear(me->buffer);			continue;	    }	} else if (*b == CR) {	    me->EOLstate = EOL_FCR;	} else if (*b == LF) {	    me->EOLstate = EOL_FLF;			       /* Line found */	} else	    HTChunkPutc(me->buffer, *b);	l--; b++;    }    if (HTChunk_size(me->buffer))        CSUserList_addLine(me);    return HT_OK;}PRIVATE int CSUserList_put_character (HTStream * me, char c){    return CSUserList_put_block(me, &c, 1);}PRIVATE int CSUserList_put_string (HTStream * me, const char * s){    return CSUserList_put_block(me, s, (int) strlen(s));}PRIVATE int CSUserList_flush (HTStream * me){    return (*me->target->isa->flush)(me->target);}PRIVATE int CSUserList_free (HTStream * me){    int status = HT_OK;    if (me->target) {	if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK)	    return HT_WOULD_BLOCK;    }    HTTRACE(APP_TRACE, "Rules....... FREEING....\n");    HTChunkFree(me->buffer);/*    HTList_delete(me->URLs); */   HT_FREE(me);    return status;}PRIVATE int CSUserList_abort (HTStream * me, HTList * e){    int status = HT_ERROR;    if (me->target) status = (*me->target->isa->abort)(me->target, e);    HTTRACE(APP_TRACE, "Rules....... ABORTING...\n");    HTChunkFree(me->buffer);/*    HTList_delete(me->URLs); */   HT_FREE(me);    return status;}/*	Structured Object Class**	-----------------------*/PRIVATE const HTStreamClass CSUserListClass ={		    "URLListCollector",    CSUserList_flush,    CSUserList_free,    CSUserList_abort,    CSUserList_put_character,    CSUserList_put_string,    CSUserList_put_block};PUBLIC HTStream * CSUserLists (HTRequest *	request,               	              void *	param,               	              HTFormat	input_format,               	              HTFormat	output_format,               	              HTStream *	output_stream){    HTStream * me;    if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL)        HT_OUTOFMEM("CSUserLists");    me->isa = &CSUserListClass;    me->request = request;    me->target = output_stream;    me->buffer = HTChunkCreate(512);/*    me->URLs = HTList_new(); */    if (!UserList)        UserList = HTList_new();    me->EOLstate = EOL_BEGIN;/*    if (HTRequest_context(request))        *((HTList **)HTRequest_context(request)) = me->URLs;*/    return me;}

⌨️ 快捷键说明

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