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

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

?? mod-xslt.c

?? Here are some short instructions for use of mod-xslt. The stylesheet is specified using the Proce
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*Copyright (C) 2002 Philipp Dunkel philipp@dunkel.org This program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; eitherversion 2 of the License, or (at your option) any laterversion. This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details. You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/const char* g_mod_xslt_ver = "$Build: "#include "build.date"" $";#define MOD_XSLT_DEBUG#define XSLT_LOG "/usr/local/apache/logs/xslt.log"#define MOD_XSLT_VERSION	"1.0.5a"#include "httpd.h"#include "http_config.h"#include "http_protocol.h"#include "ap_config.h"#include "http_log.h"#include "apr_buckets.h"#include "util_filter.h"#include "apr_strings.h"#include "apr_hash.h"#include "apr_lib.h"#include <libxml/uri.h>#include <libxslt/xslt.h>#include <libxslt/xsltInternals.h>#include <libxslt/transform.h>#include <libxslt/xsltutils.h>module AP_MODULE_DECLARE_DATA xslt_module;typedef struct {	char *data;	apr_size_t length;} datastore_t;static int retrievedata(request_rec *r, apr_bucket_brigade *bb, datastore_t *buffer) {	char *tbuf;	char *nbuf;	apr_size_t tlen;	apr_size_t npos;	apr_bucket *b = APR_BRIGADE_FIRST(bb);	apr_bucket *free_bucket;	while (b!=APR_BRIGADE_SENTINEL(bb) && !APR_BUCKET_IS_EOS(b)) {		if (apr_bucket_read(b, (const char**)&tbuf, &tlen, APR_BLOCK_READ) == APR_SUCCESS) {			nbuf = (char*)malloc(buffer->length + tlen);			npos = 0;			for(npos=0;npos < buffer->length;npos++) {				nbuf[npos] = buffer->data[npos];			}			for(npos=0;npos < tlen;npos++) {				nbuf[buffer->length + npos] = tbuf[npos];			}			buffer->length+=tlen;			if (buffer->data) {				free(buffer->data);			}			buffer->data = nbuf;		} else {			ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "mod-xslt: Failed to read bucket!");			}		free_bucket = b;		b=APR_BUCKET_NEXT(b);		apr_bucket_delete(free_bucket);	}	if (APR_BUCKET_IS_EOS(b)) {		return 1;	} else {		return 0;	}}#define IS_BLANK(val) ((((val)==32) || ((val)==8) || ((val)==10) || ((val)==13))? 1 : 0)static char *getpiparam(char *content, const char *name) {	char *tempstr=strdup(content);	char *cur, tmp, *start;	char *retval=NULL;	cur = tempstr;	if (cur){		while (*cur > 0) {			while(IS_BLANK(*cur)) {				cur++;			}			if (strncmp(cur,name,strlen(name)) == 0){				cur += strlen(name);				if (*cur != '=') continue;				cur++;				tmp = *cur;				cur ++;				start = cur;				while ((*cur > 0) && (*cur != tmp)) cur++;				if (*cur != tmp) {					continue;				}				*cur = 0;				retval = strdup(start);				break;			} else {				while(!IS_BLANK(*cur) && (*cur > 0)) {					cur++;				}			}			cur++;		}	}	free(tempstr);	return retval;}int xsltOutputBufferWrite(void * context, const char * buffer, int len){	ap_filter_t *filter = (ap_filter_t*)context;	apr_bucket_brigade *brigade = (apr_bucket_brigade *)filter->ctx;	char *temp = apr_palloc(filter->r->pool,len);	memcpy(temp,buffer,len);	APR_BRIGADE_INSERT_TAIL(brigade, apr_bucket_transient_create(temp,len,filter->r->connection->bucket_alloc));	return len;}static xmlOutputBufferPtr xsltOutputBufferCreate(ap_filter_t *f, xmlCharEncodingHandlerPtr encoder) {	xmlOutputBufferPtr ret;    	if (f == NULL) return(NULL);	ret = xmlAllocOutputBuffer(encoder);	if (ret != NULL) {		ret->written = 0;		ret->context = (void*)f;		ret->writecallback = xsltOutputBufferWrite;		ret->closecallback = NULL;  /* No close callback */	}	return(ret); }static void decode(char *urlstr) {	char *mov = urlstr;	char *tmpstr = NULL;	while (*mov > 0) {		if (*mov == '+') {			*mov = ' ';		}		if (*mov == '%') {			tmpstr = (char*)malloc(3 * sizeof(char));			tmpstr[0] = *(mov + 1);			tmpstr[1] = *(mov + 2);			tmpstr[2] = 0;			*mov = (char)strtol(tmpstr,NULL,16);			free(tmpstr);			mov++;			*mov = 0;			mov += 2;			strcat(urlstr,mov);			mov -= 3;					}		mov++;	}}static void addparam(char ***params,const char *key, const char* value) {	int paramcnt=0;	char **mover;	if (*params == NULL) {		*params = (char**)malloc(2 * sizeof(char**));		(*params)[0]=NULL;		(*params)[1]=NULL;	}	if (key==NULL || value==NULL) {		return;	}	if(strchr(key,'\'')||strchr(value,'\'')) {		return;	}	mover = *params;	while (*mover) {		if(strcmp(*mover,key) == 0) {			free(mover[1]);			mover[1] = (char*)malloc(strlen(value) + 3);			strcpy(mover[1],"'");			strcat(mover[1],value);			strcat(mover[1],"'");			return;		}		paramcnt+=2;		mover+=2;	}	mover = *params = (char**)realloc(*params,(paramcnt + 4) * sizeof(char**));	while (*mover) {		mover++;	}	mover[0] = strdup(key);	mover[1] = (char*)malloc(strlen(value) + 3);	strcpy(mover[1],"'");	strcat(mover[1],value);	strcat(mover[1],"'");	mover[2] = NULL;	mover[3] = NULL;}static char **urldecode(const char* querystr) {	char **params = NULL;	char *query = NULL;	char *mov = NULL;	char *key = NULL;	char *value = NULL;	if (querystr == NULL) {		return NULL;	}	query = strdup(querystr);	mov = query;	while (*mov > 0) {		if (key == NULL) {			key == mov;		}		if (key && !value && (*mov == '=')) {			*mov = 0;			value = mov + 1;		}		if (key && value && *mov == '&') {			*mov = 0;			decode(key);			decode(value);			addparam(&params,key,value);			key=NULL;			value=NULL;		}		mov++;	}	free(query);	return params;}static void freeparams(char *** params) {	char **mover = *params;	if (params==NULL) {		return;	}	if (*params == NULL) {		return;	}	while (*mover) {		free(*mover);		mover++;	}	free(*params);}#ifdef MOD_XSLT_DEBUGstatic void show_parameters(ap_filter_t *f,char **params) {	char **mover = params;	while (*mover) {		ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r, "mod-xslt: parameter(%s=%s)",*mover,*(mover+1));		mover+=2;		}}#endif void xslt_error(void *ctx, const char *msg, ...) {	request_rec *context = (request_rec*)ctx;	char *temp = NULL;	int tmplen = 0;	va_list args;		va_start(args,msg);	tmplen = vsnprintf(temp,tmplen,msg,args);	va_end(args);	temp = (char*)malloc((tmplen + 1) *sizeof(char));	va_start(args,msg);	tmplen = vsnprintf(temp,tmplen,msg,args);	va_end;	temp[tmplen] = 0;	ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, context, "mod-xslt: XSLT -> %s",temp);	apr_table_set(context->notes, "XSLT-INVALID", "TRUE");	free(temp);	return;}xsltStylesheetPtr modxsltLoadStylesheetFile(xmlDocPtr doc, xmlChar *href) {	xmlURIPtr URI;	xsltStylesheetPtr ret = NULL;	if (href != NULL) {		URI = xmlParseURI((const char *) href);		if (URI == NULL) {			xmlFree(href);			return(NULL);		}		if ((URI->fragment != NULL) && (URI->scheme == NULL) &&			(URI->opaque == NULL) && (URI->authority == NULL) &&			(URI->server == NULL) && (URI->user == NULL) &&			(URI->path == NULL) && (URI->query == NULL)) {			xmlAttrPtr ID;			if (URI->fragment[0] == '#')				ID = xmlGetID(doc, (const xmlChar *) &(URI->fragment[1]));			else				ID = xmlGetID(doc, (const xmlChar *) URI->fragment);			if (ID) {				xmlDocPtr fake;				xmlNodePtr subtree;				subtree = ID->parent;				fake = xmlNewDoc(NULL);				if (fake != NULL) {					xmlUnlinkNode(subtree);					xmlAddChild((xmlNodePtr) fake, subtree);					ret = xsltParseStylesheetDoc(fake);					if (ret == NULL)						xmlFreeDoc(fake);				}			}		} else {			xmlChar *URL, *base;			base = xmlNodeGetBase(doc, (xmlNodePtr) doc);			URL = xmlBuildURI(href, base);			if (URL != NULL) {				ret = xsltParseStylesheetFile(URL);				xmlFree(URL);			} else {				ret = xsltParseStylesheetFile(href);			}			if (base != NULL)				xmlFree(base);		}		xmlFreeURI(URI);		xmlFree(href);	}	return ret;}xsltStylesheetPtr modxsltLoadStylesheetPI(xmlDocPtr document, const char *useragent){	xsltStylesheetPtr ret = NULL;	xmlChar *agent = NULL;	xmlChar *href = NULL;	xsltStylesheetPtr result = NULL;	xmlNodePtr child = document->children;	while ((child != NULL) && (child->type != XML_ELEMENT_NODE)) {		if ((child->type == XML_PI_NODE) && (xmlStrEqual(child->name, BAD_CAST "xslt-stylesheet"))) {			agent = getpiparam((char*)child->content, "agent");			href = getpiparam((char*)child->content, "href");			if (agent && href) {				if (strcmp(useragent,agent)==0) {					result = modxsltLoadStylesheetFile(document,href);				}			}			if (agent) free(agent);			agent = NULL;			if (href) free(href);			href = NULL;		}		child = child->next;	}	if (result) return result;	return xsltLoadStylesheetPI(document);}#ifdef MEDIATYPEPATCHstatic void modxsltGetMediaType(xsltStylesheetPtr style) {	xmlChar *prop = NULL;	xmlNodePtr child = NULL;	child = style->doc->children;	while ((child != NULL) && (child->type != XML_ELEMENT_NODE)) {		child = child->next;	}	child = child->children;	while (child) {		if ((child->type == XML_ELEMENT_NODE)&&IS_XSLT_NAME(child, "output")) {			prop = xsltGetNsProp(child, (const xmlChar *) "media-type", XSLT_NAMESPACE);			if (prop != NULL) {				if (style->mediaType) xmlFree(style->mediaType);				style->mediaType = prop;			}		}		}	}#endifstatic apr_status_t xsltparse(ap_filter_t *f,datastore_t *inbuf) {	const char *conststr=NULL;	xmlDocPtr document = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩大陆在线| 亚洲丝袜美腿综合| 亚洲免费观看高清在线观看| 日韩精品一二三| 9i看片成人免费高清| 日韩欧美国产三级电影视频| 亚洲欧美日韩国产中文在线| 激情久久五月天| 欧美日韩一区二区在线观看| 中文字幕一区二区视频| 黄页网站大全一区二区| 欧美美女黄视频| 亚洲综合色视频| 99久久精品国产一区| 久久免费视频一区| 麻豆国产精品一区二区三区| 欧美三级午夜理伦三级中视频| 一区在线中文字幕| 丁香五精品蜜臀久久久久99网站| 日韩欧美一区二区三区在线| 性做久久久久久久久| 日本精品裸体写真集在线观看| 中文字幕免费观看一区| 国产成+人+日韩+欧美+亚洲| 欧美精品一区二区在线播放| 久久精品国产99国产精品| 欧美久久久一区| 视频一区二区中文字幕| 欧美精品三级在线观看| 亚洲3atv精品一区二区三区| 欧美人妖巨大在线| 日韩国产高清在线| 91精品国产色综合久久不卡蜜臀| 石原莉奈在线亚洲二区| 欧美一级夜夜爽| 久久国产生活片100| 欧美精品一区二区在线播放| 国产在线播放一区二区三区| 国产亚洲视频系列| 国产91高潮流白浆在线麻豆| 国产精品久久久久久久久免费桃花 | 欧美一区二区黄色| 日韩不卡一二三区| 日韩欧美一区电影| 成人精品一区二区三区四区| 国产精品久久毛片a| 色噜噜久久综合| 偷拍日韩校园综合在线| 欧美嫩在线观看| 激情图片小说一区| 日韩一区欧美一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲一区二区三区美女| 欧美成人aa大片| 成人免费精品视频| 亚洲电影激情视频网站| 精品国产成人在线影院| 国产成人高清视频| 亚洲电影视频在线| 久久久美女艺术照精彩视频福利播放| 成人免费高清视频| 性做久久久久久久久| 久久久国产午夜精品| 99国产精品久久久久| 免费人成黄页网站在线一区二区| 久久亚洲综合色| 在线亚洲人成电影网站色www| 午夜精品成人在线| 久久久精品一品道一区| 欧美在线一二三| 国产一区二区导航在线播放| 亚洲激情网站免费观看| 欧美成人官网二区| 欧美最新大片在线看| 国产一区 二区| 偷拍一区二区三区四区| 亚洲国产精品二十页| 欧美精品色综合| 91在线观看美女| 国产综合久久久久影院| 亚洲成人av免费| 国产精品少妇自拍| 欧美成人一区二区三区片免费| a级高清视频欧美日韩| 极品少妇xxxx偷拍精品少妇| 亚洲国产视频一区| 国产精品福利电影一区二区三区四区| 欧美一区二区三区在线观看视频| 91性感美女视频| 国产成人免费xxxxxxxx| 捆绑紧缚一区二区三区视频| 一区二区高清免费观看影视大全| 国产欧美日韩一区二区三区在线观看| 欧美日韩成人综合天天影院| 成人黄色av网站在线| 国产自产v一区二区三区c| 日韩精品一二三| 五月天亚洲婷婷| 午夜精品久久久久久久99水蜜桃| 亚洲欧美一区二区不卡| 中文字幕一区二区在线播放 | 欧美三级中文字幕| 99精品久久久久久| 风间由美中文字幕在线看视频国产欧美| 午夜a成v人精品| 午夜视频一区二区三区| 亚洲高清免费在线| 亚洲国产精品久久久男人的天堂| 成人欧美一区二区三区黑人麻豆| 国产精品日产欧美久久久久| 国产亚洲欧美中文| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩午夜三级在线| 欧美成人精品高清在线播放| 日韩欧美123| 精品国产一区久久| 久久久精品天堂| 国产欧美日韩另类视频免费观看 | 国产一区二区三区不卡在线观看| 久久超碰97中文字幕| 裸体在线国模精品偷拍| 精品在线播放午夜| 国产一区在线观看视频| 国产电影精品久久禁18| 成人网在线免费视频| 91女神在线视频| 欧美日韩精品一区二区天天拍小说 | 欧美日韩精品欧美日韩精品| 欧美视频第二页| 欧美人狂配大交3d怪物一区| 6080yy午夜一二三区久久| 日韩写真欧美这视频| 欧美刺激午夜性久久久久久久| 久久久99精品免费观看| 国产精品国产三级国产普通话三级| 最新不卡av在线| 婷婷综合久久一区二区三区| 免费观看日韩av| 国产激情一区二区三区四区| 精品视频一区二区不卡| 欧美大黄免费观看| 国产精品美女久久久久aⅴ国产馆| 亚洲丝袜自拍清纯另类| 日产欧产美韩系列久久99| 韩国视频一区二区| 91蜜桃网址入口| 日韩一二在线观看| 日韩理论电影院| 日本不卡一区二区三区高清视频| 国产高清不卡一区| 欧洲一区在线观看| 久久久99精品免费观看不卡| 亚洲专区一二三| 国产麻豆精品久久一二三| 在线区一区二视频| 亚洲精品在线观看网站| 亚洲综合成人在线| 国产乱码字幕精品高清av| 欧美午夜精品久久久久久孕妇| 精品欧美一区二区久久| 一二三四区精品视频| 国产成人av一区二区三区在线| 欧美日韩久久一区二区| 中文字幕av一区二区三区| 免费精品视频在线| 91九色02白丝porn| 国产欧美精品一区aⅴ影院| 亚洲高清在线视频| 91丨porny丨国产| 久久久精品免费免费| 日韩av中文字幕一区二区三区| 9久草视频在线视频精品| 精品欧美一区二区三区精品久久 | 在线亚洲一区观看| 中文字幕巨乱亚洲| 极品少妇一区二区| 欧美精品v国产精品v日韩精品| 亚洲欧洲精品一区二区三区不卡| 蜜桃91丨九色丨蝌蚪91桃色| 欧美日韩综合在线| 亚洲精品乱码久久久久久日本蜜臀| 国产一区二区三区精品视频| 7777女厕盗摄久久久| 亚洲成人福利片| 色www精品视频在线观看| 国产精品国产三级国产普通话蜜臀 | 亚洲精品在线一区二区| 亚洲成人激情综合网| 在线观看区一区二| 亚洲免费观看高清在线观看| 99久久综合精品| 一区在线中文字幕| 91亚洲精华国产精华精华液| 国产精品午夜电影| 成人99免费视频| 综合色天天鬼久久鬼色| 91在线观看视频| 亚洲精品大片www| 欧洲生活片亚洲生活在线观看| 亚洲摸摸操操av|