亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? htwwwstr.c

?? www工具包. 這是W3C官方支持的www支撐庫(kù). 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*								     HTWWWStr.c**	WWW RELATED STRING UTILITIES****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTWWWStr.c,v 2.36 2000/01/06 10:48:50 kahan Exp $****      Now 13 95	Spwaned from HTString.c*//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "HTParse.h"#include "HTInet.h"#include "HTUser.h"#include "HTWWWStr.h"					 /* Implemented here */PRIVATE char * months[12] = {    "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};#ifndef HAVE_STRFTIMEPRIVATE char * wkdays[7] = {    "Sun","Mon","Tue","Wed","Thu","Fri","Sat"};#endif/* ------------------------------------------------------------------------- *//*	Find next Field**	---------------**	Finds the next RFC822 token in a string**	On entry,**	*pstr	points to a string containing a word separated**		by white white space "," ";" or "=". The word**		can optionally be quoted using <"> or "<" ">"**		Comments surrrounded by '(' ')' are filtered out**** 	On exit,**	*pstr	has been moved to the first delimiter past the**		field**		THE STRING HAS BEEN MUTILATED by a 0 terminator****	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextField (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    while (1) {	/* Strip white space and other delimiters */	while (*p && (isspace((int) *p) || *p==',' || *p==';' || *p=='=')) p++;	if (!*p) {	    *pstr = p;	    return NULL;				   	 /* No field */	}	if (*p == '"') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '<') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    start = p;	    while(*p && !isspace((int) *p) && *p!=',' && *p!=';' && *p!='=')		p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next LWS delimited token**	-----------------------------**	On entry,**	*pstr	points to a string containing a word separated**		by white white space "," ";" or "=". The word**		can optionally be quoted using <"> or "<" ">"**		Comments surrrounded by '(' ')' are filtered out**** 	On exit,**	*pstr	has been moved to the first delimiter past the**		field**		THE STRING HAS BEEN MUTILATED by a 0 terminator****	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextLWSToken (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    /* Strip initial white space  */    while (*p && (isspace((int) *p))) p++;    if (!*p) {	*pstr = p;	return NULL;				   	 /* No field */    }    /* Now search for the next white space */    start = p;    while(*p && !isspace((int) *p)) p++;    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next Name-value pair**	-------------------------**	This is the same as HTNextField but it does not look for '=' as a**	separator so if there is a name-value pair then both parts are**	returned.**	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextPair (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    while (1) {	/* Strip white space and other delimiters */	while (*p && (*p==',' || *p==';')) p++;	if (!*p) {	    *pstr = p;	    return NULL;				   	 /* No field */	}	if (*p == '"') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '<') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    start = p;	    while(*p && *p!=',' && *p!=';')		p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next Name-value param**	--------------------------**	This is the same as HTNextPair but doesn't look for ','**	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextParam (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    while (1) {	/* Strip white space and other delimiters */	while (*p && *p==';') p++;	if (!*p) {	    *pstr = p;	    return NULL;				   	 /* No field */	}	if (*p == '"') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '<') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    start = p;	    while (*p && *p!=';')		p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next element in a comma separated string**	---------------------------------------------**	This is the same as HTNextPair but it does not look for anything**	else than ',' as separator**	Returns	a pointer to the first word or NULL on error*/PUBLIC char * HTNextElement (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    /* Strip white space and other delimiters */    while (*p && ((isspace((int) *p)) || *p==',')) p++;    if (!*p) {	*pstr = p;	return NULL;					   	 /* No field */    }    start = p;    while (1) {	if (*p == '"') {				     /* quoted field */	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else if (*p == '<') {				     /* quoted field */	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    while (*p && *p!=',') p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/*	Find next "/" delimied segment**	------------------------------**	This is the same as HTNextField but it includes "/" as a delimiter.**	Returns	a pointer to the first segment or NULL on error*/PUBLIC char * HTNextSegment (char ** pstr){    char * p = *pstr;    char * start = NULL;    if (!pstr || !*pstr) return NULL;    while (1) {	/* Strip white space and other delimiters */	while (*p && (isspace((int) *p) || *p==',' || *p==';' || *p=='=' || *p=='/')) p++;	if (!*p) {	    *pstr = p;	    return NULL;				   	 /* No field */	}	if (*p == '"') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='"'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '<') {				     /* quoted field */	    start = ++p;	    for(;*p && *p!='>'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    break;			    /* kr95-10-9: needs to stop here */	} else if (*p == '(') {					  /* Comment */	    for(;*p && *p!=')'; p++)		if (*p == '\\' && *(p+1)) p++;	       /* Skip escaped chars */	    p++;	} else {					      /* Spool field */	    start = p;	    while(*p && !isspace((int) *p) && *p!=',' && *p!=';' && *p!='=' && *p!='/')		p++;	    break;						   /* Got it */	}    }    if (*p) *p++ = '\0';    *pstr = p;    return start;}/***	Find the next s-expression token from a string of characters.**	We return the name of this expression and the param points to the**	parameters. ****	NOTE: The string has been mutilated by '/0's*/PUBLIC char * HTNextSExp (char ** exp, char ** param){    char * p = *exp;    char * name = NULL;    if (!exp || !*exp) return NULL;    while (*p && isspace((int) *p)) p++;		/* Strip leading white space */    if (!*p) {	*exp = p;	return NULL;					   	 /* No field */    }    if (*p == '{') {					     /* Open bracket */	int cnt = 1;	/*	**  Look for name of this expression. If we find a token then search	**  for the rest of the expression and remove the end '}'	*/	p++;	if ((name = HTNextField(&p)) == NULL) return NULL;	while (*p && isspace((int) *p)) p++;	*param = p;	while (*p) {	    if (*p == '{') cnt++;	    if (*p == '}') cnt--;	    if (!cnt) {		*p = '\0';		break;	    }	    p++;	}    }    return name;}/***	Returns a Message-ID string including the open '<' and the closing '>'.**	The format of the string is:****		"<" time-in-sec "Z" process-id "@" FQDN ">"****	or on systems that doesn't have process-id:****		"<" time-in-sec "Z" user "@" FQDN ">"****	Returns a pointer to the MessageID*/PUBLIC const char * HTMessageIdStr (HTUserProfile * up){    static char buf[80];    time_t sectime = time(NULL);#ifdef HAVE_GETPID    const char * address = HTUserProfile_fqdn(up);#else    const char * address = HTUserProfile_email(up);#endif /* HAVE_GETPID */    if (!address) address = tmpnam(NULL);    if ((!address || !*address) && sectime < 0) {	HTTRACE(CORE_TRACE, "MessageID...  Can't make a unique MessageID\n");	return "";    }#ifdef HAVE_GETPID    sprintf(buf, "<%ldZ%ld@%s>", (long)sectime, (long)getpid(), address ? address : "@@@");#else    sprintf(buf, "<%ldZ%s>", sectime, address ? address : "@@@");#endif /* HAVE_GETPID */    *(buf+79) = '\0';    return buf;}/*	Date and Time Parser**	--------------------**	These functions are taken from the server written by Ari Luotonen*/#if 0PRIVATE int make_num (const char *  s){    if (*s >= '0' && *s <= '9')	return 10 * (*s - '0') + *(s+1) - '0';    else	return *(s+1) - '0';}#endifPRIVATE int make_month (char * s, char ** ends){    char * ptr = s;    while (!isalpha((int) *ptr)) ptr++;    if (*ptr) {	int i;	*ends = ptr+3;			for (i=0; i<12; i++)	    if (!strncasecomp(months[i], ptr, 3)) return i;    }    return 0;}/***	Parse a str in GMT format to a local time time_t representation**	Four formats are accepted:****		Wkd, 00 Mon 0000 00:00:00 GMT		(rfc1123)**		Weekday, 00-Mon-00 00:00:00 GMT		(rfc850)**		Wkd Mon 00 00:00:00 0000 GMT		(ctime)**		1*DIGIT					(delta-seconds)*/PUBLIC time_t HTParseTime (const char * str, HTUserProfile * up, BOOL expand){    char * s;    struct tm tm;    time_t t;    if (!str) return 0;    if ((s = strchr(str, ','))) {	 /* Thursday, 10-Jun-93 01:29:59 GMT */	s++;				/* or: Thu, 10 Jan 1993 01:29:59 GMT */	while (*s && *s==' ') s++;	if (strchr(s,'-')) {				     /* First format */	    HTTRACE(CORE_TRACE, "Format...... Weekday, 00-Mon-00 00:00:00 GMT\n");	    if ((int)strlen(s) < 18) {		HTTRACE(CORE_TRACE, "ERROR....... Not a valid time format \"%s\"\n" _ s);		return 0;	    }	    tm.tm_mday = strtol(s, &s, 10);	    tm.tm_mon = make_month(s, &s);	    tm.tm_year = strtol(++s, &s, 10);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合激情小说| 国产999精品久久久久久| 亚洲欧美激情一区二区| 国产精品久久久久9999吃药| 亚洲国产精品成人综合色在线婷婷 | 欧美国产激情一区二区三区蜜月| 精品国产成人系列| 久久色.com| 国产精品天干天干在线综合| 国产欧美日韩在线| 中文字幕一区二区三区精华液| 国产精品女同一区二区三区| 亚洲人成在线播放网站岛国| 夜夜精品视频一区二区| 亚洲欧美另类在线| 亚洲午夜在线电影| 轻轻草成人在线| 国产专区欧美精品| 懂色av中文一区二区三区| 9人人澡人人爽人人精品| 色综合激情久久| 欧美精品乱码久久久久久| 欧美一区二区三区系列电影| 亚洲精品一区二区三区香蕉| 国产片一区二区三区| 亚洲欧美日韩在线播放| 亚洲成人av在线电影| 麻豆成人综合网| 国产麻豆精品一区二区| 99精品视频在线播放观看| 欧美日韩国产a| 久久综合狠狠综合| 成人欧美一区二区三区1314| 亚洲国产成人av好男人在线观看| 奇米影视一区二区三区| 国产乱子轮精品视频| eeuss鲁一区二区三区| 欧美三级资源在线| 精品国精品国产尤物美女| 国产精品福利影院| 亚瑟在线精品视频| 国产黄人亚洲片| 欧洲精品中文字幕| 久久久久青草大香线综合精品| 亚洲欧洲一区二区在线播放| 婷婷久久综合九色综合绿巨人 | 精品一区二区在线观看| 国产夫妻精品视频| 欧美午夜视频网站| 国产日韩精品一区二区三区在线| 一区二区三区.www| 国产一区二区三区四| 91浏览器打开| 精品日韩欧美一区二区| 亚洲美女淫视频| 黄页视频在线91| 欧美曰成人黄网| 91精品蜜臀在线一区尤物| 日韩视频一区在线观看| 日韩精品一区二区三区视频播放| 亚洲欧洲99久久| 经典三级视频一区| 色88888久久久久久影院按摩| 精品久久久久久久久久久院品网| 亚洲精品日韩一| 国产精品亚洲第一区在线暖暖韩国| 欧美视频精品在线| 精品福利视频一区二区三区| 亚洲成人av一区二区三区| 成人免费毛片片v| 国产精品色在线观看| 亚洲成人免费视| 99re免费视频精品全部| 久久先锋影音av| 视频一区二区三区入口| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 紧缚捆绑精品一区二区| 欧美日韩一本到| 亚洲欧美激情一区二区| 不卡一区二区在线| 精品国产三级a在线观看| 亚洲国产精品久久人人爱| 91亚洲国产成人精品一区二三| av色综合久久天堂av综合| 欧美精品一区二区三区很污很色的 | 成人高清视频免费观看| 精品国产露脸精彩对白 | 日韩一本二本av| 亚洲自拍偷拍麻豆| 99re8在线精品视频免费播放| 久久这里都是精品| 久久精品噜噜噜成人88aⅴ| 欧美日韩国产综合一区二区| 一区二区三区在线免费视频| 成人av在线影院| 欧美高清在线一区二区| 国产资源精品在线观看| 精品国产第一区二区三区观看体验| 免费在线视频一区| 欧美一级国产精品| 日韩电影免费在线观看网站| 欧美日韩精品欧美日韩精品一| 亚洲另类色综合网站| 亚洲网友自拍偷拍| 91久久精品一区二区三区| 亚洲欧美日韩电影| 欧美这里有精品| 亚洲国产日韩精品| 在线观看日韩av先锋影音电影院| 国产三级精品三级| 日韩精品1区2区3区| 91精品欧美一区二区三区综合在 | 亚洲久草在线视频| 成人aa视频在线观看| 亚洲成人av一区| 国产一区福利在线| 国产亚洲一区二区三区| 韩国成人精品a∨在线观看| 久久亚洲综合色一区二区三区 | 欧美日韩电影在线播放| 日本va欧美va欧美va精品| 欧美成人乱码一区二区三区| 韩国精品一区二区| 国产精品视频麻豆| 91麻豆免费观看| 亚洲va中文字幕| 国内欧美视频一区二区| 欧美极品另类videosde| 99精品国产一区二区三区不卡| 一区二区在线观看免费| 欧美女孩性生活视频| 久久国产精品99久久人人澡| 日本一区二区三区电影| 一本大道久久精品懂色aⅴ| 日本伊人午夜精品| 国产亚洲成av人在线观看导航| 欧美美女黄视频| 日欧美一区二区| 久久精品在这里| 日本久久一区二区三区| 青青草伊人久久| 国产三级三级三级精品8ⅰ区| 97久久超碰国产精品| 亚洲高清免费观看高清完整版在线观看| 91精品国产综合久久香蕉的特点 | 国产激情一区二区三区| 一区二区三区在线视频播放| 欧美va在线播放| 高清shemale亚洲人妖| 国产成人免费视频精品含羞草妖精 | 久久久精品免费免费| 日本高清不卡一区| 久久精品国产秦先生| 1区2区3区欧美| 日韩欧美区一区二| 99天天综合性| 久久99最新地址| 亚洲美女屁股眼交3| 精品国产污网站| 精品国产精品网麻豆系列| 91一区一区三区| 久久国产成人午夜av影院| 五月激情综合婷婷| 国产欧美日韩综合精品一区二区| 91香蕉视频污在线| 麻豆精品一区二区综合av| 国产精品女主播av| 日韩免费看的电影| 欧美性受极品xxxx喷水| 国产精品中文字幕欧美| 偷拍一区二区三区四区| 国产精品国产三级国产有无不卡 | 日韩电影免费一区| 亚洲人成网站在线| 久久久99久久| 日韩一区二区三区在线视频| 色呦呦网站一区| 丁香激情综合五月| 国内精品久久久久影院一蜜桃| 亚洲国产欧美在线人成| 亚洲一区二三区| 久久亚洲一区二区三区明星换脸| 欧美三级一区二区| 91视频一区二区三区| 国产精品中文字幕一区二区三区| 美女视频一区在线观看| 亚洲国产另类av| 一区二区三区在线观看国产| 中文一区二区在线观看| 久久先锋影音av鲁色资源网| 欧美日韩精品一区视频| 99国产精品久久久久| 国产69精品久久久久777| 黑人精品欧美一区二区蜜桃| 日韩高清一区二区| 日韩电影在线观看网站| 婷婷国产v国产偷v亚洲高清| 亚洲自拍偷拍图区| 亚洲一区二区三区视频在线播放| 亚洲欧洲一区二区三区|