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

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

?? url.c

?? 在嵌入式移動設備上實現動態網頁
?? C
字號:
/*
 * url.c -- Parse URLs
 *
 * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
 *
 * See the file "license.txt" for usage and redistribution license requirements
 *
 * $Id: url.c,v 1.4 2003/11/25 21:48:13 hwolff Exp $
 */

/******************************** Description *********************************/

/*
 *	This module parses URLs into their components.
 */

/********************************* Includes ***********************************/

#include	"wsIntrn.h"

/********************************* Statics ************************************/
/*
 *	htmExt is declared in this way to avoid a Linux and Solaris segmentation
 *	fault when a constant string is passed to strlower which could change its
 *	argument.
 */

char_t	htmExt[] = T(".htm");


/*********************************** Code *************************************/
/*
 *	Return the mime type for the given URL given a URL.
 *	The caller supplies the buffer to hold the result.
 *	charCnt is the number of characters the buffer will hold, ascii or UNICODE.
 */

char_t *websUrlType(char_t *url, char_t *buf, int charCnt)
{
	sym_t	*sp;
	char_t	*ext, *parsebuf;

	a_assert(url && *url);
	a_assert(buf && charCnt > 0);

	if (url == NULL || *url == '\0') {
		gstrcpy(buf, T("text/plain"));
		return buf;
	}
	if (websUrlParse(url, &parsebuf, NULL, NULL, NULL, NULL, NULL, 
			NULL, &ext) < 0) {
		gstrcpy(buf, T("text/plain"));
		return buf;
	}
	strlower(ext);

/*
 *	Lookup the mime type symbol table to find the relevant content type
 */
	if ((sp = symLookup(websMime, ext)) != NULL) {
		gstrncpy(buf, sp->content.value.string, charCnt);
	} else {
		gstrcpy(buf, T("text/plain"));
	}
	bfree(B_L, parsebuf);
	return buf;
}

/******************************************************************************/
/*
 *	Parse the URL. A buffer is allocated to store the parsed URL in *pbuf.
 *	This must be freed by the caller. NOTE: tag is not yet fully supported.
 */

int websUrlParse(char_t *url, char_t **pbuf, char_t **phost, char_t **ppath, 
	char_t **pport, char_t **pquery, char_t **pproto, char_t **ptag, 
	char_t **pext)
{
	char_t		*tok, *cp, *host, *path, *port, *proto, *tag, *query, *ext;
	char_t		*hostbuf, *portbuf, *buf;
	int			c, len, ulen;

	a_assert(url);
	a_assert(pbuf);

	ulen = gstrlen(url);
/*
 *	We allocate enough to store separate hostname and port number fields.
 *	As there are 3 strings in the one buffer, we need room for 3 null chars.
 *	We allocate MAX_PORT_LEN char_t's for the port number.
 */
	len = ulen * 2 + MAX_PORT_LEN + 3;
	if ((buf = balloc(B_L, len * sizeof(char_t))) == NULL) {
		return -1;
	}
	portbuf = &buf[len - MAX_PORT_LEN - 1];
	hostbuf = &buf[ulen+1];
   /*
   Handle any URL encoding.
   Otherwise a URL ending in ".as%70", for example, causes trouble.
   */
 	websDecodeUrl(buf, url, ulen);

	url = buf;

/*
 *	Convert the current listen port to a string. We use this if the URL has
 *	no explicit port setting
 */
	stritoa(websGetPort(), portbuf, MAX_PORT_LEN);
	port = portbuf;
	path = T("/");
	proto = T("http");
	host = T("localhost");
	query = T("");
	ext = htmExt;
	tag = T("");

	if (gstrncmp(url, T("http://"), 7) == 0) {
		tok = &url[7];
		tok[-3] = '\0';
		proto = url;
		host = tok;
		for (cp = tok; *cp; cp++) {
			if (*cp == '/') {
				break;
			}
			if (*cp == ':') {
				*cp++ = '\0';
				port = cp;
				tok = cp;
			}
		}
		if ((cp = gstrchr(tok, '/')) != NULL) {
/*
 *			If a full URL is supplied, we need to copy the host and port 
 *			portions into static buffers.
 */
			c = *cp;
			*cp = '\0';
			gstrncpy(hostbuf, host, ulen);
			gstrncpy(portbuf, port, MAX_PORT_LEN);
			*cp = c;
			host = hostbuf;
			port = portbuf;
			path = cp;
			tok = cp;
		}

	} else {
		path = url;
		tok = url;
	}

/*
 *	Parse the query string
 */
	if ((cp = gstrchr(tok, '?')) != NULL) {
		*cp++ = '\0';
		query = cp;
		path = tok;
		tok = query;
	} 

/*
 *	Parse the fragment identifier
 */
	if ((cp = gstrchr(tok, '#')) != NULL) {
		*cp++ = '\0';
		if (*query == 0) {
			path = tok;
		}
	}

/*
 *	Only do the following if asked for the extension
 */
	if (pext) {
		/*
		Later the path will be cleaned up for trailing slashes and so on.
		To be ready, we need to clean up here, much as in websValidateUrl.
		Otherwise a URL ending in "asp/" or "asP" sends Ejscript source
		to the browser.
		*/
		if ((cp = gstrrchr(path, '.')) != NULL) {
			const char_t* garbage = T("/\\");
			int length = gstrcspn(cp, garbage);
			int garbageLength = gstrspn(cp + length, garbage);
			int ok = (length + garbageLength == (int) gstrlen(cp));

			if (ok) {
				cp[length] = '\0';
#ifdef WIN32
				strlower(cp);            
#endif
				ext = cp;
			}
		}
	}

/*
 *	Pass back the fields requested (if not NULL)
 */
	if (phost)
		*phost = host;
	if (ppath)
		*ppath = path;
	if (pport)
		*pport = port;
	if (pproto)
		*pproto = proto;
	if (pquery)
		*pquery = query;
	if (ptag)
		*ptag = tag;
	if (pext)
		*pext = ext;
	*pbuf = buf;
	return 0;
}

/******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费毛片片v| 久久国产成人午夜av影院| 久久你懂得1024| 日韩精品中文字幕一区| 欧美一区二区三区在线观看视频| 欧美性三三影院| 制服丝袜一区二区三区| 91麻豆精品国产91久久久久 | 久久这里只精品最新地址| 欧美美女一区二区三区| 91精品国产综合久久蜜臀| 欧美电影影音先锋| ww亚洲ww在线观看国产| 久久九九影视网| 中文字幕一区av| 亚洲成人资源在线| 韩国成人精品a∨在线观看| 国产精品自在欧美一区| 成人免费观看av| 色婷婷国产精品久久包臀| 欧美人与性动xxxx| 2024国产精品| 亚洲乱码国产乱码精品精98午夜| 夜夜精品视频一区二区| 美女精品自拍一二三四| 成人精品一区二区三区四区 | 91麻豆免费观看| 欧美午夜宅男影院| 日韩欧美黄色影院| 国产精品久久久久久久久图文区| 亚洲综合色噜噜狠狠| 秋霞成人午夜伦在线观看| 国产成人在线影院| 色激情天天射综合网| 精品理论电影在线观看| 亚洲色图清纯唯美| 极品少妇一区二区| 在线中文字幕不卡| 久久久久久久久免费| 亚洲成a人v欧美综合天堂 | 91丨九色丨蝌蚪富婆spa| 欧美精品丝袜久久久中文字幕| 久久久亚洲高清| 五月激情丁香一区二区三区| 不卡av电影在线播放| 欧美一级一区二区| 亚洲免费在线视频一区 二区| 久久99九九99精品| 欧美三级日韩在线| 亚洲图片激情小说| 国产成人在线视频网站| 制服丝袜日韩国产| 亚洲成人福利片| 色综合色综合色综合| 久久久国产精华| 久久精品国产99国产精品| 欧美三级一区二区| 亚洲黄色小说网站| 99精品欧美一区二区蜜桃免费| 精品国产乱码久久久久久蜜臀| 五月婷婷久久丁香| 欧美亚洲综合久久| 亚洲日本青草视频在线怡红院| 国产主播一区二区三区| 日韩你懂的电影在线观看| 天天色图综合网| 欧美日韩一级二级| 亚洲一区二区不卡免费| 91精品1区2区| 亚洲国产视频在线| 欧美日韩精品一区二区在线播放| 国产精品久久久久久久岛一牛影视 | 福利一区二区在线| 国产精品日日摸夜夜摸av| 国产精品77777| 国产精品视频免费看| 国产不卡在线一区| 国产精品欧美精品| 91丝袜呻吟高潮美腿白嫩在线观看| 国产农村妇女毛片精品久久麻豆| 国产精品99久久久| 国产日韩一级二级三级| 成人一级黄色片| 国产精品免费视频网站| 91一区二区三区在线播放| 中文幕一区二区三区久久蜜桃| av一区二区三区在线| 中文字幕中文乱码欧美一区二区| 91一区在线观看| 亚洲综合成人网| 日韩欧美亚洲另类制服综合在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 91精品国产免费| 国产一区999| 国产精品久久久久久久岛一牛影视| 91麻豆蜜桃一区二区三区| 日韩中文字幕91| 久久久精品综合| 色呦呦一区二区三区| 日韩精品色哟哟| 日本一区二区动态图| 91福利视频网站| 精品亚洲免费视频| 亚洲女厕所小便bbb| 在线播放视频一区| 国产精品18久久久久久久网站| 中文字幕中文字幕在线一区| 欧美日韩高清一区二区三区| 国内精品写真在线观看| 一区二区三区日韩欧美| 精品黑人一区二区三区久久 | 亚洲国产精品久久久久婷婷884| 777奇米四色成人影色区| 国产精品亚洲第一| 日本亚洲天堂网| 亚洲欧美区自拍先锋| 精品噜噜噜噜久久久久久久久试看| 99视频有精品| 国产精品综合av一区二区国产馆| 亚洲图片另类小说| 久久久久久夜精品精品免费| 日本韩国精品在线| 国产成人精品免费在线| 蜜臀av性久久久久蜜臀aⅴ流畅 | 91小视频在线观看| 蜜桃视频一区二区三区| 亚洲美女视频在线| 久久综合色婷婷| 日韩一级成人av| 欧美图片一区二区三区| www.亚洲激情.com| 国内精品视频666| 免费人成精品欧美精品| 亚洲自拍偷拍图区| 亚洲另类色综合网站| 欧美精品一区二区不卡| 777奇米四色成人影色区| 色婷婷一区二区| 北条麻妃一区二区三区| 国产精品一区二区免费不卡 | 美女视频一区二区| 亚洲成av人片一区二区梦乃| 亚洲欧美日本韩国| 最新欧美精品一区二区三区| 中文文精品字幕一区二区| 久久久久9999亚洲精品| 欧美va日韩va| 精品国产一区二区三区不卡| 777色狠狠一区二区三区| 69av一区二区三区| 欧美日韩aaaaa| 欧美日韩精品三区| 91福利国产精品| 欧美日韩国产片| 欧美剧情片在线观看| 91麻豆精品国产91久久久久久久久| 精品视频在线视频| 欧美在线免费观看视频| 欧美亚洲日本国产| 91麻豆精品久久久久蜜臀| 日韩三级av在线播放| 精品久久久久久久久久久久包黑料 | 欧美熟乱第一页| 69堂国产成人免费视频| 欧美麻豆精品久久久久久| 欧美一区二区三区视频免费播放 | 91精品国产综合久久久蜜臀粉嫩| 欧美日韩国产在线观看| 欧美一区二区在线看| 精品福利一二区| 久久久av毛片精品| 亚洲欧美日本韩国| 日韩vs国产vs欧美| 国产一区高清在线| 99re热视频这里只精品| 欧美日本一区二区在线观看| 日韩小视频在线观看专区| 欧美精品一区二区三区高清aⅴ | 精品在线免费视频| 91热门视频在线观看| 欧美日本精品一区二区三区| 久久久久88色偷偷免费| 一区二区高清视频在线观看| 日韩高清一区在线| 成人性生交大片免费看视频在线| 欧美在线一区二区| 精品国产网站在线观看| **网站欧美大片在线观看| 日本亚洲视频在线| 99精品热视频| 欧美成人欧美edvon| 亚洲综合一区二区三区| 国产福利一区在线| 欧美视频日韩视频在线观看| 久久毛片高清国产| 亚洲午夜久久久| 成人app网站| 久久蜜桃av一区精品变态类天堂| 夜夜亚洲天天久久| 成人精品亚洲人成在线|