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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tftpserver.cpp

?? 一個簡單的tftp服務(wù)器
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
						request *req1 = tftpCache[req.mapname];						if (!req1)							tftpCache.erase(req.mapname);						//printf("%u\n",req1);						//printf("Here\n");						if (req1)						{							req1->bytesRecd = req.bytesRecd;							if (ntohs(datain->opcode) == 3 && req1->opcode == 2)							{								if ((WORD)req1->bytesRecd  <= req1->blksize + 4)								{									req1->tblock = req1->block + 1;									if (req1->attempt <= 3 && ntohs(datain->block) == req1->tblock)									{										req1->block = req1->tblock;										req1->fblock++;										req1->attempt = 0;										req1->acout.opcode = htons(4);										req1->acout.block = ntohs(req1->block);										processRecv(req1);									}								}								else								{									req1->serverError.opcode = htons(5);									req1->serverError.errorcode = htons(4);									req1->bytesSent = sendto(cfig.tftpConn[req1->sockInd].sock, (const char*)&req1->serverError, strlen(req1->serverError.errormessage) + 5, 0, (sockaddr*)&req1->client, req1->clientsize);									sprintf(req1->serverError.errormessage, "Error: Incoming Packet too large");									logMess(req1, 1);									req1->attempt = UCHAR_MAX;								}							}							else if (ntohs(datain->opcode) == 4 && req1->opcode == 1)							{								if (req1->bytesRecd >= 4)								{									if (req1->attempt <= 3 && ntohs(datain->block) == req1->block)									{										req1->block++;										req1->fblock++;										req1->attempt = 0;										processSend(req1);									}								}							}							else if (req1->bytesRecd > 512)							{								req1->serverError.opcode = htons(5);								req1->serverError.errorcode = htons(4);								req1->bytesSent = sendto(cfig.tftpConn[req1->sockInd].sock, (const char*)&req1->serverError, strlen(req1->serverError.errormessage) + 5, 0, (sockaddr*)&req1->client, req1->clientsize);								sprintf(req1->serverError.errormessage, "Error: Incoming Packet too large");								logMess(req1, 1);								req1->attempt = UCHAR_MAX;							}							else if (ntohs(datain->opcode) == 1 || ntohs(datain->opcode) == 2)							{								if (req1->file)								{									fclose(req1->file);									req1->file = 0;								}								if (!processNew(&req))								{									memcpy(req1, &req, sizeof(request));								}							}							else if (ntohs(datain->opcode) == 5)							{								sprintf(req1->serverError.errormessage, "Error %i at Client, %s", ntohs(datain->block), &datain->buffer);								logMess(req1, 1);								req1->attempt = UCHAR_MAX;								if (req1->file)								{									fclose(req1->file);									req1->file = 0;								}							}							else							{								req1->serverError.opcode = htons(5);								req1->serverError.errorcode = htons(4);								sprintf(req1->serverError.errormessage, "Unexpected Option Code %u", ntohs(datain->opcode));								req1->bytesSent = sendto(cfig.tftpConn[req1->sockInd].sock, (const char*)&req1->serverError, strlen(req1->serverError.errormessage) + 5, 0, (sockaddr*)&req1->client, req1->clientsize);								logMess(req1, 1);								req1->attempt = UCHAR_MAX;								if (req1->file)								{									fclose(req1->file);									req1->file = 0;								}							}						}						else if (req.bytesRecd < 4 || errno)						{							req.serverError.opcode = htons(5);							req.serverError.errorcode = htons(0);							sprintf(req.serverError.errormessage, "Communication Error");							logMess(&req, 1);							continue;						}						else if (ntohs(datain->opcode) != 1 && ntohs(datain->opcode) != 2)						{							req.serverError.opcode = htons(5);							req.serverError.errorcode = htons(5);							sprintf(req.serverError.errormessage, "Unknown transfer ID");							req.bytesSent = sendto(cfig.tftpConn[i].sock, (const char*)&req.serverError, strlen(req.serverError.errormessage) + 5, 0, (sockaddr*)&req.client, req.clientsize);							logMess(&req, 1);						}						else if (req.bytesRecd > 512)						{							req.serverError.opcode = htons(5);							req.serverError.errorcode = htons(4);							sprintf(req.serverError.errormessage, "Error: Incoming Packet too large");							req.bytesSent = sendto(cfig.tftpConn[i].sock, (const char*)&req.serverError, strlen(req.serverError.errormessage) + 5, 0, (sockaddr*)&req.client, req.clientsize);							logMess(&req, 1);						}						else if (ntohs(datain->opcode) == 5)						{							sprintf(req.serverError.errormessage, "Error %i at Client, %s", ntohs(datain->block), &datain->buffer);							logMess(&req, 1);							continue;						}						else						{							if (cfig.hostRanges[0].rangeStart)							{								DWORD iip = ntohl(req.client.sin_addr.s_addr);								BYTE allowed = false;								for (WORD j = 0; j <= sizeof(cfig.hostRanges) && cfig.hostRanges[j].rangeStart; j++)								{									if (iip >= cfig.hostRanges[j].rangeStart && iip <= cfig.hostRanges[j].rangeEnd)									{										allowed = true;										break;									}								}								if (!allowed)								{									req.serverError.opcode = htons(5);									req.serverError.errorcode = htons(2);									strcpy(req.serverError.errormessage, "Access Denied");									logMess(&req, 1);									req.bytesSent = sendto(cfig.tftpConn[i].sock, (const char*)&req.serverError, strlen(req.serverError.errormessage) + 5, 0, (sockaddr*)&req.client, req.clientsize);									continue;								}							}							if (!processNew(&req))							{								request *req1 = (request*)calloc(1, sizeof(request));								if (!req1)								{									sprintf(logBuff,"Memory Error");									logMess(logBuff, 1);									continue;								}								memcpy(req1, &req, sizeof(request));								tftpCache[req1->mapname] = req1;								tftpAge.insert(pair<long, request*>(req1->expiry, req1));							}						}					}				}				myMultiMap::iterator p = tftpAge.begin();				myMultiMap::iterator q;				time_t currentTime = time(NULL);				while (p != tftpAge.end())				{					if (!tftpAge.size())						break;					request *req = p->second;					if (p->first > currentTime)					{						break;					}					else if (p->first < req->expiry && req->expiry > currentTime)					{						q = p;						p++;						tftpAge.erase(q);						tftpAge.insert(pair<long, request*>(req->expiry, req));					}					else if (req->expiry <= currentTime && req->attempt >= 3)					{						if (req->attempt < UCHAR_MAX)						{							req->serverError.opcode = htons(5);							req->serverError.errorcode = htons(0);							if (req->fblock && !req->block)								strcpy(req->serverError.errormessage, "Large File, Block# Rollover not supported by Client");							else								strcpy(req->serverError.errormessage, "Timeout");							req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*) &req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);							logMess(req, 1);						}						q = p;						p++;						tftpAge.erase(q);						tftpCache.erase(req->mapname);						clean(req);					}					else if (req->expiry <= currentTime)					{						if (ntohs(req->acout.opcode) == 3)						{							if (processSend(req))								req->attempt = 255;							else							{								req->attempt++;								req->expiry = currentTime + req->timeout;							}						}						else						{							errno = 0;							req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->acout, req->bytesSent, 0, (sockaddr*)&req->client, req->clientsize);							if (errno)								req->attempt = 255;							else							{								req->attempt++;								req->expiry = currentTime + req->timeout;							}						}						p++;					}					else						p++;				}			}			while (kRunning);		}	}}void closeConn(){	kRunning = false;	sprintf(logBuff, "Closing Network Connections...");	logMess(logBuff, 1);	for (int i = 0; i < MAX_SERVERS && cfig.tftpConn[i].server; i++)		close(cfig.tftpConn[i].sock);	sprintf(logBuff, "TFTP Server Stopped !");	logMess(logBuff, 1);	//exit(EXIT_SUCCESS);}void catch_int(int sig_num){	closeConn();}int processNew(request *req){	req->block = 0;	req->bytesSent = 0;	req->blksize = 512;	req->timeout = timeout;	req->expiry = time(NULL) + req->timeout;	req->opcode = ntohs(datain->opcode);	char *inPtr = (char*)datain;	*(inPtr + (req->bytesRecd - 1)) = 0;	inPtr += 2;	req->filename = inPtr;	if (!strlen(req->filename) || strlen(req->filename) > 255)	{		req->serverError.opcode = htons(5);		req->serverError.errorcode = htons(4);		strcpy(req->serverError.errormessage, "Malformed Request, Invalid/Missing Filename");		req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);		req->attempt = UCHAR_MAX;		logMess(req, 1);		return 1;	}	inPtr += strlen(inPtr) + 1;	req->mode = inPtr;	if (!strlen(req->mode) || strlen(req->mode) > 25)	{		req->serverError.opcode = htons(5);		req->serverError.errorcode = htons(4);		strcpy(req->serverError.errormessage, "Malformed Request, Invalid/Missing Mode");		req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);		req->attempt = UCHAR_MAX;		logMess(req, 1);		return 1;	}	inPtr += strlen(inPtr) + 1;	for (WORD i = 0; i < strlen(req->filename); i++)		if (req->filename[i] == '\\')			req->filename[i] = '/';	if (strstr(req->filename, "../"))	{		req->serverError.opcode = htons(5);		req->serverError.errorcode = htons(2);		strcpy(req->serverError.errormessage, "Access violation");		req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);		logMess(req, 1);		req->attempt = UCHAR_MAX;		return 1;	}/*	if (strchr(req->filename, '~') || strchr(req->filename, '`') || strchr(req->filename, '$') || strchr(req->filename, '<') || strchr(req->filename, '>') || strchr(req->filename, ';') || strchr(req->filename, ';'))	{		req->serverError.opcode = htons(5);		req->serverError.errorcode = htons(0);		strcpy(req->serverError.errormessage, "Invalid Filename");		req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);		logMess(req, 1);		req->attempt = UCHAR_MAX;		return 1;	}*/	if (req->filename[0] == '/')		req->filename++;	if (!cfig.homes[0].alias[0])	{		if (strlen(cfig.homes[0].target) + strlen(req->filename) >= sizeof(req->path))		{			req->serverError.opcode = htons(5);			req->serverError.errorcode = htons(4);			strcpy(req->serverError.errormessage, "Filename too large");			req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);			logMess(req, 1);			req->attempt = UCHAR_MAX;			return 1;		}		strcpy(req->path, cfig.homes[0].target);		strcat(req->path, req->filename);	}	else	{		char *bname = strchr(req->filename, '/');		if (bname)		{			*bname = 0;			bname++;		}		else		{			req->serverError.opcode = htons(5);			req->serverError.errorcode = htons(1);			sprintf(req->serverError.errormessage, "Missing directory/alias");			req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);			logMess(req, 1);			req->attempt = UCHAR_MAX;			return 1;		}		for (int i = 0; i < 8; i++)		{			if (cfig.homes[i].alias[0] && !strcasecmp(req->filename, cfig.homes[i].alias))			{				if (strlen(cfig.homes[i].target) + strlen(bname) >= sizeof(req->path))				{					req->serverError.opcode = htons(5);					req->serverError.errorcode = htons(4);					strcpy(req->serverError.errormessage, "Filename too large");					req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*) &req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);					logMess(req, 1);					req->attempt = UCHAR_MAX;					return 1;				}				strcpy(req->path, cfig.homes[i].target);				strcat(req->path, bname);				break;			}			else if (i == 7 || !cfig.homes[i].alias[0])			{				req->serverError.opcode = htons(5);				req->serverError.errorcode = htons(1);				sprintf(req->serverError.errormessage, "No such directory/alias");				req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*) &req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);				logMess(req, 1);				req->attempt = UCHAR_MAX;				return 1;			}		}	}    if (ntohs(datain->opcode) == 1)    {        errno = 0;		if (cfig.fileRead)		{			if (!strcasecmp(req->mode, "netascii") || !strcasecmp(req->mode, "ascii"))				req->file = fopen(req->path, "rt");			else				req->file = fopen(req->path, "rb");		}		if (errno || !cfig.fileRead || !req->file)		{            req->serverError.opcode = htons(5);            req->serverError.errorcode = htons(1);            strcpy(req->serverError.errormessage, "File Not Found/No Access");            req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);            logMess(req, 1);            req->attempt = UCHAR_MAX;            return 1;        }    }    else    {		req->file = fopen(req->path, "rb");		if (req->file)		{			fclose(req->file);			req->file = NULL;			if (!cfig.fileOverwrite)			{                req->serverError.opcode = htons(5);                req->serverError.errorcode = htons(6);                strcpy(req->serverError.errormessage, "File already exists");                req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);                logMess(req, 1);                req->attempt = UCHAR_MAX;                return 1;            }        }		else if (!cfig.fileWrite)		{			req->serverError.opcode = htons(5);			req->serverError.errorcode = htons(2);			strcpy(req->serverError.errormessage, "Create File Access Denied");			req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);			logMess(req, 1);			req->attempt = UCHAR_MAX;			return 1;		}		errno = 0;		if (strcasecmp(req->mode, "netascii"))			req->file = fopen(req->path, "wb");		else			req->file = fopen(req->path, "wt");		if (errno || !req->file)		{			req->serverError.opcode = htons(5);			req->serverError.errorcode = htons(1);			strcpy(req->serverError.errormessage, "Invalid Path or No Access");			req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->serverError, strlen(req->serverError.errormessage) + 5, 0, (sockaddr*)&req->client, req->clientsize);			logMess(req, 1);			req->attempt = UCHAR_MAX;			return 1;		}	}	if (*inPtr)	{		char *outPtr = req->acout.buffer;		req->acout.opcode = htons(6);		DWORD val;		while (*inPtr)		{			//printf("%s", inPtr);			if (!strcasecmp(inPtr, "blksize"))			{				strcpy(outPtr, inPtr);				outPtr += strlen(outPtr) + 1;				inPtr += strlen(inPtr) + 1;				val = atol(inPtr);				if (val < 512)					val = 512;				else if (val > blksize)					val = blksize;				req->blksize = val;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产91久久久资源速度| 夜夜精品浪潮av一区二区三区| 亚洲h动漫在线| 国产精品国产三级国产有无不卡 | 亚洲精品成人在线| 国产精品久久久久久久久图文区 | 国产精品每日更新| 亚洲国产精品二十页| 国产天堂亚洲国产碰碰| 欧美韩国日本一区| 中文字幕一区二区5566日韩| 亚洲欧洲色图综合| 亚洲欧美激情插| 亚洲第一主播视频| 日韩va亚洲va欧美va久久| 日本女优在线视频一区二区| 久久精品国产一区二区| 国产美女一区二区三区| 成人精品一区二区三区中文字幕| 成人午夜av影视| 色婷婷精品久久二区二区蜜臂av| 欧美亚洲图片小说| 91精品国产综合久久精品| 日韩欧美三级在线| 国产欧美一区二区精品久导航| 欧美经典一区二区| 一区二区三区在线观看网站| 天天色综合天天| 久久99精品久久久| 国产91色综合久久免费分享| 色哟哟亚洲精品| 欧美一二三四区在线| 国产目拍亚洲精品99久久精品| 亚洲女人小视频在线观看| 亚洲国产精品久久久久婷婷884| 日韩一区精品视频| 国产1区2区3区精品美女| 91豆麻精品91久久久久久| 91精品国产综合久久精品app| 久久综合色婷婷| 综合久久国产九一剧情麻豆| 亚洲成人av电影| 国产精品系列在线观看| 欧洲亚洲精品在线| 久久亚洲精品小早川怜子| 亚洲精品国产视频| 精品一区二区在线看| 99久久精品一区二区| 欧美一区二区在线观看| 国产精品久久午夜| 日韩和欧美的一区| 99久久精品免费看国产| 日韩精品一区二区三区中文不卡| 亚洲欧美日韩电影| 国产一区二区伦理| 欧美日韩在线一区二区| 亚洲国产高清不卡| 蜜臀av一区二区| 在线免费观看日韩欧美| 久久亚洲精品国产精品紫薇| 亚洲电影欧美电影有声小说| 国产成人av资源| 欧美一区二区三区四区高清| 中文字幕欧美一区| 国产在线视视频有精品| 欧美日韩黄色影视| 国产精品美女久久久久久久久 | 久久久蜜桃精品| 丝袜a∨在线一区二区三区不卡| 国产69精品久久久久毛片| 欧美一区二区三级| 一区二区三区四区激情| 高清不卡在线观看| 日韩女优制服丝袜电影| 亚洲一区二区免费视频| 99国产一区二区三精品乱码| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲一区二区偷拍精品| 色综合中文综合网| 国产午夜亚洲精品理论片色戒| 午夜欧美在线一二页| 91在线免费播放| 中文字幕av资源一区| 国产一区二区三区免费在线观看| 91精品国产综合久久精品麻豆 | 性做久久久久久久免费看| av亚洲精华国产精华精| 久久久国产综合精品女国产盗摄| 麻豆精品视频在线观看视频| 欧美福利一区二区| 亚洲高清不卡在线观看| 日本福利一区二区| 亚洲婷婷综合色高清在线| 成人免费三级在线| 国产精品视频观看| 盗摄精品av一区二区三区| 国产丝袜美腿一区二区三区| 国产精品中文有码| 国产三级欧美三级| 国产精品一区二区91| 久久综合色播五月| 国产精品系列在线播放| 国产午夜精品一区二区| 国产盗摄一区二区三区| 日本一区二区成人在线| 成人av在线播放网址| 国产精品福利电影一区二区三区四区| 国产高清一区日本| 中文字幕精品综合| 9久草视频在线视频精品| 中文字幕在线观看不卡视频| 成人精品一区二区三区四区| 综合激情成人伊人| 欧美午夜影院一区| 免费观看成人av| 久久在线免费观看| 成人性色生活片| 亚洲免费观看高清完整| 欧美三级电影一区| 蜜臂av日日欢夜夜爽一区| 欧美精品一区二区三区很污很色的| 国内外成人在线| 国产精品丝袜久久久久久app| 91一区一区三区| 亚洲国产精品欧美一二99| 日韩亚洲欧美一区二区三区| 国产一区中文字幕| 中文字幕制服丝袜成人av| 91久久精品一区二区| 日韩和欧美的一区| 国产三级精品视频| 欧美制服丝袜第一页| 日本中文在线一区| 国产精品网站在线| 欧美日韩精品福利| 国产一区二区在线免费观看| 国产精品久久久一区麻豆最新章节| 色婷婷综合久久久中文一区二区| 亚洲成人你懂的| 精品日韩99亚洲| 波多野洁衣一区| 日日夜夜免费精品| 久久久夜色精品亚洲| 91免费观看国产| 久久69国产一区二区蜜臀| 日本一区二区三区国色天香 | 亚洲蜜臀av乱码久久精品蜜桃| 欧美肥大bbwbbw高潮| 春色校园综合激情亚洲| 夜夜嗨av一区二区三区| 久久新电视剧免费观看| 色美美综合视频| 韩国在线一区二区| 亚洲午夜久久久久久久久电影网| 欧美不卡在线视频| 在线一区二区三区四区| 国产一区二区中文字幕| 亚洲成人av资源| 国产精品乱码人人做人人爱| 欧美日本不卡视频| 成人黄色综合网站| 蜜臀av性久久久久蜜臀av麻豆| 国产精品久久久久久久久久久免费看| 欧美一区二区三区人| 91无套直看片红桃| 国产成人福利片| 久久99久久精品欧美| 亚洲小说欧美激情另类| 国产欧美一区二区三区鸳鸯浴| 欧美一区二区人人喊爽| 99在线热播精品免费| 精彩视频一区二区三区| 亚洲免费三区一区二区| 欧美激情一区二区三区全黄| 欧美一区二区三区播放老司机| 日本道精品一区二区三区| 国产精品一区二区视频| 日韩在线一二三区| 亚洲大片免费看| 亚洲制服丝袜在线| 中文字幕一区二区在线观看| 久久久久久久网| 精品女同一区二区| 日韩欧美国产电影| 欧美伦理电影网| 欧美曰成人黄网| 91麻豆高清视频| av午夜精品一区二区三区| 国产aⅴ综合色| 国产精品中文字幕日韩精品| 久久99久久99小草精品免视看| 日本午夜精品视频在线观看| 亚洲成在人线在线播放| 亚洲综合一区在线| 一区二区三区国产精华| 亚洲欧美激情在线| 亚洲精品乱码久久久久久久久| 亚洲图片另类小说| 亚洲欧美电影一区二区| 亚洲色图欧洲色图婷婷|