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

📄 csapp.c

📁 www工具包
💻 C
📖 第 1 页 / 共 2 页
字号:
							 pReqParms->pVoid);    return (pReqParms->disposition == CSError_OK ? HT_OK : HT_INTERRUPTED);    CSLabel_free(pReqParms->pCSLabel);    if (pReqParms->disposition == CSError_OK)	return HT_OK;    return HT_OK;}PRIVATE BOOL ReqParms_removeRequest(ReqParms_t * pReqParms){    HTList_removeObject(ReqParms, (void *)pReqParms);    ReqParms_free(pReqParms);    return YES;}/*PRIVATE BOOL ReqParms_removeRequest(HTRequest * pReq){    ReqParms_t * pReqParms;    if ((pReqParms = ReqParms_getReq(pReq)))        return HTList_removeObject(ReqParms, (void *)pReqParms);    return NO;}PRIVATE CSUser_t * ReqParms_getUser(HTRequest * pReq){    ReqParms_t * pReqParms;    if ((pReqParms = ReqParms_getReq(pReq)))        return pReqParms->pCSUser;    return 0;}*//* U S E R */PUBLIC BOOL CSApp_registerDefaultUserByName(char * user, char * password){    CSUser_t * pCSUser;    CSLoadedUser_t * pCSLoadedUser;    if (!(pCSLoadedUser = CSLoadedUser_findName(user))) {        HTTRACE(PICS_TRACE, "PICS: User \"%s\" not found.\n" _ CSUser_name(pCSUser));        return NO;    }    pCSUser = pCSLoadedUser->pCSUser;    if (CSUser_checkPassword(pCSUser, password) == NO) {        HTPrint("PICS: Bad password for user \"%s\".\n", CSUser_name(pCSUser));        return NO;    }    DefaultReqParms.pCSUser = pCSUser;    return YES;}PUBLIC CSUser_t * CSApp_registerUserByName(char* user, char* password){    CSLoadedUser_t * pCSLoadedUser;    if (!(pCSLoadedUser = CSLoadedUser_findName(user)))        return 0;    if (CSUser_checkPassword(pCSLoadedUser->pCSUser, password) == NO) {        HTPrint("PICS: Bad password for user \"%s\"\n", 		CSUser_name(pCSLoadedUser->pCSUser));        return 0;    }    return pCSLoadedUser->pCSUser;}PUBLIC BOOL CSApp_setDefaultUser(CSUser_t * pCSUser){    if (!pCSUser)        return NO;    DefaultReqParms.pCSUser = pCSUser;    return YES;}PUBLIC BOOL CSApp_checkHUser(CSUser_t * pCSUser){    return YES;}PUBLIC BOOL CSApp_unregisterDefaultUser(void){    DefaultReqParms.pCSUser = 0;    return YES;}PUBLIC BOOL CSApp_unregisterUser(CSUser_t * pCSUser){    if (DefaultReqParms.pCSUser == pCSUser)        DefaultReqParms.pCSUser = 0;    return CSLoadedUser_remove(pCSUser);}/* base of all streams */#define PUTBLOCK(b, l)	(*target->isa->put_block)(target, b, l)struct _HTStream {    const HTStreamClass *	isa;    /* ... */};/* HTNet Filters */PRIVATE HTNetAfter CSApp_bureauError;PRIVATE int CSApp_bureauAfter (HTRequest * pReq, HTResponse * response,			       void * context, int status){    ReqParms_t * pReqParms = (ReqParms_t *)context;    /*    if (!pReqParms || (pReq != pReqParms->pBureauReq))        return HT_ERROR; */    pReqParms->reqState = reqState_BUREAU_DONE;    HTRequest_deleteAfter(pReq, CSApp_bureauAfter);    HTRequest_deleteAfter(pReq, CSApp_bureauError);    HTTRACE(PICS_TRACE, "PICS: Load was %sOK\n" _ 			    pReqParms->disposition == CSError_OK ? "" : "!");    ReqParms_removeRequest(pReqParms);    if (pReqParms->disposition != CSError_OK)        return HT_OK;    /*    HTRequest_setAnchor(pReq, pReqParms->anchor); */    HTRequest_setOutputFormat(pReq, pReqParms->outputFormat);    HTRequest_setOutputStream(pReq, pReqParms->outputStream);    HTRequest_setMethod(pReq, pReqParms->method);    return HTLoadAnchor((HTAnchor *)pReqParms->anchor, pReq);}PRIVATE int CSApp_bureauError (HTRequest * pReq, HTResponse * response,			       void * context, int status){    ReqParms_t * pReqParms = (ReqParms_t *)context;    /*    if (!pReqParms || (pReq != pReqParms->pBureauReq))        return HT_ERROR; */    pReqParms->reqState = reqState_BUREAU_ERR;    HTPrint("PICS: couldn't find label service.\n");    return HT_OK;}PRIVATE int CSApp_netBefore (HTRequest * pReq, void * param, int mode){    HTParentAnchor * pParentAnchor;    ReqParms_t * pReqParms;    char * bureau;    char * url;    char * ptr;    int ret;    /*    if (ReqParms_getBureauReq(pReq) || 	pReq == DefaultReqParms.pBureauReq)        return HT_OK;    if (!(pReqParms = ReqParms_getReq(pReq))) {        pReqParms = &DefaultReqParms;	DefaultReqParms.pReq = pReq;    } */    if ((pReqParms = ReqParms_getReq(pReq))) {        if (pReqParms->reqState == reqState_BUREAU_START) /* bureau req */	    return HT_OK;                                 /* so ignore  */    } else {        if (!DefaultReqParms.pCSUser)	    return HT_OK; /* no PICS user so no PICS */        pReqParms = ReqParms_copy(&DefaultReqParms);	pReqParms->pReq = pReq;    }    if (!(bureau = CSUser_bureau(pReqParms->pCSUser))) {        HTRequest_setGenerator(pReq, ListWithHeaderGenerator, NO);        return HT_OK;				/* Header will handle it */    }    if (ReqParms_checkCache(pReqParms, &ret))        return ret;    url = HTAnchor_address((HTAnchor*)HTRequest_anchor(pReq));    ptr = CSUser_getLabels(pReqParms->pCSUser, url, CSOption_normal, 			   CSCompleteness_full);    pReqParms->anchor = HTRequest_anchor(pReq);    pReqParms->outputFormat = HTRequest_outputFormat(pReq);    HTRequest_setOutputFormat(pReq, WWW_SOURCE);    pReqParms->outputStream = HTRequest_outputStream(pReq);    HTRequest_setOutputStream(pReq, CSParseLabel(pReq, 0, 0, 0, 0));    /*    pReqParms->pBureauReq = pReq; */    pReqParms->reqState = reqState_BUREAU_START; /* mark as a BUREAU req */    HTRequest_setPreemptive(pReq, YES);    HTTRACE(PICS_TRACE, "PICS: label request:\n%s\n" _ ptr);    /* get label and set disposition */    HTRequest_addAfter(pReq, CSApp_bureauAfter, NULL, (void *) pReqParms, HT_LOADED,		       HT_FILTER_MIDDLE, YES);    HTRequest_addAfter(pReq, CSApp_bureauError, NULL, (void *) pReqParms, HT_ERROR,		       HT_FILTER_MIDDLE, YES);    pParentAnchor = (HTParentAnchor *) HTAnchor_findAddress(ptr);    if ((ret = HTLoadAnchor((HTAnchor *) pParentAnchor, pReq)) != YES)        HTPrint("PICS: Can't access label bureau at %s.\n", ptr);    return HT_OK;}/*HTPostCallback CSApp_headerGenerator;*/PRIVATE int CSApp_headerGenerator (HTRequest * pReq, HTStream * target){    char * translated;    HTParentAnchor *anchor = HTRequest_anchor(pReq);    char * url;    ReqParms_t * pReqParms = ReqParms_getReq(pReq);    /*    if (!pReqParms) {        if ((pReqParms = ReqParms_getBureauReq(pReq)))	    return HT_OK;        pReqParms = &DefaultReqParms;    } */if (!pReqParms || pReqParms->reqState != reqState_NEW || !pReqParms->pCSUser)HTPrint("PICS: CSApp_headerGenerator prob\n");#if 0    if (!pReqParms->pCSUser) {        HTTRACE(PICS_TRACE, "PICS: No user selected\n");	return HT_OK;    }    if (CSUser_bureau(pReqParms->pCSUser)) /* handled by CSApp_netBefore */        return HT_OK;#endif    url = HTAnchor_address((HTAnchor *) anchor);    if ((translated = CSUser_acceptLabels(pReqParms->pCSUser, CSCompleteness_full))) {        HTTRACE(PICS_TRACE, "PICS: Accept \"%s\".\n" _ translated);        PUTBLOCK(translated, strlen(translated));        HT_FREE(translated);    }    HT_FREE(url);    return HT_OK;}/*HTParserCallback CSApp_headerParser;*/PRIVATE int CSApp_headerParser (HTRequest * pReq, HTResponse * response,				char * token, char * value){    CSParse_t * pCSParse;    ReqParms_t * pReqParms = ReqParms_getReq(pReq);    if (!pReqParms) {        pReqParms = &DefaultReqParms;	DefaultReqParms.pReq = pReq;    }    if (!pReqParms->pCSUser) /* if there is no user */       	return HT_OK;             /* send the document on its way */ /*   pReqParms->disposition = CSCheckLabel_parseAndValidateLabelStr(value, pReqParms->pCSUser); */    pCSParse = CSParse_newLabel(0, 0);    CSParse_parseChunk(pCSParse, value, (int) strlen(value), 0);    pReqParms->disposition =            CSCheckLabel_checkLabelAndUser(CSParse_getLabel(pCSParse), 					  pReqParms->pCSUser);    pReqParms->pCSLabel = CSParse_getLabel(pCSParse);    CSParse_delete(pCSParse);    HTTRACE(PICS_TRACE, "PICS: PICS mime header \"%s\" got %d.\n" _ value _ pReqParms->disposition);    return ReqParms_checkDisposition(pReqParms);}/* application functions */PUBLIC BOOL CSApp_registerApp(CSDisposition_callback * pCallback, 			      CSDisposition_criteria criteria, 			      CSApp_userCallback * pUserCallback, void * pVoid){    HTList* conversions;    PUserCallback = pUserCallback;    /* set up DefaultReqParms */    DefaultReqParms.pCallback = pCallback;    DefaultReqParms.criteria = criteria;    DefaultReqParms.pVoid = pVoid;    /* Tell HTMIME which headers we will deal with */    if (!ListWithHeaderGenerator)        ListWithHeaderGenerator = HTList_new();    HTList_addObject(ListWithHeaderGenerator, (void *)CSApp_headerGenerator);    /*    HTHeader_addGenerator(CSApp_headerGenerator); */    HTNet_addBefore(CSApp_netBefore, NULL, NULL, 5);    HTHeader_addParser(S_mimeLabel, FALSE, CSApp_headerParser);    /* set converters so pics profiles may be read */    conversions = HTFormat_conversion();#if 0    HTConversion_add(conversions, S_machRead, "*/*", CSParseMachRead, 		     1.0, 0.0, 0.0);    HTConversion_add(conversions, S_label, "*/*", CSParseLabel, 1.0, 0.0, 0.0);#endif    HTConversion_add(conversions, S_user, "*/*", CSParseUser, 1.0, 0.0, 0.0);    HTBind_add("rat", S_machRead, "7bit", NULL, NULL, 1.0);    HTBind_add("pcu", S_user, "7bit", NULL, NULL, 1.0);    HTBind_add("lab", S_label, "7bit", NULL, NULL, 1.0);    HTBind_add("url", S_URLList, "7bit", NULL, NULL, 1.0);    if (!LoadedUsers)        LoadedUsers = HTList_new();    return YES;}/*  while ((pCSLoadedUser = (CSLoadedUser_t *) HTList_removeLastObject(LoadedUsers)))    HTList_removeObject(pCSLoadedUser);    return YES; */PUBLIC BOOL CSApp_unregisterApp(){    HTHeader_deleteGenerator(CSApp_headerGenerator);    HTHeader_deleteParser(S_mimeLabel);    return YES;}PUBLIC BOOL CSApp_registerReq(HTRequest* pReq, CSUser_t * pCSUser, CSDisposition_callback pCallback, CSDisposition_criteria criteria, void * pVoid){    ReqParms_t * pReqParms;    if ((pReqParms = ReqParms_getReq(pReq))) {        return NO;    }    if (!pReq || !pCSUser)        return NO;    pReqParms = ReqParms_new(pReq, pCSUser, pCallback, criteria, pVoid);    if (!ReqParms)      ReqParms = HTList_new();    HTList_addObject(ReqParms, (void *)pReqParms);    return YES;}PUBLIC BOOL CSApp_unregisterReq(HTRequest* pReq){    ReqParms_t * pReqParms;    if ((pReqParms = ReqParms_getReq(pReq)) == NULL) {        return NO;    }    HTList_removeObject(ReqParms, (void *)pReqParms);    ReqParms_free(pReqParms);    return YES;}PUBLIC HTRequest * CSApp_originalRequest(HTRequest* pReq){  /*    ReqParms_t * pReqParms;    if ((pReqParms = ReqParms_getBureauReq(pReq)) == NULL) {        return NULL;    }    return pReqParms->pReq;    */    return pReq;}/* M I S C */PUBLIC char * CSApp_libraryVersion(void){    return "1.1";}

⌨️ 快捷键说明

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