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

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

?? htaabrow.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 3 頁
字號:
		char * tmplate = make_template(url);		basic = (HTBasic *) HTAA_updateNode(proxy, BASIC_AUTH, rm,						    tmplate, NULL);		/* if the previous authentication failed, then try again */		if (HTRequest_AAretrys (request) > 1 		    && status == HT_NO_ACCESS && basic)		  basic->retry = YES;		HT_FREE(url);		HT_FREE(tmplate);	    }	}	/*	** For some reason the authentication failed so we have to ask the user	** if we should try again. It may be because the user typed the wrong	** user name and password	*/	if (basic && basic->retry) {	    HTAlertCallback * prompt = HTAlert_find(HT_A_CONFIRM);	    /*	    ** Do we have a method registered for prompting the user whether	    ** we should retry	    */	    if (prompt) {		int code = proxy ?		    HT_MSG_RETRY_PROXY_AUTH : HT_MSG_RETRY_AUTHENTICATION;		if ((*prompt)(request, HT_A_CONFIRM, code,			      NULL, NULL, NULL) != YES)		    return HT_ERROR;	    }	}	return HT_OK;    }    HTTRACE(AUTH_TRACE, "Auth........ No challenges found\n");    return HT_ERROR;}/* ------------------------------------------------------------------------- *//*				Digest Authentication                        *//* ------------------------------------------------------------------------- *//***	Prompt the user for username and password.**	Returns	YES if user name was typed in, else NO*/PRIVATE int prompt_digest_user (HTRequest * request, const char * realm,				HTDigest * digest){    HTAlertCallback * cbf = HTAlert_find(HT_A_USER_PW);    /* If no method for prompting the user then we might as well give up */    if (!cbf) return HT_ERROR;    /* Otherwise go ahead and ask the user */    if (request) {	HTAlertPar * reply = HTAlert_newReply();	int msg = digest->proxy ? HT_MSG_PROXY_UID : HT_MSG_UID;	BOOL res = (*cbf)(request, HT_A_USER_PW, msg,			  digest->uid, (char *) realm, reply);	if (res) {	    HT_FREE(digest->uid);	    HT_FREE(digest->pw);	    digest->uid = HTAlert_replyMessage(reply);	    digest->pw = HTAlert_replySecret(reply);	}	HTAlert_deleteReply(reply);	return res ? HT_OK : HT_ERROR;    }    return HT_OK;}PRIVATE HTDigest * HTDigest_new(){    HTDigest * me = NULL;    if ((me = (HTDigest *) HT_CALLOC(1, sizeof(HTDigest))) == NULL)	HT_OUTOFMEM("HTDigest_new");    me->algorithm = HTDaMD5;                   /* use md5 as a default value */    me->retry = YES;			       /* Ask the first time through */    return me;}/*	HTDigest_delete**	--------------**	Deletes a "digest" information object**	A single object may be registered multiple places in the URL tree.**	We keep a simple reference count on the object so that we know**	when to delete the object.*/PUBLIC int HTDigest_delete (void * context){    HTDigest * digest = (HTDigest *) context;    if (digest) {	if (digest->references <= 0) {	    HT_FREE(digest->uid);	    HT_FREE(digest->pw);	    HT_FREE(digest->realm);	    HT_FREE(digest->cnonce);	    HT_FREE(digest->nonce);	    HT_FREE(digest->opaque);	    HT_FREE(digest->qop);	    HT_FREE(digest);	    return YES;	}	else	    digest->references--;    }    return NO;}/*	HTDigest_reset**	--------------**      When digest authentication fails, we simulate a new digest by**      erasing the old one, but keeping the uid and the password. This is**      so that we can take into account the stale nonce protocol, without**      prompting the user for a new password.*/PRIVATE int HTDigest_reset (HTDigest *digest){    if (digest) {	digest->nc = 0l;	digest->stale = 0;	digest->retry = YES;	HT_FREE(digest->cnonce);	HT_FREE(digest->nonce);	HT_FREE(digest->opaque);	HT_FREE(digest->qop);	return YES;    }    else	return NO;}/*	HTDigest_updateInfo**	--------------**      This function updates the digest with whatever new ** 	authentification information the server sent back.*/PUBLIC int HTDigest_updateInfo (HTRequest *request, HTResponse *response,				void * context, int status){    HTAssocList * challenge = HTResponse_challenge(response);    const char * realm =  HTRequest_realm (request);    if (request && challenge && realm) {        BOOL proxy = 0;	char * value = NULL;	char * token = NULL;	char * auth_info = NULL;		HTDigest *digest;	char *url;	/*	** try to find the magic string in the challenge 	*/	HTTRACE(AUTH_TRACE, "Digest Update.. Processing authentication-info\n");	if ((auth_info = HTAssocList_findObject(challenge, DIGEST_AI)))	    proxy = 0;	else if ((auth_info = HTAssocList_findObject(challenge, 						     PROXY_DIGEST_AI)))	    proxy = 1;	else {	    HTTRACE(AUTH_TRACE, "Digest Update.. Didn't find any authentication-info\n");	    return HT_OK;	}    	/* 	** find the digest credentials 	*/	if (proxy) {	    url = HTRequest_proxy(request);	    digest = (HTDigest *) HTAA_updateNode (proxy, DIGEST_AUTH, realm,						   url, NULL);	} else {	    url = HTAnchor_address((HTAnchor *)				   HTRequest_anchor(request));	    digest = (HTDigest *) HTAA_updateNode (proxy, DIGEST_AUTH, realm, 						   url, NULL);	    HT_FREE(url);	}	if (!digest) {	    HTTRACE(AUTH_TRACE, "Digest Update.. Error: received authentication-info without having a local digest\n");		    return HT_ERROR;	}	/*	**  Search through the set of parameters in the Authentication-info	**  header.	*/	while ((token = HTNextField(&auth_info))) {	    if (!strcasecomp(token, "nextnonce")) {		if ((value = HTNextField(&auth_info))) {		    HT_FREE (digest->nonce);		    StrAllocCopy(digest->nonce, value);		} else if (!strcasecomp(token, "qop")) {		    value = HTNextField(&auth_info);		    /* split, process  the qop, report errors */		} else if (!strcasecomp(token, "rspauth")) {		    value = HTNextField(&auth_info);		    /* process rspauth */		} else if (!strcasecomp(token, "cnonce")) {		    value = HTNextField (&auth_info);		    if (value && strcmp (digest->cnonce, value)) {			/* print an alert?, bad cnonce? */		    }			} else if (!strcasecomp(token, "nc")) {		    value = HTNextField(&auth_info);		    /* compare and printo some error? */		}	    }		}    }    return HT_OK;}    /***    Simple function to add a parameter/value pair to a string***/PRIVATE BOOL add_param (char ** dest, char *param, char * value, BOOL quoted){    char *tmp = *dest;    if (!param || *param == '\0' || !value || *value == '\0')	return NO;    /* if there was a previous parameter, we add the next one in the       following line */    if (tmp) 	StrAllocCat(tmp, ",");    /* copy the new parameter and value */    StrAllocCat(tmp, param);    StrAllocCat(tmp, "=");    if (quoted) {    StrAllocCat(tmp, "\"");    StrAllocCat(tmp, value);    StrAllocCat(tmp, "\"");    } else	StrAllocCat(tmp, value);    *dest = tmp;    return YES;}/***  Code derived from draft-ietf-http-authentication-03 starts here*/PRIVATE void CvtHex (HASH Bin, HASHHEX Hex){    unsigned short i;    unsigned char j;    for (i = 0; i < HASHLEN; i++) {	j = (Bin[i] >> 4) & 0xf;	if (j <= 9)	    Hex[i*2] = (j + '0');	else	    Hex[i*2] = (j + 'a' - 10);	j = Bin[i] & 0xf;	if (j <= 9)	    Hex[i*2+1] = (j + '0');	else	    Hex[i*2+1] = (j + 'a' - 10);  }    Hex[HASHHEXLEN] = '\0';}/* calculate H(A1) as per spec */PRIVATE void DigestCalcHA1 (int algorithm, char * pszAlg, char * pszUserName,			    char * pszRealm, char * pszPassword,			    char * pszNonce, char * pszCNonce,			    HASHHEX SessionKey){    HTDigestContext MdCtx;    HASH HA1;    HTDigest_init (&MdCtx, algorithm);    HTDigest_update (&MdCtx, pszUserName, strlen(pszUserName));    HTDigest_update (&MdCtx, ":", 1);    HTDigest_update (&MdCtx, pszRealm, strlen(pszRealm));    HTDigest_update (&MdCtx, ":", 1);    HTDigest_update (&MdCtx, pszPassword, strlen(pszPassword));    HTDigest_final (HA1, &MdCtx);    if (strcasecomp (pszAlg, "md5-sess") == 0) {	HTDigest_init (&MdCtx, algorithm);	HTDigest_update (&MdCtx, HA1, strlen (HA1));	HTDigest_update (&MdCtx, ":", 1);	HTDigest_update (&MdCtx, pszNonce, strlen(pszNonce));	HTDigest_update (&MdCtx, ":", 1);	HTDigest_update (&MdCtx, pszCNonce, strlen(pszCNonce));	HTDigest_final (HA1, &MdCtx);    }    CvtHex (HA1, SessionKey);}/* calculate request-digest/response-digest as per HTTP Digest spec */PRIVATE void DigestCalcResponse (    int    algorithm,      /* message digest algorithm */    HASHHEX HA1,           /* H(A1) */    char * pszNonce,       /* nonce from server */    char * pszNonceCount,  /* 8 hex digits */    char * pszCNonce,      /* client nonce */    char * pszQop,         /* qop-value: "", "auth", "auth-int" */    char * pszMethod,      /* method from the request */    char * pszDigestUri,   /* requested URL */    char * HEntity,        /* H(entity body) if qop="auth-int" */    char * Response        /* request-digest or response-digest */    ){    HTDigestContext MdCtx;    HASH HA2;    HASH RespHash;    HASHHEX HA2Hex;    /* calculate H(A2) */    HTDigest_init (&MdCtx, algorithm);    HTDigest_update (&MdCtx, pszMethod, strlen(pszMethod));    HTDigest_update (&MdCtx, ":", 1);    HTDigest_update (&MdCtx, pszDigestUri, strlen(pszDigestUri));    if (pszQop && strcasecomp (pszQop, "auth-int") == 0) {	HTDigest_update (&MdCtx, ":", 1);	HTDigest_update (&MdCtx, HEntity, HASHHEXLEN);    }    HTDigest_final (HA2, &MdCtx);    CvtHex (HA2, HA2Hex);    /* calculate response */    HTDigest_init (&MdCtx, algorithm);    HTDigest_update (&MdCtx, HA1, HASHHEXLEN);    HTDigest_update (&MdCtx, ":", 1);    HTDigest_update (&MdCtx, pszNonce, strlen(pszNonce));    HTDigest_update (&MdCtx, ":", 1);    if (pszQop && *pszQop) {	HTDigest_update (&MdCtx, pszNonceCount, strlen(pszNonceCount));	HTDigest_update (&MdCtx, ":", 1);	HTDigest_update (&MdCtx, pszCNonce, strlen(pszCNonce));	HTDigest_update (&MdCtx, ":", 1);	HTDigest_update (&MdCtx, pszQop, strlen(pszQop));	HTDigest_update (&MdCtx, ":", 1);    }    HTDigest_update (&MdCtx, HA2Hex, HASHHEXLEN);    HTDigest_final (RespHash, &MdCtx);    CvtHex (RespHash, Response);}	/***  Code derived from draft-ietf-http-authentication-03 ends here*//***	Make digest authentication scheme credentials and register this**	information in the request object as credentials. They will then**	be included in the request header. An example is****                 "Digest nonce:cnonce:blahblahblhah:digest-response"****	The function can both create normal and proxy credentials**	Returns	HT_OK or HT_ERROR*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲1区2区3区| 91精品国产综合久久婷婷香蕉| 91黄色免费观看| 精品国产伦理网| 亚洲色图视频网站| 激情综合网激情| 欧美性大战久久久久久久| 国产亚洲短视频| 日本成人中文字幕| 91九色02白丝porn| 国产精品美日韩| 国产在线视视频有精品| 欧美日本免费一区二区三区| 国产精品福利电影一区二区三区四区| 日韩高清在线电影| 欧美日韩极品在线观看一区| 18欧美亚洲精品| 粉嫩高潮美女一区二区三区| 91精品国产综合久久小美女| 亚洲综合久久av| 色诱亚洲精品久久久久久| 国产精品区一区二区三| 国产精品综合一区二区三区| 日韩精品一区二区三区四区视频| 性感美女久久精品| 欧美在线看片a免费观看| 亚洲丝袜精品丝袜在线| 波多野结衣精品在线| 欧美激情一区二区三区四区| 国内成人精品2018免费看| 日韩写真欧美这视频| 香蕉成人啪国产精品视频综合网| 欧美综合欧美视频| 香港成人在线视频| 欧美一级黄色大片| 精品一区二区三区影院在线午夜| 日韩一区二区精品在线观看| 日韩精品亚洲一区二区三区免费| 欧美日本一区二区三区| 日本不卡在线视频| 日韩欧美一二三| 国产在线观看免费一区| 久久久久高清精品| 不卡av免费在线观看| 亚洲天堂成人网| 欧美浪妇xxxx高跟鞋交| 日本亚洲三级在线| 久久亚洲一区二区三区四区| 国产精品一卡二卡| 日韩美女久久久| 欧美色网一区二区| 另类小说欧美激情| 欧美国产精品中文字幕| 色综合色综合色综合色综合色综合| 亚洲精品中文在线观看| 在线播放欧美女士性生活| 免费成人av在线| 中文字幕精品在线不卡| 91在线观看下载| 日韩在线播放一区二区| 久久综合色播五月| jlzzjlzz亚洲日本少妇| 亚洲综合色在线| 精品国产凹凸成av人网站| 成人黄色av网站在线| 亚洲福利视频导航| 26uuu国产日韩综合| 99re成人精品视频| 蜜桃视频在线一区| 亚洲人亚洲人成电影网站色| 911精品国产一区二区在线| 国产成人亚洲综合a∨婷婷| 日韩美女久久久| 久久亚洲精华国产精华液| 色婷婷激情综合| 韩国理伦片一区二区三区在线播放| 国产精品卡一卡二卡三| 5566中文字幕一区二区电影| 粉嫩绯色av一区二区在线观看| 亚洲国产欧美一区二区三区丁香婷| 精品美女一区二区| 欧美探花视频资源| 国产精品18久久久久久久网站| 亚洲狠狠丁香婷婷综合久久久| 欧美精品一区二区久久久| 欧美性一二三区| 成人黄色大片在线观看| 激情小说亚洲一区| 亚洲18色成人| 亚洲综合丁香婷婷六月香| 欧美激情一区在线| 久久亚洲精品小早川怜子| 7777精品伊人久久久大香线蕉的| 91在线码无精品| 成人中文字幕电影| 激情综合色综合久久| 免费观看一级欧美片| 一区二区三区精品视频在线| 国产精品欧美经典| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧美激情在线一区二区| 精品免费国产一区二区三区四区| 91精品国产综合久久久久久久| 91麻豆蜜桃一区二区三区| 成人免费看的视频| 成人一区二区在线观看| 国产精品资源网| 国产乱人伦偷精品视频免下载| 亚洲超丰满肉感bbw| 亚洲午夜免费视频| 亚洲福利国产精品| 污片在线观看一区二区| 亚洲aaa精品| 秋霞午夜av一区二区三区| 视频在线观看91| 五月天丁香久久| 久久国产剧场电影| 激情综合网av| 丁香啪啪综合成人亚洲小说 | 久久女同性恋中文字幕| 精品久久久久av影院| 精品第一国产综合精品aⅴ| 日韩欧美视频一区| 精品国产乱码久久| 久久综合色鬼综合色| 欧美激情在线观看视频免费| 国产精品久久精品日日| 依依成人精品视频| 亚洲高清免费在线| 免费av网站大全久久| 韩国精品主播一区二区在线观看| 国模无码大尺度一区二区三区| 国产精品91一区二区| aaa亚洲精品一二三区| 色综合色综合色综合色综合色综合| 在线亚洲免费视频| 欧美一区二区三区视频在线| 久久人人超碰精品| 亚洲欧美在线高清| 香蕉成人啪国产精品视频综合网| 日韩电影在线观看电影| 久久国产精品99久久人人澡| 高清不卡一区二区| 欧美色爱综合网| 亚洲精品一区二区三区香蕉| 欧美国产日韩a欧美在线观看| 日韩理论片在线| 免费在线观看不卡| 成人av网址在线| 91麻豆精品国产91久久久资源速度| 日韩一区二区电影| 中文字幕一区二区在线观看| 洋洋av久久久久久久一区| 捆绑调教美女网站视频一区| 成人毛片在线观看| 制服丝袜亚洲色图| 国产精品欧美精品| 麻豆精品久久久| 91视频在线看| 91精品欧美综合在线观看最新| 国产亚洲一二三区| 亚洲国产视频在线| 成人精品亚洲人成在线| 欧美一区二区大片| 亚洲欧美视频在线观看视频| 蜜乳av一区二区三区| 色先锋资源久久综合| 精品国产免费视频| 亚洲h在线观看| 99精品偷自拍| 久久久噜噜噜久噜久久综合| 亚洲国产乱码最新视频| 国产成人av影院| 日韩精品中文字幕在线一区| 一区二区三区日韩欧美精品 | 欧美视频一区二区三区| 国产欧美日本一区视频| 奇米在线7777在线精品| 欧美综合天天夜夜久久| 国产精品初高中害羞小美女文| 九九在线精品视频| 欧美一级国产精品| 天使萌一区二区三区免费观看| 成人黄色av电影| 国产日韩成人精品| 蜜臀久久99精品久久久久久9 | 成人小视频在线| 日韩欧美成人激情| 青青草成人在线观看| 欧美日韩一区二区三区视频| 亚洲欧美另类图片小说| 成人黄色av电影| 国产精品国产三级国产aⅴ入口 | 久久久久高清精品| 激情五月婷婷综合网| 日韩视频中午一区| 美女久久久精品| 欧美一区二区三区系列电影| 午夜视频一区二区| 欧美色精品天天在线观看视频|