📄 htanchor.c
字号:
char * charset = HTAssocList_findObject(me->type_parameters,"charset"); return HTAtom_for(charset); } return NULL;}PUBLIC BOOL HTAnchor_setCharset (HTParentAnchor * me, HTCharset charset){ return HTAnchor_addFormatParam(me, "charset", HTAtom_name(charset));}/*** Level parameter to Content-Type*/PUBLIC HTLevel HTAnchor_level (HTParentAnchor * me){ if (me && me->type_parameters) { char * level = HTAssocList_findObject(me->type_parameters, "level"); return HTAtom_for(level); } return NULL;}PUBLIC BOOL HTAnchor_setLevel (HTParentAnchor * me, HTLevel level){ return HTAnchor_addFormatParam(me, "level", HTAtom_name(level));}/*** Content Encoding*/PUBLIC HTList * HTAnchor_encoding (HTParentAnchor * me){ return me ? me->content_encoding : NULL;}PUBLIC BOOL HTAnchor_addEncoding (HTParentAnchor * me, HTEncoding encoding){ if (me && encoding) { if (!me->content_encoding) me->content_encoding = HTList_new(); return HTList_addObject(me->content_encoding, encoding); } return NO;}PUBLIC BOOL HTAnchor_deleteEncoding (HTParentAnchor * me, HTEncoding encoding){ return (me && me->content_encoding && encoding) ? HTList_removeObject(me->content_encoding, encoding) : NO;}PUBLIC BOOL HTAnchor_deleteEncodingAll (HTParentAnchor * me){ if (me && me->content_encoding) { HTList_delete(me->content_encoding); me->content_encoding = NULL; return YES; } return NO;}/*** Content Language*/PUBLIC HTList * HTAnchor_language (HTParentAnchor * me){ if (me) { if (me->content_language == NULL && me->headers) { char * value = HTAssocList_findObject(me->headers, "content-language"); char * field; if (!me->content_language) me->content_language = HTList_new(); while ((field = HTNextField(&value)) != NULL) { char * lc = field; while ((*lc = TOLOWER(*lc))) lc++; HTList_addObject(me->content_language, HTAtom_for(field)); } } return me->content_language; } return NULL;}PUBLIC BOOL HTAnchor_addLanguage (HTParentAnchor * me, HTLanguage language){ if (me && language) { if (!me->content_language) me->content_language = HTList_new(); return HTList_addObject(me->content_language, language); } return NO;}PUBLIC BOOL HTAnchor_deleteLanguageAll (HTParentAnchor * me){ if (me && me->content_language) { HTList_delete(me->content_language); me->content_language = NULL; return YES; } return NO;}/*** Content Length*/PUBLIC long int HTAnchor_length (HTParentAnchor * me){ return me ? me->content_length : -1;}PUBLIC void HTAnchor_setLength (HTParentAnchor * me, long int length){ if (me) me->content_length = length;}PUBLIC void HTAnchor_addLength (HTParentAnchor * me, long int deltalength){ if (me) { if (me->content_length < 0) me->content_length = deltalength; else me->content_length += deltalength; }}/*** Content Transfer Encoding*/PUBLIC HTEncoding HTAnchor_contentTransferEncoding (HTParentAnchor * me){ return me ? me->cte : NULL;}PUBLIC void HTAnchor_setContentTransferEncoding (HTParentAnchor * me, HTEncoding cte){ if (me) me->cte = cte;}/*** Allowed methods (Allow)*/PUBLIC HTMethod HTAnchor_allow (HTParentAnchor * me){ if (me) { if (me->allow == 0 && me->headers) { char * value = HTAssocList_findObject(me->headers, "allow"); char * field; /* ** We treat methods allowed on this object as case insensitive ** in case we receive the information over the net - that is - ** in the Allow header. */ while ((field = HTNextField(&value)) != NULL) { HTMethod new_method; if ((new_method = HTMethod_enum(field)) != METHOD_INVALID) me->allow |= new_method; } } return me->allow; } return METHOD_INVALID;}PUBLIC void HTAnchor_setAllow (HTParentAnchor * me, HTMethod methodset){ if (me) me->allow = methodset;}PUBLIC void HTAnchor_appendAllow (HTParentAnchor * me, HTMethod methodset){ if (me) me->allow |= methodset;}/*** Title*/PUBLIC const char * HTAnchor_title (HTParentAnchor * me){ if (me) { if (me->title) return *me->title ? me->title : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "title"); char * title; if ((title = HTNextField(&value))) StrAllocCopy(me->title, title); return me->title; } } return NULL;}PUBLIC void HTAnchor_setTitle (HTParentAnchor * me, const char * title){ if (me && title) { char * ptr; StrAllocCopy(me->title, title); ptr = me->title; while (*ptr) { if (isspace((int) *ptr)) *ptr = ' '; ptr++; } }}PUBLIC void HTAnchor_appendTitle (HTParentAnchor * me, const char * title){ if (me && title) StrAllocCat(me->title, title);}/*** Version*/PUBLIC char * HTAnchor_version (HTParentAnchor * me){ if (me) { if (me->version) return *me->version ? me->version : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "version"); char * version; if ((version = HTNextField(&value))) StrAllocCopy(me->version, version); return me->version; } } return NULL;}PUBLIC void HTAnchor_setVersion (HTParentAnchor * me, const char * version){ if (me && version) StrAllocCopy(me->version, version);}/*** Derived from*/PUBLIC char * HTAnchor_derived (HTParentAnchor * me){ if (me) { if (me->derived_from) return *me->derived_from ? me->derived_from : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "derived-from"); char * derived_from; if ((derived_from = HTNextField(&value))) StrAllocCopy(me->derived_from, derived_from); return me->derived_from; } } return NULL;}PUBLIC void HTAnchor_setDerived (HTParentAnchor * me, const char *derived_from){ if (me && derived_from) StrAllocCopy(me->derived_from, derived_from);}/*** Content MD5*/PUBLIC char * HTAnchor_md5 (HTParentAnchor * me){ if (me) { if (me->content_md5) return *me->content_md5 ? me->content_md5 : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "content-md5"); char * md5; if ((md5 = HTNextField(&value))) StrAllocCopy(me->content_md5,md5); return me->content_md5; } } return NULL;}PUBLIC BOOL HTAnchor_setMd5 (HTParentAnchor * me, const char * hash){ if (me && hash) { StrAllocCopy(me->content_md5, hash); return YES; } return NO;}/*** Date*/PUBLIC time_t HTAnchor_date (HTParentAnchor * me){ if (me) { if (me->date == (time_t) -1 && me->headers) { char * value = HTAssocList_findObject(me->headers, "date"); if (value) me->date = HTParseTime(value, NULL, YES); } return me->date; } return (time_t) -1;}PUBLIC void HTAnchor_setDate (HTParentAnchor * me, const time_t date){ if (me) me->date = date;}/*** Expires*/PUBLIC time_t HTAnchor_expires (HTParentAnchor * me){ if (me) { if (me->expires == (time_t) -1 && me->headers) { char * value = HTAssocList_findObject(me->headers, "expires"); if (value) me->expires = HTParseTime(value, NULL, YES); } return me->expires; } return (time_t) -1;}PUBLIC void HTAnchor_setExpires (HTParentAnchor * me, const time_t expires){ if (me) me->expires = expires;}/*** Last Modified*/PUBLIC time_t HTAnchor_lastModified (HTParentAnchor * me){ if (me) { if (me->last_modified == (time_t) -1 && me->headers) { char * value = HTAssocList_findObject(me->headers,"last-modified"); if (value) me->last_modified = HTParseTime(value, NULL, YES); } return me->last_modified; } return (time_t) -1;}PUBLIC void HTAnchor_setLastModified (HTParentAnchor * me, const time_t lm){ if (me) me->last_modified = lm;}/*** Age*/PUBLIC time_t HTAnchor_age (HTParentAnchor * me){ if (me) { if (me->age == (time_t) -1 && me->headers) { char * value = HTAssocList_findObject(me->headers, "age"); if (value) me->age = atol(value); } return me->age; } return (time_t) -1;}PUBLIC void HTAnchor_setAge (HTParentAnchor * me, const time_t age){ if (me) me->age = age;}/*** Entity Tag*/PUBLIC char * HTAnchor_etag (HTParentAnchor * me){ if (me) { if (me->etag) return *me->etag ? me->etag : NULL; if (me->headers) { char * value = HTAssocList_findObject(me->headers, "etag"); char * etag; if ((etag = HTNextField(&value))) StrAllocCopy(me->etag, etag); return me->etag; } } return me ? me->etag : NULL;}PUBLIC void HTAnchor_setEtag (HTParentAnchor * me, const char * etag){ /* JK: add a new etag if it doesn't exist or if the value has changed */ if (me && etag && ((me->etag == NULL) || strcmp (me->etag, etag))) StrAllocCopy(me->etag, etag);}PUBLIC BOOL HTAnchor_isEtagWeak (HTParentAnchor * me){ return (me && me->etag && !strncasecomp(me->etag, "W/", 2));}/*** Original headers (if any)*/PUBLIC HTAssocList * HTAnchor_header (HTParentAnchor * me){ return me ? me->headers : NULL;}PUBLIC BOOL HTAnchor_setHeader (HTParentAnchor * me, HTAssocList * headers){ if (me) { me->headers = headers; return YES; } return NO;}/*** Validate anchor values and finish up parsing*/PUBLIC void HTAnchor_setHeaderParsed (HTParentAnchor * me){ if (me) { HTTRACE(ANCH_TRACE, "HTAnchor.... Anchor is parsed\n"); me->header_parsed = YES; }}PUBLIC BOOL HTAnchor_headerParsed (HTParentAnchor * me){ return (me ? me->header_parsed : NO);}/* Clear Header Information** ------------------------*/PUBLIC void HTAnchor_clearHeader (HTParentAnchor * me){ HTTRACE(ANCH_TRACE, "HTAnchor.... Clear all header information\n"); me->allow = METHOD_INVALID; if (me->content_encoding) { HTList_delete(me->content_encoding); me->content_encoding = NULL; } if (me->content_language) { HTList_delete(me->content_language); me->content_language = NULL; } HT_FREE(me->content_base); HT_FREE(me->content_location); me->content_length = -1; /* Invalid */ /* Delete the title */ HT_FREE(me->title); /* Clear the content type */ me->content_type = WWW_UNKNOWN; if (me->type_parameters) { HTAssocList_delete(me->type_parameters); me->type_parameters = NULL; } /* Meta tags */ if (me->meta_tags) { HTAssocList_delete(me->meta_tags); me->meta_tags = NULL; } /* Dates etc. */ me->date = (time_t) -1; me->expires = (time_t) -1; me->last_modified = (time_t) -1; me->age = (time_t) -1; HT_FREE(me->derived_from); HT_FREE(me->version); HT_FREE(me->etag); /* Delete any original headers */ if (me->headers) HTAssocList_delete(me->headers); me->headers = NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -