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

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

?? http.c

?? Dag Erling http library source code
?? C
?? 第 1 頁 / 共 4 頁
字號:
	case HTTP_SEE_OTHER:		/*		 * Not so fine, but we still have to read the		 * headers to get the new location.		 */		break;	case HTTP_NEED_AUTH:		if (request->need_auth) {			/*			 * We already sent out authorization code,			 * so there's nothing more we can do.			 */			_http_seterr(conn->err);			return(-1);		}		/* try again, but send the password this time */		if (request->verbose)			_fetch_info("server requires authorization");		break;	case HTTP_NEED_PROXY_AUTH:		/*		 * If we're talking to a proxy, we already sent		 * our proxy authorization code, so there's		 * nothing more we can do.		 */		_http_seterr(conn->err);		return(-1);	case HTTP_BAD_RANGE:		/*		 * This can happen if we ask for 0 bytes because		 * we already have the whole file.  Consider this		 * a success for now, and check sizes later.		 */		request->last_read_short = 1;		break;	case HTTP_PROTOCOL_ERROR:		/* fall through */	case -1:		/* RMDBGLOG((ENABLE,"Error getting reply : errno = %d\n", errno)); */		_fetch_syserr();		return(-1);	default:		_http_seterr(conn->err);		if (!request->verbose)			return (-1);		/* fall through so we can get the full error message */	}	return(0);}/** * Get headers from a HTTP reply * @param request - the HTTP request * @return < 0 on error */static RMint32 __http_get_headers(struct http_request_s *request){	struct url *url, *purl;	conn_t *conn;	const RMascii *p;	hdr_t h;	if (request == NULL)		return(-1);	url = request->url;	purl = request->purl;	conn = request->conn;	/* get headers */	do {		switch ((h = _http_next_header(conn, &p))) {		case hdr_syserror:			_fetch_syserr();			return (-1);		case hdr_error:			_http_seterr(HTTP_PROTOCOL_ERROR);			return (-1);		case hdr_content_length:			_http_parse_length(p, &request->clength);			break;		case hdr_content_range:			_http_parse_range(p, &request->offset, &request->length, &request->size);			break;		case hdr_last_modified:			_http_parse_mtime(p, &request->mtime);			break;		case hdr_location:			if (!HTTP_REDIRECT(conn->err))				break;			if (request->new)				RMFree(request->new);			if (request->verbose)				_fetch_info("%d redirect to %s", conn->err, p);			if (*p == '/')				/* absolute path */				request->new = fetchMakeURL(url->scheme, url->host, url->port, p,				    url->user, url->pwd);			else				request->new = fetchParseURL(p);			if (request->new == NULL) {				/* XXX should set an error code */				RMDBGLOG((ENABLE, "failed to parse new URL\n"));				return(-1);			}			if (!*request->new->user && !*request->new->pwd) {				strcpy(request->new->user, url->user);				strcpy(request->new->pwd, url->pwd);			}			request->new->offset = url->offset;			request->new->length = url->length;			break;		case hdr_transfer_encoding:			/* XXX weak test*/			request->chunked = (strcasecmp(p, "chunked") == 0);			/* RMDBGLOG((HTTPDEBUG,"Chunked !!! %d\n", request->chunked)); */			break;		case hdr_www_authenticate:			if (conn->err != HTTP_NEED_AUTH)				break;			/* if we were smarter, we'd check the method and realm */			break;		case hdr_connection:			/* Assume the connection will close, need to reopen in			 * case of open connection */			if (request->open)				request->need_reopen = 1;		case hdr_end:			/* fall through */		case hdr_unknown:			/* ignore */			break;		}	} while (h > hdr_end);	return(0);}	/** * Send a single HTTP request * @param request - the HTTP request * @return -1 on error, 0 if redirect, 1 if HIT. In case of a redirect, the * "new" field is set to the redirected URL. */ static RMint32 _http_single_request(struct http_request_s *request){	RMint32 status; 	if (request == NULL)		return(-1);	request->new = NULL;	request->chunked = 0;	request->offset = 0;	request->clength = -1;	request->length = -1;	request->mtime = 0;		status = __http_connect(request);	if (status < 0)		return(-1);		status = __http_send_request(request);	if (status < 0)		return(status);get_reply:	status = __http_get_reply(request);	if (status < 0)		return(status);	status = __http_get_headers(request);	if (status < 0) 		return(status);	if( request->conn->err == HTTP_CONTINUE) {		goto get_reply;	}	/* we need to provide authentication */	if (request->conn->err == HTTP_NEED_AUTH) {		request->e = request->conn->err;		request->need_auth = 1;		_fetch_close(request->conn);		request->conn = NULL;		return(0);	}	/* requested range not satisfiable */	if (request->conn->err == HTTP_BAD_RANGE) {		if (request->url->offset == request->size && request->url->length == 0) {			/* asked for 0 bytes; fake it */			request->offset = request->url->offset;			request->conn->err = HTTP_OK;			return(1);		} else {			_http_seterr(request->conn->err);			return(-1);		}	}	/* we have a hit or an error */	if (request->conn->err == HTTP_OK || 	    request->conn->err == HTTP_PARTIAL || 	    HTTP_ERROR(request->conn->err))		return(1);	/* all other cases: we got a redirect */	request->e = request->conn->err;	request->need_auth = 0;	_fetch_close(request->conn);	request->conn = NULL;	if (!request->new) {		RMDBGLOG((ENABLE, "redirect with no new location\n"));		return(1);	}	return(0);}/* * Send a request and process the reply * * @param URL - url to fetch * @param op - operation requested (GET, POST, ...) * @param us - url stat * @param purl - proxy url * @param flasg * @return HTTPFile * * */static HTTPFile *_http_request(struct url *URL, const RMascii *op, struct url_stat *us,    struct url *purl, RMHTTPFlags flags){	struct http_request_s *request;	RMint32 i, n, status;	HTTPFile *f;	request = (struct http_request_s *) RMMalloc(sizeof(struct http_request_s));	if (request == NULL){		RMDBGLOG((ENABLE,"Cannot malloc\n"));		return NULL;	}	RMMemset(request, 0, sizeof(struct http_request_s));	/* Handle the flags */	request->direct = (flags & RM_HTTP_NO_PROXY);	request->noredirect = (flags & RM_HTTP_NO_REDIRECT);	request->verbose = (flags & RM_HTTP_VERBOSE);	request->open = (flags & RM_HTTP_OPEN_CACHED);	if (request->open){		request->cache = init_cache(CACHENBUFFER, CACHEBUFFERSIZE);		if (request->cache == NULL)			goto ouch;	}	if ((flags & RM_HTTP_CUSTOM_HEADER) && (fetchCustomHeader != NULL)){		request->custom_header = RMMallocAndDuplicateAscii(fetchCustomHeader);	}	if ((flags & RM_HTTP_CUSTOM_HOOKS) && (fetchCustomCookie != NULL) && (fetchCustomHooks != NULL)){		request->custom_cookie = fetchCustomCookie;		request->custom_hooks = fetchCustomHooks;		fetchCustomCookie = NULL;		fetchCustomHooks = NULL;		/* Perform a custom open hook if present */		if (request->custom_hooks->open != NULL)			request->custom_hooks->open(request->custom_cookie);	}		/* try the provided URL first */	request->url = URL;	/* First request, open mode, only HEAD */	if (request->open)		request->op = "HEAD";	else		request->op = op;	request->us = us;	request->purl = purl;	request->flags = flags;	request->e = HTTP_PROTOCOL_ERROR;	request->need_auth = 0;	request->size = -1;	if (request->direct && request->purl) {		fetchFreeURL(request->purl);		request->purl = NULL;	}	/* if the A flag is set, we only get one try */	n = request->noredirect ? 1 : MAX_REDIRECT;	i = 0;	do {		status = _http_single_request(request);		if (status < 0)			goto ouch;		else if (status > 0)			break;		if (request->url != URL)			fetchFreeURL(request->url);		request->url = request->new;		request->new = NULL;	} while (++i < n);	/* we failed, or ran out of retries */	if (request->conn == NULL) {		_http_seterr(request->e);		goto ouch;	}	if (request->open)		request->op = op;	RMDBGLOG((HTTPDEBUG, "offset %lld, length %lld,"		  " size %lld, clength %lld\n",		  (RMint64)request->offset, (RMint64)request->length,		  (RMint64)request->size, (RMint64)request->clength));	/* check for inconsistencies, computed length and clength should be the same if set */	if (request->clength != -1 && request->length != -1 && request->clength != request->length) {		_http_seterr(HTTP_PROTOCOL_ERROR);		goto ouch;	}	/* Content-Length: not provided, use computed length if we had a Range: */	if (request->clength == -1 && request->length != -1)		request->clength = request->length;	/* We allow request->length != request->size, length is length of this	 * request, whereas size is the total length of the target */	/* if (request->length != -1 && request->size != -1 && request->length != request->size) {		_http_seterr(HTTP_PROTOCOL_ERROR);		goto ouch;	}*/	/* For a closed connection, use the content length as the size */	if (request->size == -1 && !request->open)		request->size = request->clength;	/* fill in stats */	if (request->us) {		request->us->size = request->size;		request->us->atime = request->us->mtime = request->mtime;	}	/* too far? */	if (URL->offset > 0 && request->offset > URL->offset) {		_http_seterr(HTTP_PROTOCOL_ERROR);		goto ouch;	}	/* report back real offset and size */	URL->offset = request->offset;	URL->length = request->clength;	/* wrap it up in a HTTPFile*/	if ((f = _http_funopen(request)) == NULL) {		_fetch_syserr();		goto ouch;	}	/*if (request->url != URL)		fetchFreeURL(request->url);	if (request->purl)		fetchFreeURL(request->purl);*/	if (HTTP_ERROR(request->conn->err)) {		fetchClose(f);		f = NULL;	}	return (f);ouch:	if (request->cache)		destroy_cache(request->cache);	if (request->url)		fetchFreeURL(request->url);	if (request->purl)		fetchFreeURL(request->purl);	if (request->conn != NULL)		_fetch_close(request->conn);	if (request->host != NULL)		RMFree(request->host);	if (request->custom_header != NULL)		RMFree(request->custom_header);	RMFree(request);	return (NULL);}/***************************************************************************** * Entry points *//** * Set custom hooks. The custom hooks will be used if the * RM_HTTP_CUSTOM_HOOKS flag is set during the fetchOpen. * * @param cookie - cookie used by the hooks. * @param hooks - set of custom callbacks that use the cookie. * @return void */void fetchSetCustomHooks(void *cookie, HttpHookOps *hooks){	fetchCustomCookie = cookie;	fetchCustomHooks = hooks;}/** * Set custom headers. The custom headers will be used if the * RM_HTTP_CUSTOM_HEADER flag is set during the fetchOpen. * * @param header - custom header, should use "\r\n" as end of line, NULL *                 terminated. The final "\r\n" will be added upon sending over *                 the wire.  This string will be duplicated by each fetchOpen, *                 so it should ne be freed before the fetchOpen. * @return void */void fetchSetCustomHeader(RMascii *header){	fetchCustomHeader = header;}/* * Retrieve and stat a file by HTTP */HTTPFile *fetchXGetHTTP(struct url *URL, struct url_stat *us, RMHTTPFlags flags){	return (_http_request(URL, "GET", us, _http_get_proxy(flags), flags));}/* * Retrieve a file by HTTP */HTTPFile *fetchGetHTTP(struct url *URL, RMHTTPFlags flags){	return (fetchXGetHTTP(URL, NULL, flags));}HTTPFile *fetchOpen(const RMascii *URL, RMHTTPFlags flags){	struct url *url;	RMDBGLOG((ENABLE,"Open %s\n", URL));	url = fetchParseURL(URL);	if (url == NULL)		return(NULL);		return(fetchXGetHTTP(url, NULL, flags));}/* * Get an HTTP document's metadata */RMint32fetchStatHTTP(struct url *URL, struct url_stat *us, RMHTTPFlags flags){	HTTPFile *f;	f = _http_request(URL, "HEAD", us, _http_get_proxy(flags), flags);	if (f == NULL)		return (-1);	fetchClose(f);	return (0);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费视频一区| 欧美xxxxx牲另类人与| 欧美一区二区三区视频免费播放| 午夜欧美大尺度福利影院在线看| 精品国产成人系列| 成人久久18免费网站麻豆| 亚洲福利视频三区| 中国色在线观看另类| 欧美乱妇15p| 日本久久精品电影| 国产精品一区二区久久精品爱涩 | 91啪亚洲精品| 麻豆精品一区二区av白丝在线| 国产精品理论片在线观看| 91精品国产黑色紧身裤美女| 99免费精品在线| 国产一区啦啦啦在线观看| 亚洲国产毛片aaaaa无费看| 精品成人一区二区三区| 在线电影一区二区三区| 91色乱码一区二区三区| 国产精品一区二区免费不卡| 日韩 欧美一区二区三区| 亚洲欧洲日韩在线| 国产精品美女www爽爽爽| 欧美色欧美亚洲另类二区| 国产一区在线观看麻豆| 一区二区三区波多野结衣在线观看| 国产片一区二区三区| 精品成人a区在线观看| 欧美色偷偷大香| 欧美伊人久久久久久午夜久久久久| 99久久国产综合精品色伊| 国产原创一区二区| 视频在线观看国产精品| 亚洲一级片在线观看| 一区二区三区91| 欧美一级二级三级蜜桃| 日韩一区二区在线播放| 欧美乱妇23p| 日韩一区二区视频| 欧美日韩高清一区二区| 欧美丝袜丝交足nylons图片| 欧美午夜精品久久久久久超碰| 久久se这里有精品| 免播放器亚洲一区| 紧缚捆绑精品一区二区| 欧美激情在线看| 中文字幕av免费专区久久| 国产婷婷色一区二区三区四区| 9i在线看片成人免费| 91丨porny丨首页| 欧美亚洲国产一区二区三区va| 91视频在线观看免费| 欧美日本国产一区| 精品国产乱码久久| 综合自拍亚洲综合图不卡区| 中文字幕精品一区二区精品绿巨人| 国产精品网曝门| 亚洲精品欧美激情| 亚洲一二三区在线观看| 另类小说色综合网站| 国产福利电影一区二区三区| 99在线视频精品| 欧美男同性恋视频网站| 26uuu欧美日本| 中文字幕一区二区在线观看| 久久久精品tv| 亚洲美女电影在线| 精品亚洲成a人| 亚洲成人av电影在线| 久久国产乱子精品免费女| 懂色av一区二区三区免费观看| 色婷婷精品久久二区二区蜜臀av| 欧美肥胖老妇做爰| 91麻豆精品国产91久久久使用方法 | 欧美xxxxx牲另类人与| 成人欧美一区二区三区黑人麻豆| 午夜精品久久久久久久| 亚洲精品国产a久久久久久| 一区二区三区中文字幕电影| 视频一区欧美日韩| 成人av先锋影音| 91精品国产综合久久婷婷香蕉| 久久综合久久综合亚洲| 亚洲无线码一区二区三区| 寂寞少妇一区二区三区| 欧美日韩不卡视频| 国产精品久久久久国产精品日日| 午夜精品久久久| 91亚洲精品久久久蜜桃| 99久久精品免费| 欧美大片在线观看一区| 亚洲另类在线制服丝袜| 国产黄色精品网站| 91精品国产综合久久小美女| 久久久一区二区三区| 亚洲成人一区二区在线观看| 免费三级欧美电影| 黄色小说综合网站| 成人精品视频网站| 国产欧美一区二区精品婷婷 | 欧美在线观看一区| 免费日本视频一区| 国产精品视频你懂的| 欧美日韩国产另类一区| 99久久99久久精品国产片果冻| 韩国v欧美v日本v亚洲v| 人人狠狠综合久久亚洲| 亚洲黄一区二区三区| 中文天堂在线一区| 日韩视频一区在线观看| 777xxx欧美| 欧美日韩精品福利| 欧美日韩在线观看一区二区| 一本久道中文字幕精品亚洲嫩| 99v久久综合狠狠综合久久| 国产91综合一区在线观看| 国产精品69毛片高清亚洲| 九色porny丨国产精品| 麻豆高清免费国产一区| 久久国产精品色| 韩国中文字幕2020精品| 国产一区激情在线| 国产激情偷乱视频一区二区三区| 国产最新精品精品你懂的| 精品在线你懂的| 国产曰批免费观看久久久| 国产乱色国产精品免费视频| 高清久久久久久| 成人av在线资源网站| 97久久超碰精品国产| 欧美亚洲高清一区| 5月丁香婷婷综合| 精品国产91久久久久久久妲己| 精品国产一区二区精华| 中文在线资源观看网站视频免费不卡 | 欧美在线小视频| 在线精品视频免费播放| 欧美日韩精品是欧美日韩精品| 日韩一区二区三区四区| 国产三级精品三级在线专区| 国产精品国产成人国产三级 | 国产成人在线免费| 91色porny| 91精品国产综合久久小美女| 国产日韩三级在线| 亚洲一区二区三区视频在线播放| 五月综合激情日本mⅴ| 久久av老司机精品网站导航| av中文一区二区三区| 欧美视频一区二区三区四区| 欧美日韩中字一区| 国产日韩欧美精品一区| 亚洲第一成人在线| 国产美女娇喘av呻吟久久 | 成人午夜在线播放| 欧美日韩国产精品自在自线| 久久久亚洲午夜电影| 一区二区欧美在线观看| 国产最新精品免费| 欧美日韩国产免费一区二区| 国产日韩精品一区| 日韩精品每日更新| 成人动漫一区二区三区| 日韩欧美一区电影| 亚洲激情成人在线| 大胆亚洲人体视频| 日韩午夜精品视频| 亚洲电影激情视频网站| 成人精品视频一区二区三区| 日韩欧美久久一区| 亚洲主播在线播放| 99精品视频中文字幕| 久久新电视剧免费观看| 亚洲国产美国国产综合一区二区| 国产精品一区三区| 日韩欧美专区在线| 亚洲sss视频在线视频| 91在线播放网址| 欧美经典三级视频一区二区三区| 日韩国产欧美三级| 色婷婷综合五月| 国产精品久久一级| 国产91精品在线观看| 日韩三级在线观看| 午夜精品久久久久久久久久久 | 中文字幕日韩一区二区| 久久精品免费观看| 欧美精品v国产精品v日韩精品| 最新不卡av在线| 成人黄动漫网站免费app| 亚洲精品一区二区三区影院 | 国产精一品亚洲二区在线视频| 91精品国产91久久综合桃花| 亚洲高清免费观看| 欧美三级视频在线观看| 亚洲国产日韩一级| 欧美日韩国产a| 亚洲妇女屁股眼交7|