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

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

?? miniweb.c

?? 這是一個minweb原程序
?? C
字號:
///////////////////////////////////////////////////////////////////////////////// miniweb.c//// MiniWeb start-up code///////////////////////////////////////////////////////////////////////////////#include <stdio.h>#include <string.h>#include "httppil.h"#include "httpapi.h"#include "revision.h"int uhMpd(UrlHandlerParam* param);int uhStats(UrlHandlerParam* param);int uhWebCounter(UrlHandlerParam* param);int uhVod(UrlHandlerParam* param);int uhVodStream(UrlHandlerParam* param);int uhVodInit(void* arg);UrlHandler urlHandlerList[]={	{"~stats",uhStats,NULL},#ifdef MPD	{"mplayer/",uhMpd,NULL},#endif#ifdef VOD	{"vod/",uhVod,(PFNURLINIT)uhVodInit},	{"vodstream",uhVodStream,NULL},#endif	{NULL},	{NULL},};HttpParam *httpParam;int nInst=0;const char *pageHead="<html><body class='body'><table border=1 cellpadding=0 cellspacing=0 width=280 class='body'>";const char *pageCellBegin="<tr><td width=140>%s</td><td width=140>";const char *pageCellEnd="</td></tr>";const char *pageTail="</body></html>";extern FILE *fpLog;//////////////////////////////////////////////////////////////////////////// callback from the web server whenever a valid request comes in//////////////////////////////////////////////////////////////////////////int uhStats(UrlHandlerParam* param){	unsigned char *p;	char buf[30];	HttpStats *stats=&((HttpParam*)param->hp)->stats;	HttpRequest *req=param->request;	int ret=FLAG_DATA_RAW;	mwGetHttpDateTime(time(NULL),buf);	if (stats->clientCount>4) {		param->pucBuffer=(char*)malloc(stats->clientCount*256+1024);		ret=FLAG_DATA_RAW | FLAG_TO_FREE;	}			p=param->pucBuffer;	//generate page	p+=sprintf(p,pageHead);	p+=sprintf(p,pageCellBegin,"Your IP address:");	p+=sprintf(p,"%d.%d.%d.%d%s",		req->ipAddr.caddr[3],		req->ipAddr.caddr[2],		req->ipAddr.caddr[1],		req->ipAddr.caddr[0],		pageCellEnd);	p+=sprintf(p,pageCellBegin,"Current time:");	p+=sprintf(p,"%s%s",buf,pageCellEnd);	p+=sprintf(p,pageCellBegin,"Server uptime:",time(NULL)-stats->startTime);	p+=sprintf(p,"%d sec(s)%s",time(NULL)-stats->startTime,pageCellEnd);	p+=sprintf(p,pageCellBegin,"Connected clients:");	p+=sprintf(p,"%d%s",stats->clientCount,pageCellEnd);	p+=sprintf(p,pageCellBegin,"Maximum clients:");	p+=sprintf(p,"%d%s",stats->clientCountMax,pageCellEnd);	p+=sprintf(p,pageCellBegin,"Requests:");	p+=sprintf(p,"%d%s",stats->reqCount,pageCellEnd);	p+=sprintf(p,pageCellBegin,"Files sent:");	p+=sprintf(p,"%d%s",stats->fileSentCount,pageCellEnd);	p+=sprintf(p,pageCellBegin,"Bytes sent:");	p+=sprintf(p,"%d bytes%s</table>",stats->fileSentBytes,pageCellEnd);	p+=sprintf(p,"<br>Connected peers:<hr>");	{		HttpSocket *phsSocketCur;		time_t curtime=time(NULL);		for (phsSocketCur=((HttpParam*)param->hp)->phsSocketHead; phsSocketCur; phsSocketCur=phsSocketCur->next) {			IP ip=phsSocketCur->request.ipAddr;			p+=sprintf(p,"<br>Socket %d: %d.%d.%d.%d / Reqs: %d / Expire in %d ",				phsSocketCur->socket,ip.caddr[3],ip.caddr[2],ip.caddr[1],ip.caddr[0],phsSocketCur->siRequestCount,phsSocketCur->tmExpirationTime-curtime);			if (phsSocketCur->request.pucPath)				p+=sprintf(p,"(%d/%d)",phsSocketCur->response.iSentBytes,phsSocketCur->response.iContentLength);			else				p+=sprintf(p,"(idle)");		}	}	p+=sprintf(p,pageTail);	//return data to server	param->iDataBytes=(int)(p-(param->pucBuffer));	param->fileType=HTTPFILETYPE_HTML;	return ret;}#define TOTAL_COUNTERS 8static unsigned long counter[TOTAL_COUNTERS];char *pchCounterFile=NULL;void saveWebCounter(){	int fd;	if (!pchCounterFile) return;	printf("Saving counter data...\n");	fd=open(pchCounterFile,O_WRONLY|O_CREAT);	if (fd<=0) return;	write(fd,counter,sizeof(counter));	close(fd);}int loadWebCounter(){	int fd;	memset(&counter,0,sizeof(counter));	if (!pchCounterFile) return -1;	fd=open(pchCounterFile,O_RDONLY);	if (fd<=0) {		return -1;	}	read(fd,counter,sizeof(counter));	close(fd);	return 0;}int itoc(int num, char *pbuf, int type){	static const char *chNum[]={"零","一","二","三","四","五","六","七","八","九"};	static const char *chUnit[]={"億","萬","千","百","十","",NULL};	char *p=pbuf;	int c=1000000000,unit=4,d,last=0;	if (num==0) return sprintf(pbuf,chNum[0]);	if (num<0) {		p+=sprintf(pbuf,"負");		num=-num;	}	d=num;	for (;;) {		do {			int tmp=d/c;			if (tmp>0) {				p+=sprintf(p,"%s%s",(unit==2 && tmp==1)?"":chNum[tmp],chUnit[unit]);				d%=c;			} else if (last!=0 && c>=10 && d>0) {				p+=sprintf(p,chNum[0]);			}			last=tmp;			c/=10;		} while(chUnit[++unit]);		if (c==0) break;		if (c==1000 && num>=10000)			p+=sprintf(p,chUnit[1]);		else if (c==10000000 && num>=100000000)			p+=sprintf(p,chUnit[0]);		unit=2;	}	return (int)(p-pbuf);}int uhWebCounter(UrlHandlerParam* param){	static int visitCount=0;	int idx,mode=0;	char *p;		p=strchr(param->pucRequest,'&');	if (p) {		*(p++)=0;		if (GETDWORD(p)==DEFDWORD('m','o','d','e')) {			mode=atoi(p+5);		}	}	p=strchr(param->pucRequest,'=');	if (p) *p=0;	idx=atoi(param->pucRequest);	if (idx>=TOTAL_COUNTERS) return 0;	counter[idx]++;	if (p) counter[idx]=atoi(p+1);	p=param->pucBuffer;	if ((mode & 4)==0) {		p+=sprintf(p,"document.write('");	}	switch (mode & 3) {	case 0:		p+=sprintf(p,"%d",counter[idx]);		break;	case 1:		p+=itoc(counter[idx],p,0);		break;	case 2:		p+=itoc(counter[idx],p,1);		break;	}	if ((mode & 4)==0) {		p+=sprintf(p,"');");	}	param->iDataBytes=(int)p-(int)param->pucBuffer;	param->fileType=HTTPFILETYPE_TEXT;	if (((++visitCount) & 0xf)==0) {		saveWebCounter();	}	return FLAG_DATA_RAW;}//////////////////////////////////////////////////////////////////////////// callback from the web server whenever it needs to substitute variables//////////////////////////////////////////////////////////////////////////int DefaultWebSubstCallback(SubstParam* sp){	// the maximum length of variable value should never exceed the number	// given by sp->iMaxValueBytes	if (!strcmp(sp->pchParamName,"mykeyword")) {		return sprintf(sp->pchParamValue, "%d", time(NULL));	}	return -1;}//////////////////////////////////////////////////////////////////////////// callback from the web server whenever it recevies posted data//////////////////////////////////////////////////////////////////////////int DefaultWebPostCallback(PostParam* pp){  int iReturn=WEBPOST_OK;  // by default redirect to config page  strcpy(pp->chFilename,"index.htm");  return iReturn;}//////////////////////////////////////////////////////////////////////////// callback from the web server whenever it receives a multipart // upload file chunk//////////////////////////////////////////////////////////////////////////int DefaultWebFileUploadCallback(char *pchFilename,                                 OCTET oFileuploadStatus,                                 OCTET *poData,                                 DWORD dwDataChunkSize){  // Do nothing with the data  printf("Received %lu bytes for multipart upload file %s\n",               dwDataChunkSize, pchFilename);  return 0;}int MiniWebQuit(int arg) {	int i;	if (arg) printf("\nCaught signal (%d). MiniWeb shutting down...\n",arg);	for (i=0;i<nInst;i++) {		(httpParam+i)->bKillWebserver=1;	}	return 0;}int main(int argc,char* argv[]){	printf("MiniWeb %d.%d.%d (C)2005 Written by Stanley Huang\n\n",VER_MAJOR,VER_MINOR,BUILD_NO);#ifdef WIN32	SetConsoleCtrlHandler( (PHANDLER_ROUTINE) MiniWebQuit, TRUE );#else	signal(SIGINT, (void *) MiniWebQuit);	signal(SIGTERM, (void *) MiniWebQuit);	signal(SIGPIPE, SIG_IGN);#endif#ifndef NOTHREAD	//get the number of instances	{		int i;		for (i=1;i<argc;i++) {			if (!strcmp(argv[i],"-n")) nInst=atoi(argv[++i]);		}	}#endif	if (!nInst) nInst=1;	//initialize HTTP parameter structure	{		int iParamBytes=nInst*sizeof(HttpParam);		httpParam=malloc(iParamBytes);		if (!httpParam) {			printf("Out of memory\n");			return -1;		}		memset(httpParam,0,iParamBytes);	}	//fill in default settings	{		int i;		for (i=0;i<nInst;i++) {			(httpParam+i)->siMaxClients=32;			(httpParam+i)->siMaxReqPerConn=99;			(httpParam+i)->pchWebPath="webroot";			(httpParam+i)->pxUrlHandler=urlHandlerList;		}	}	//parsing command line arguments	{		int inst=0;		int i;		for (i=1;i<argc;i++) {			if (argv[i][0]=='-') {				switch (argv[i][1]) {				case 'i':					if ((++i)<argc) {						int n=atoi(argv[i]);						if (n<nInst) inst=n;;					}					break;				case 'p':					if ((++i)<argc) (httpParam+inst)->siHttpPort=atoi(argv[i]);					break;				case 'r':					if ((++i)<argc) (httpParam+inst)->pchWebPath=argv[i];					break;				case 'l':					if ((++i)<argc) fpLog=freopen(argv[i],"w",stderr);					break;				case 'm':					if ((++i)<argc) (httpParam+inst)->siMaxClients=atoi(argv[i]);					break;				case 'k':					if ((++i)<argc) (httpParam+inst)->siMaxReqPerConn=atoi(argv[i]);					break;				case 'c':					if ((i<argc-1 && argv[i+1][0]!='-'))							pchCounterFile=argv[++i];					else						pchCounterFile="counters.dat";					break;				case 'd':					(httpParam+inst)->flags |= FLAG_DIR_LISTING;					break;				}			}		}	}	//adjust port setting	{		int i;		short int port=80;		for (i=0;i<nInst;i++) {			if ((httpParam+i)->siHttpPort)				port=(httpParam+i)->siHttpPort+1;			else				(httpParam+i)->siHttpPort=port++;		}	}	if (pchCounterFile) {		int i;		//load counter values from file		loadWebCounter();		printf("Counter enabled (%s)\n",pchCounterFile);		for (i=0;urlHandlerList[i].pchUrlPrefix;i++);		urlHandlerList[i].pchUrlPrefix="counter/";		urlHandlerList[i].pfnUrlHandler=&uhWebCounter;	}	InitSocket();	if (nInst>1) printf("Number of instances: %d\n",nInst);	{		int i;		int error=0;		for (i=0;i<nInst;i++) {			int n;			if (nInst>1) printf("\nInstance %d\n",i);			printf("Listening port: %d\n",(httpParam+i)->siHttpPort);			printf("Web root: %s\n",(httpParam+i)->pchWebPath);			printf("Max clients: %d\n",(httpParam+i)->siMaxClients);			for (n=0;urlHandlerList[n].pchUrlPrefix;n++);			printf("URL handlers: %d\n",n);			if ((httpParam+i)->flags & FLAG_DIR_LISTING) printf("Dir listing: on\n");			//register page variable substitution callback			//(httpParam+i)->pfnSubst=DefaultWebSubstCallback;			//start server			if (mwServerStart(&httpParam[i])) {				DEBUG("Error starting instance #%d\n",i);				error++;			}		}			if (error<nInst) {			#ifndef NOTHREAD				ThreadWait(httpParam[0].tidHttpThread,NULL);			#endif		} else {			printf("Failed to launch miniweb\n");		}	}	//shutdown server	{		saveWebCounter();		if (nInst>1) {			int i;			for (i=0;i<nInst;i++) {				printf("Shutting down instance %d\n",i);				mwServerShutdown(&httpParam[i]);			}		} else {			mwServerShutdown(&httpParam[0]);		}		fclose(fpLog);	}	UninitSocket();	return 0;}////////////////////////////// END OF FILE //////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃视频在线观看一区| 精品国产精品一区二区夜夜嗨| 国产美女一区二区三区| 视频一区二区中文字幕| 亚洲国产sm捆绑调教视频 | 日韩电影免费一区| 日产欧产美韩系列久久99| 日日夜夜免费精品| 久久99国产精品久久| 国产精品自拍在线| 国产一区在线观看视频| 成人午夜精品在线| 一本到高清视频免费精品| 欧美视频一区在线| 日韩一区二区三区在线| 久久影音资源网| 中文字幕亚洲电影| 亚洲a一区二区| 精品在线免费观看| 91丨九色丨尤物| 欧美日韩成人在线一区| 精品久久国产老人久久综合| 欧美国产欧美综合| 亚洲精品欧美激情| 美日韩黄色大片| 国产精品伊人色| 色婷婷综合久久久久中文一区二区| 91麻豆精东视频| 色成人在线视频| 日韩欧美一级在线播放| 久久免费看少妇高潮| 国产精品欧美一区喷水| 日韩中文字幕亚洲一区二区va在线| 激情五月激情综合网| 成人一道本在线| 欧美人与性动xxxx| 国产欧美一区二区三区鸳鸯浴 | 午夜成人免费电影| 国产一区欧美二区| 在线免费一区三区| 欧美精品一区二区高清在线观看 | 一区二区在线看| 久久不见久久见免费视频1| 不卡在线观看av| 欧美日韩一级视频| 亚洲丝袜自拍清纯另类| 国产一区二区按摩在线观看| 在线观看免费成人| 国产精品乱人伦| 精品一区二区久久久| 欧美日韩中文字幕一区| 日韩美女啊v在线免费观看| 免费视频最近日韩| 精品视频123区在线观看| 国产精品久久久久久久久久久免费看 | 欧美日韩精品专区| 亚洲色图.com| 成人av资源在线观看| 2024国产精品| 麻豆中文一区二区| 91精品久久久久久久99蜜桃| 伊人开心综合网| 色噜噜久久综合| 亚洲欧洲日韩av| thepron国产精品| 中文在线一区二区| 成人三级在线视频| 国产精品网站一区| 成人av网站在线观看| 国产精品视频一二三| 成人免费黄色大片| 国产精品久久久久aaaa| av一区二区久久| 国产精品乱码一区二三区小蝌蚪| 懂色av一区二区三区免费看| 国产人妖乱国产精品人妖| 国产真实乱对白精彩久久| 精品日韩一区二区三区| 美国欧美日韩国产在线播放| 精品国产乱码久久久久久夜甘婷婷 | 91精品国产入口在线| 日韩不卡一二三区| 91精品国产91久久久久久最新毛片| 日韩精品1区2区3区| 欧美一区三区四区| 久久精品72免费观看| 久久午夜羞羞影院免费观看| 国产乱码精品一区二区三区av | 五月天激情综合| 日韩一级免费观看| 国产精品资源网站| 中文字幕五月欧美| 欧美日韩国产一级二级| 蜜乳av一区二区| 欧美国产日韩在线观看| 在线视频你懂得一区| 热久久免费视频| 国产目拍亚洲精品99久久精品| 波多野结衣在线一区| 亚洲成人在线免费| 久久这里只有精品首页| 色香蕉久久蜜桃| 青青草91视频| 中文字幕中文乱码欧美一区二区| 色狠狠综合天天综合综合| 日韩国产高清影视| 中文字幕久久午夜不卡| 9191国产精品| 成人avav在线| 麻豆精品在线播放| 亚洲免费在线视频一区 二区| 欧美一级免费大片| 91在线观看视频| 久久激情五月激情| 亚洲永久免费av| 久久精品亚洲麻豆av一区二区| 欧美无乱码久久久免费午夜一区| 久久精工是国产品牌吗| 亚洲国产一区二区三区青草影视| 2023国产一二三区日本精品2022| 欧美午夜一区二区三区| 国产高清一区日本| 欧美aaa在线| 亚洲成人资源网| 日韩美女视频19| 国产目拍亚洲精品99久久精品| 欧美一激情一区二区三区| 91蝌蚪国产九色| 成人h动漫精品| 国产**成人网毛片九色| 狠狠色丁香久久婷婷综| 午夜久久久影院| 亚洲黄色小视频| 亚洲天堂成人在线观看| 国产精品理论在线观看| 久久久久9999亚洲精品| 欧美一三区三区四区免费在线看| 日本精品一区二区三区高清| 精品亚洲国产成人av制服丝袜| 亚洲影视在线观看| 一区二区三区日韩在线观看| 久久精品亚洲一区二区三区浴池| 日韩女优av电影| 日韩丝袜情趣美女图片| 91精品国产aⅴ一区二区| 欧美日韩精品系列| 欧美日韩一级视频| 在线播放/欧美激情| 欧美人妇做爰xxxⅹ性高电影| 91官网在线免费观看| 91麻豆蜜桃一区二区三区| 不卡的电影网站| 色综合天天综合在线视频| 99r精品视频| 91久久线看在观草草青青| 91福利国产成人精品照片| 在线亚洲一区观看| 91精品久久久久久久99蜜桃| 欧美mv日韩mv国产网站app| 欧美成人a∨高清免费观看| 2023国产精华国产精品| 久久精品一区八戒影视| 最近日韩中文字幕| 午夜一区二区三区视频| 免费成人你懂的| 国产成人精品一区二区三区四区| 成人av免费在线播放| 日本韩国欧美三级| 欧美一卡二卡在线| 国产欧美视频在线观看| 亚洲女同ⅹxx女同tv| 亚洲成人精品影院| 精品无人区卡一卡二卡三乱码免费卡 | 91麻豆精品国产91久久久久 | 亚洲欧美综合另类在线卡通| 一卡二卡三卡日韩欧美| 久久精品国产一区二区三区免费看| 国内一区二区在线| 99久久久久久| 日韩一区二区免费在线观看| 久久久精品黄色| 亚洲一区在线播放| 爽好久久久欧美精品| 丝袜a∨在线一区二区三区不卡| 久久99精品一区二区三区 | 亚洲网友自拍偷拍| 国产精品女上位| 亚洲成人你懂的| 99re成人在线| 日韩精品最新网址| 国产精品久久久久婷婷| 三级不卡在线观看| 99视频精品在线| 秋霞国产午夜精品免费视频| 国产高清一区日本| 日本一区二区综合亚洲| 成人手机在线视频| 一区在线观看免费| 欧美在线观看视频在线| 亚洲一区二区三区四区在线观看|