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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? http.c

?? Dag Erling http library source code
?? C
?? 第 1 頁 / 共 4 頁
字號:
	while (*str && *hdr && tolower(*str++) == tolower(*hdr++))		/* nothing */;	if (*str || *hdr != ':')		return (NULL);	while (*hdr && isspace(*++hdr))		/* nothing */;	return (hdr);}/* * Get the next header and return the appropriate symbolic code. */static hdr_t_http_next_header(conn_t *conn, const RMascii **p){	RMint32 i;	if (_fetch_getln(conn) == -1)		return (hdr_syserror);	while (conn->buflen && isspace(conn->buf[conn->buflen - 1]))		conn->buflen--;	conn->buf[conn->buflen] = '\0';	if (conn->buflen == 0)		return (hdr_end);	/*	 * We could check for malformed headers but we don't really care.	 * A valid header starts with a token immediately followed by a	 * colon; a token is any sequence of non-control, non-whitespace	 * characters except "()<>@,;:\\\"{}".	 */	for (i = 0; hdr_names[i].num != hdr_unknown; i++)		if ((*p = _http_match(hdr_names[i].name, (RMascii *)conn->buf)) != NULL)			return (hdr_names[i].num);	return (hdr_unknown);}/* * Parse a last-modified header */static RMint32_http_parse_mtime(const RMascii *p, time_t *mtime){	RMascii locale[64], *r;	struct tm tm;	strncpy(locale, setlocale(LC_TIME, NULL), sizeof(locale));	setlocale(LC_TIME, "C");	r = (RMascii *) strptime(p, "%a, %d %b %Y %H:%M:%S GMT", &tm);	/* XXX should add support for date-2 and date-3 */	setlocale(LC_TIME, locale);	if (r == NULL)		return (-1);	RMDBGLOG((HTTPDEBUG,"    last modified: [%04d-%02d-%02d "		  "%02d:%02d:%02d]\n",		  tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,		  tm.tm_hour, tm.tm_min, tm.tm_sec));	*mtime = my_timegm(&tm);	return (0);}/* * Parse a content-length header */static RMint32_http_parse_length(const RMascii *p, RMint64 *length){	RMint64 len;	for (len = 0; *p && isdigit(*p); ++p)		len = len * 10 + (*p - '0');	if (*p)		return (-1);	RMDBGLOG((HTTPDEBUG, "    content length: [%lld]\n",	    (RMint64)len));	*length = len;	return (0);}/* * Parse a content-range header */static RMint32_http_parse_range(const RMascii *p, RMint64 *offset, RMint64 *length, RMint64 *size){	RMint64 first, last, len;	if (strncasecmp(p, "bytes ", 6) != 0)		return (-1);	p += 6;	if (*p == '*') {		first = last = -1;		++p;	} else {		for (first = 0; *p && isdigit(*p); ++p)			first = first * 10 + *p - '0';		if (*p != '-')			return (-1);		for (last = 0, ++p; *p && isdigit(*p); ++p)			last = last * 10 + *p - '0';	}	if (first > last || *p != '/')		return (-1);	for (len = 0, ++p; *p && isdigit(*p); ++p)		len = len * 10 + *p - '0';	if (*p || len < last - first + 1)		return (-1);	if (first == -1) {		RMDBGLOG((HTTPDEBUG, "    content range: [*/%lld]\n",		    (RMint64)len));		*length = 0;	} else {		RMDBGLOG((HTTPDEBUG, "    content range: [%lld-%lld/%lld]\n",		    (RMint64)first, (RMint64)last, (RMint64)len));		*length = last - first + 1;	}	*offset = first;	*size = len;	return (0);}/***************************************************************************** * Helper functions for authorization *//* * Base64 encoding */static RMascii *_http_base64(const RMascii *src){	static const RMascii base64[] =	    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"	    "abcdefghijklmnopqrstuvwxyz"	    "0123456789+/";	RMascii *str, *dst;	RMuint32 l;	RMint32 t, r;	l = strlen(src);	if ((str = RMMalloc(((l + 2) / 3) * 4 + 1)) == NULL)		return (NULL);	dst = str;	r = 0;	while (l >= 3) {		t = (src[0] << 16) | (src[1] << 8) | src[2];		dst[0] = base64[(t >> 18) & 0x3f];		dst[1] = base64[(t >> 12) & 0x3f];		dst[2] = base64[(t >> 6) & 0x3f];		dst[3] = base64[(t >> 0) & 0x3f];		src += 3; l -= 3;		dst += 4; r += 4;	}	switch (l) {	case 2:		t = (src[0] << 16) | (src[1] << 8);		dst[0] = base64[(t >> 18) & 0x3f];		dst[1] = base64[(t >> 12) & 0x3f];		dst[2] = base64[(t >> 6) & 0x3f];		dst[3] = '=';		dst += 4;		r += 4;		break;	case 1:		t = src[0] << 16;		dst[0] = base64[(t >> 18) & 0x3f];		dst[1] = base64[(t >> 12) & 0x3f];		dst[2] = dst[3] = '=';		dst += 4;		r += 4;		break;	case 0:		break;	}	*dst = 0;	return (str);}/* * Encode username and password */static RMint32_http_basic_auth(conn_t *conn, const RMascii *hdr, const RMascii *usr, const RMascii *pwd){	RMascii *upw, *auth;	RMint32 r;	RMDBGLOG((HTTPDEBUG, "usr: [%s]\n", usr));	RMDBGLOG((HTTPDEBUG, "pwd: [%s]\n", pwd));	upw = RMMalloc(strlen(usr)+strlen(pwd)+2);	if (sprintf(upw, "%s:%s", usr, pwd) == -1)		return (-1);	auth = _http_base64(upw);	RMFree(upw);	if (auth == NULL)		return (-1);	r = _http_cmd(conn, "%s: Basic %s", hdr, auth);	RMFree(auth);	return (r);}/* * Send an authorization header */static RMint32_http_authorize(conn_t *conn, const RMascii *hdr, const RMascii *p){	/* basic authorization */	if (strncasecmp(p, "basic:", 6) == 0) {		RMascii *user, *pwd, *str;		RMint32 r;		/* skip realm */		for (p += 6; *p && *p != ':'; ++p)			/* nothing */ ;		if (!*p || strchr(++p, ':') == NULL)			return (-1);		str = RMMallocAndDuplicateAscii(p);		if (str == NULL)			return (-1); /* XXX */		user = str;		pwd = strchr(str, ':');		*pwd++ = '\0';		r = _http_basic_auth(conn, hdr, user, pwd);		RMFree(str);		return (r);	}	return (-1);}/***************************************************************************** * Helper functions for connecting to a server or proxy *//* * Connect to the correct HTTP server or proxy. */static conn_t *_http_connect(struct url *URL, struct url *purl, RMHTTPFlags flags){	conn_t *conn;	RMint32 verbose;	RMint32 af;#ifdef INET6	af = AF_UNSPEC;#else	af = AF_INET;#endif	verbose = (flags & RM_HTTP_VERBOSE);	if (flags & RM_HTTP_IPV4)		af = AF_INET;#ifdef INET6	else if (flags & RM_HTTP_IPV6)		af = AF_INET6;#endif	if (purl && strcasecmp(URL->scheme, SCHEME_HTTPS) != 0) {		URL = purl;	} else if (strcasecmp(URL->scheme, SCHEME_FTP) == 0) {		/* can't talk http to an ftp server */		/* XXX should set an error code */		return (NULL);	}	if ((conn = _fetch_connect(URL->host, URL->port, af, verbose)) == NULL)		/* _fetch_connect() has already set an error code */		return (NULL);	if (strcasecmp(URL->scheme, SCHEME_HTTPS) == 0 &&	    _fetch_ssl(conn, verbose) == -1) {		_fetch_close(conn);		/* grrr */		errno = ECONNREFUSED;		_fetch_syserr();		return (NULL);	}	return (conn);}static struct url *_http_get_proxy(RMHTTPFlags flags){	struct url *purl;	RMascii *p;	if (flags & RM_HTTP_NO_PROXY)		return (NULL);	if (((p = getenv("HTTP_PROXY")) || (p = getenv("http_proxy"))) &&	    (purl = fetchParseURL(p))) {		if (!*purl->scheme)			strcpy(purl->scheme, SCHEME_HTTP);		if (!purl->port)			purl->port = _fetch_default_proxy_port(purl->scheme);		if (strcasecmp(purl->scheme, SCHEME_HTTP) == 0)			return (purl);		fetchFreeURL(purl);	}	return (NULL);}/***************************************************************************** * Core *//** * Connect to a specified server * @param request - the HTTP request * @return < 0 on error */static RMint32 __http_connect(struct http_request_s *request){	struct url *url, *purl;	if (request == NULL)		return(-1);	url = request->url;	purl = request->purl;	/* check port */	if (!url->port)		url->port = _fetch_default_port(url->scheme);	/* were we redirected to an FTP URL? */	if (purl == NULL && strcmp(url->scheme, SCHEME_FTP) == 0) {		RMDBGLOG((ENABLE,"Cannot redirect HTTP to FTP\n"));		return(-1);	}	/* connect to server or proxy */	if ((request->conn = _http_connect(url, purl, request->flags)) == NULL)		return(-1);		if (request->host)		RMFree(request->host);	request->host = (RMascii *) RMMalloc(strlen(url->host)+16);	strcpy(request->host, url->host);#ifdef INET6	if (strchr(url->host, ':')) {		snprintf(request->host, strlen(url->host)+15, "[%s]", url->host);	}#endif	if (url->port != _fetch_default_port(url->scheme)) {		snprintf(request->host + strlen(request->host), 15, ":%ld", url->port);	}	return(0);}/**  * Send a HTTP request * @param request - the HTTP request * @return <0 on error */static RMint32 __http_send_request(struct http_request_s *request){	struct url *url, *purl;	conn_t *conn;	const RMascii *p;	RMint32 status;	if (request == NULL)		return(-1);	url = request->url;	purl = request->purl;	conn = request->conn;	/* send request */	if (request->verbose)		_fetch_info("requesting %s://%s%s",		    url->scheme, request->host, url->doc);	if (purl) {		SAFE(_http_cmd(conn, "%s %s://%s%s HTTP/1.1",		    request->op, url->scheme, request->host, url->doc));	} else {		SAFE(_http_cmd(conn, "%s %s HTTP/1.1",		    request->op, url->doc));	}	/* virtual host */	SAFE(_http_cmd(conn, "Host: %s", request->host));	/* proxy authorization */	if (purl) {		if (*purl->user || *purl->pwd){			SAFE(_http_basic_auth(conn, "Proxy-Authorization",			    purl->user, purl->pwd));		} else if ((p = getenv("HTTP_PROXY_AUTH")) != NULL && *p != '\0') {			SAFE(_http_authorize(conn, "Proxy-Authorization", p));		}	}	/* server authorization */	if (request->need_auth || *url->user || *url->pwd) {		if (*url->user || *url->pwd){			SAFE(_http_basic_auth(conn, "Authorization", url->user, url->pwd));		} else if ((p = getenv("HTTP_AUTH")) != NULL && *p != '\0') {			SAFE(_http_authorize(conn, "Authorization", p));		} else {			_http_seterr(HTTP_NEED_AUTH);			return(-1);		}	}	/* other headers */	if ((p = getenv("HTTP_REFERER")) != NULL && *p != '\0') {		if (strcasecmp(p, "auto") == 0) {			SAFE(_http_cmd(conn, "Referer: %s://%s%s", url->scheme, request->host, url->doc));		} else {			SAFE(_http_cmd(conn, "Referer: %s", p));		}	}	/* Custom header */	if (request->custom_header){		SAFE(_http_cmd(conn,"%s", request->custom_header));	}		if ((p = getenv("HTTP_USER_AGENT")) != NULL && *p != '\0')		SAFE(_http_cmd(conn, "User-Agent: %s", p));	/*else		SAFE(_http_cmd(conn, "User-Agent: %s " _LIBFETCH_VER, getprogname()));*/	if (url->offset > 0 || request->open){		if (request->open){			SAFE(_http_cmd(conn, "Range: bytes=%lld-%lld", (RMint64)url->offset, (RMint64)url->offset_end));		} else {			SAFE(_http_cmd(conn, "Range: bytes=%lld-", (RMint64)url->offset));		}	}	if (!request->open){		SAFE(_http_cmd(conn, "Connection: close"));	}	SAFE(_http_cmd(conn, ""));	return(0);}/** * Get HTTP reply from the server * @param request - the HTTP request * @return < 0 on error */static RMint32 __http_get_reply(struct http_request_s *request){	conn_t *conn;	if (request == NULL){		/* RMDBGLOG((ENABLE,"Null request\n")); */		return(-1);	}	conn = request->conn;		/* get reply */	switch (_http_get_reply(conn)) {	case HTTP_OK:		if (request->url && request->url->offset > 0){			/* We should have received a HTTP_PARTIAL, see RFC			 * 2616, section 14.35 */			RMDBGLOG((HTTPDEBUG,"HTTP_OK received instead of HTTP_PARTIAL, range not satisfied\n"));			request->last_read_short = 1;			return(-1);		}		break;	case HTTP_CONTINUE:		break;				/* Retry after we read headers */	case HTTP_PARTIAL:		/* fine */		break;	case HTTP_MOVED_PERM:	case HTTP_MOVED_TEMP:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频一区二区| 日本亚洲三级在线| 91无套直看片红桃| 亚洲男人的天堂网| 欧美天堂一区二区三区| 午夜精品福利一区二区蜜股av| 欧美午夜一区二区三区免费大片| 亚洲一区在线电影| 欧美一区二区久久久| 激情六月婷婷久久| 中国av一区二区三区| 91搞黄在线观看| 青青国产91久久久久久| 国产亚洲一本大道中文在线| av在线播放成人| 日韩国产在线观看一区| 久久免费偷拍视频| 色婷婷av久久久久久久| 婷婷六月综合亚洲| 国产午夜精品一区二区三区嫩草| 成人黄色国产精品网站大全在线免费观看 | 久久夜色精品国产欧美乱极品| 国产一区二区成人久久免费影院| 欧美国产精品中文字幕| 欧美日韩在线播放三区| 蜜桃av一区二区在线观看| 欧美激情综合网| 欧美高清视频一二三区 | 中日韩av电影| 91精品国产高清一区二区三区蜜臀| 国产一区二区三区观看| 亚洲一区二区三区视频在线播放| 欧美tickling挠脚心丨vk| 色欧美片视频在线观看| 九九视频精品免费| 亚洲精品国产一区二区精华液| 精品国产乱码久久久久久老虎| 99国内精品久久| 美女任你摸久久| 亚洲一区二区三区国产| 日本一区二区三区电影| 欧美精品久久天天躁| 成人动漫精品一区二区| 久久se这里有精品| 亚洲影视在线播放| 国产精品家庭影院| 精品国产电影一区二区| 欧美在线你懂得| 99久久伊人久久99| 国产盗摄视频一区二区三区| 婷婷中文字幕综合| 亚洲乱码中文字幕| 国产精品视频一二三区| 精品国产乱码久久久久久久久| 不卡的av在线| 粉嫩嫩av羞羞动漫久久久| 亚洲一区二区三区四区五区黄 | 精品久久久久久久久久久久久久久久久| 色综合久久精品| 成人免费看视频| 国产精品18久久久久久久网站| 日本不卡视频在线| 亚洲永久精品国产| 伊人婷婷欧美激情| 亚洲欧美视频在线观看| 中文字幕中文字幕一区二区| 国产无遮挡一区二区三区毛片日本| 日韩一区二区三区四区五区六区| 在线精品视频一区二区三四| 色婷婷一区二区三区四区| 99精品视频中文字幕| 不卡的电视剧免费网站有什么| 国产一区二区看久久| 国产酒店精品激情| 韩国三级在线一区| 国内精品国产三级国产a久久| 日韩福利电影在线| 国产欧美一区二区在线观看| 久久电影网电视剧免费观看| 丝袜美腿亚洲综合| 日韩国产欧美视频| 精品一区二区三区的国产在线播放| 日韩在线一二三区| 麻豆精品一区二区| 国产一区二区三区黄视频| 国产在线不卡一区| 成人免费福利片| 91网站最新地址| 欧洲精品在线观看| 欧美精选午夜久久久乱码6080| 欧美丰满一区二区免费视频| 欧美一二三区在线| www国产成人| 亚洲三级电影全部在线观看高清| 一区二区三区在线视频免费观看| 一二三四社区欧美黄| 日韩制服丝袜先锋影音| 狠狠色丁香婷婷综合| 成人黄色777网| 色丁香久综合在线久综合在线观看| 欧美性xxxxxx少妇| 精品乱人伦一区二区三区| 欧美激情一区二区三区全黄| 亚洲美女免费视频| 日韩精彩视频在线观看| 国产成人精品1024| 欧美在线看片a免费观看| 精品奇米国产一区二区三区| 国产精品久久久一本精品| 亚洲美女在线国产| 久久精品国内一区二区三区| 成人国产精品视频| 欧美裸体一区二区三区| 欧美—级在线免费片| 午夜精品一区在线观看| 国产精品亚洲午夜一区二区三区| 色婷婷久久久综合中文字幕 | 国产在线精品视频| 色999日韩国产欧美一区二区| 91精品国产91热久久久做人人| 国产拍欧美日韩视频二区| 亚洲bt欧美bt精品| 高清久久久久久| 日韩一区二区精品在线观看| 中文字幕一区二区在线观看| 麻豆精品一二三| 在线观看亚洲a| 国产日韩高清在线| 日本成人超碰在线观看| 91在线播放网址| 精品精品国产高清a毛片牛牛| 综合久久久久久| 国产一区91精品张津瑜| 欧美久久久影院| ...xxx性欧美| 国产精品99久久久| 日韩精品一区二区三区视频播放 | 蜜桃久久久久久久| 欧美色综合久久| 中文字幕一区视频| 国产精品一区二区久久精品爱涩| 欧美精品乱码久久久久久按摩| 亚洲天堂中文字幕| 国产剧情一区在线| 久久久久久久久一| 视频一区二区欧美| 色88888久久久久久影院按摩| 国产欧美精品区一区二区三区 | 94-欧美-setu| 中国av一区二区三区| 国产在线精品一区二区不卡了| 在线播放国产精品二区一二区四区 | 久久久99免费| 蜜臀精品久久久久久蜜臀| 欧美日韩在线播放| 亚洲品质自拍视频| 99国产欧美另类久久久精品| 国产精品国产馆在线真实露脸 | 成人福利视频在线看| 久久久精品人体av艺术| 麻豆精品视频在线| 欧美一区二区三区免费在线看| 亚洲超碰97人人做人人爱| 欧美色欧美亚洲另类二区| 亚洲精品成人天堂一二三| 成人免费观看男女羞羞视频| 中文字幕第一页久久| a级精品国产片在线观看| 国产精品美女久久福利网站| 成人爱爱电影网址| 亚洲欧美视频一区| 欧美日韩一区二区三区免费看| 一区二区三区av电影| 欧美三级一区二区| 亚瑟在线精品视频| 91精品国产综合久久婷婷香蕉| 日韩二区在线观看| 欧美变态口味重另类| 国产一区二区伦理片| 中文字幕国产一区二区| www.av精品| 一区二区三区欧美亚洲| 91精品国产综合久久精品性色 | 国产毛片精品视频| 久久久五月婷婷| 99re66热这里只有精品3直播| 亚洲女同一区二区| 欧美色视频在线| 精品一区中文字幕| 中文字幕成人在线观看| 色综合天天综合网国产成人综合天| 一区二区三区产品免费精品久久75| 91福利国产精品| 日日摸夜夜添夜夜添国产精品| 日韩欧美亚洲另类制服综合在线| 国产曰批免费观看久久久| 最好看的中文字幕久久| 欧美高清www午色夜在线视频| 狠狠色狠狠色合久久伊人| 综合精品久久久|