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

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

?? tftpserver.cpp

?? 一個簡單的tftp服務器
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
				sprintf(outPtr, "%u", val);				outPtr += strlen(outPtr) + 1;			}			else if (!strcasecmp(inPtr, "tsize"))			{				strcpy(outPtr, inPtr);				outPtr += strlen(outPtr) + 1;				inPtr += strlen(inPtr) + 1;				if (!fseek(req->file, 0, SEEK_END))					req->tsize = ftell(req->file);				sprintf(outPtr, "%u", req->tsize);				outPtr += strlen(outPtr) + 1;			}			else if (!strcasecmp(inPtr, "timeout"))			{				strcpy(outPtr, inPtr);				outPtr += strlen(outPtr) + 1;				inPtr += strlen(inPtr) + 1;				val = atoi(inPtr);				if (val < 1)					val = 1;				else if (val > 255)					val = 255;				req->timeout = val;				req->expiry = time(NULL) + req->timeout;				sprintf(outPtr, "%u", val);				outPtr += strlen(outPtr) + 1;			}			inPtr += strlen(inPtr) + 1;			//printf("=%u\n", val);		}		errno = 0;		req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->acout, (DWORD)outPtr - (DWORD)&req->acout, 0, (sockaddr*)&req->client, req->clientsize);		//errno = WSAGetLastError();	}	else if (htons(datain->opcode) == 2)	{		req->acout.opcode = htons(4);		req->acout.block = htons(0);		errno = 0;		req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->acout, 4, 0, (sockaddr*)&req->client, req->clientsize);		//errno = WSAGetLastError();	}	if (errno)	{		sprintf(req->serverError.errormessage, "Communication Error");		logMess(req, 1);		req->attempt = UCHAR_MAX;		if (req->file)		{			fclose(req->file);			req->file = 0;		}		return errno;	}	if (ntohs(datain->opcode) == 1)	{		errno = 0;		req->pkt[0] = (packet*)calloc(1, req->blksize + 4);		req->pkt[1] = (packet*)calloc(1, req->blksize + 4);		if (errno || !req->pkt[0] || !req->pkt[1])		{			strcpy(req->serverError.errormessage, "Memory Error");			logMess(req, 1);			req->attempt = UCHAR_MAX;			return 1;		}		if (ftell(req->file) > 0)			fseek(req->file, 0, SEEK_SET);		req->pkt[0]->opcode = htons(3);		req->pkt[0]->block = htons(1);		req->bytesRead[0] = fread(&req->pkt[0]->buffer, 1, req->blksize, req->file);		if (errno)		{			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;			if (req->file)			{				fclose(req->file);				req->file = 0;			}			return errno;		}		if (req->bytesRead[0] == req->blksize)		{			req->pkt[1]->opcode = htons(3);			req->pkt[1]->block = htons(2);			req->bytesRead[1] = fread(&req->pkt[1]->buffer, 1, req->blksize, req->file);			if (errno)			{				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;				if (req->file)				{					fclose(req->file);					req->file = 0;				}				return errno;			}			if ((DWORD)req->bytesRead[1] < req->blksize)			{				fclose(req->file);				req->file = 0;			}		}		else		{			fclose(req->file);			req->file = 0;		}		if (!req->bytesSent)		{			req->block = 1;			return processSend(req);		}	}	return 0;}int processSend(request *req){	errno = 0;	req->expiry = time(NULL) + req->timeout;	if (ntohs(req->pkt[0]->block) == req->block)	{		errno = 0;		req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)req->pkt[0], req->bytesRead[0] + 4, 0, (sockaddr*)&req->client, req->clientsize);		memcpy(&req->acout, req->pkt[0], 4);		//errno = WSAGetLastError();		if (errno)		{			sprintf(req->serverError.errormessage, "Communication Error");			logMess(req, 1);			req->attempt = UCHAR_MAX;			if (req->file)			{				fclose(req->file);				req->file = 0;			}			return errno;		}		if (req->file)		{			req->tblock = ntohs(req->pkt[1]->block) + 1;			if (req->tblock == req->block)			{				req->pkt[1]->block = htons(++req->tblock);				req->bytesRead[1] = fread(&req->pkt[1]->buffer, 1, req->blksize, req->file);				if (errno)				{					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;					if (req->file)					{						fclose(req->file);						req->file = 0;					}					return errno;				}				else if (req->bytesRead[1] < req->blksize)				{					fclose(req->file);					req->file = 0;				}			}		}	}	else if (ntohs(req->pkt[1]->block) == req->block)	{		errno = 0;		req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)req->pkt[1], req->bytesRead[1] + 4, 0, (sockaddr*)&req->client, req->clientsize);		memcpy(&req->acout, req->pkt[1], 4);		//errno = WSAGetLastError();		if (errno)		{			sprintf(req->serverError.errormessage, "Communication Error");			logMess(req, 1);			req->attempt = UCHAR_MAX;			if (req->file)			{				fclose(req->file);				req->file = 0;			}			return errno;		}		if (req->file)		{			req->tblock = ntohs(req->pkt[0]->block) + 1;			if (req->tblock == req->block)			{				req->pkt[0]->block = htons(++req->tblock);				req->bytesRead[0] = fread(&req->pkt[0]->buffer, 1, req->blksize, req->file);				if (errno)				{					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;					if (req->file)					{						fclose(req->file);						req->file = 0;					}					return errno;				}				else if (req->bytesRead[0] < req->blksize)				{					fclose(req->file);					req->file = 0;				}			}		}	}	else //if (ntohs(req->pkt[0]->block) < req->block && ntohs(req->pkt[1]->block) < req->block)	{		req->attempt = UCHAR_MAX;		sprintf(logBuff, "Client %s %s, %i Blocks Served", req->mapname, req->path, req->fblock );		logMess(logBuff, 2);	}	return 0;}int processRecv(request *req){	req->expiry = time(NULL) + req->timeout;	errno = 0;	req->bytesSent = sendto(cfig.tftpConn[req->sockInd].sock, (const char*)&req->acout, 4, 0, (sockaddr*)&req->client, req->clientsize);	//errno = WSAGetLastError();	if (errno)	{		sprintf(req->serverError.errormessage, "Communication Error");		logMess(req, 1);		req->attempt = UCHAR_MAX;		if (req->file)		{			fclose(req->file);			req->file = 0;		}		return errno;	}	if (req->bytesRecd > 4 && !fwrite(&datain->buffer, req->bytesRecd - 4, 1, req->file))	{		req->serverError.opcode = htons(5);		req->serverError.errorcode = htons(3);		strcpy(req->serverError.errormessage, "Disk full or allocation exceeded");		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;		if (req->file)		{			fclose(req->file);			req->file = 0;		}		return 1;	}	//printf("%u\n", req->bytesRecd);	if ((WORD)req->bytesRecd < req->blksize + 4)	{		sprintf(logBuff, "Client %s %s, %u Blocks Received", req->mapname, req->path, req->fblock);		logMess(logBuff, 2);		req->attempt = UCHAR_MAX;		fclose(req->file);		req->file = 0;		return 0;	}	return 0;}char* myGetToken(char* buff, BYTE index){	while (*buff)	{		if (index)			index--;		else			break;		buff += strlen(buff) + 1;	}	return buff;}WORD myTokenize(char *target, char *source, char *sep, bool whiteSep){	bool found = true;	char *dp = target;	WORD kount = 0;	while (*source)	{		if (sep && sep[0] && strchr(sep, (*source)))		{			found = true;			source++;			continue;		}		else if (whiteSep && *source <= 32)		{			found = true;			source++;			continue;		}		if (found)		{			if (target != dp)			{				*dp = 0;				dp++;			}			kount++;		}		found = false;		*dp = *source;		dp++;		source++;	}	*dp = 0;	dp++;	*dp = 0;	//printf("%s\n", target);	return kount;}char* myTrim(char *target, char *source){	while ((*source) && (*source) <= 32)		source++;	int i = 0;	for (; i < 511 && source[i]; i++)		target[i] = source[i];	target[i] = source[i];	i--;	for (; i >= 0 && target[i] <= 32; i--)		target[i] = 0;	return target;}void mySplit(char *name, char *value, char *source, char splitChar){	int i = 0;	int j = 0;	int k = 0;	for (; source[i] && j <= 510 && source[i] != splitChar; i++, j++)	{		name[j] = source[i];	}	if (source[i])	{		i++;		for (; k <= 510 && source[i]; i++, k++)		{			value[k] = source[i];		}	}	name[j] = 0;	value[k] = 0;	myTrim(name, name);	myTrim(value, value);	//printf("%s %s\n", name, value);}bool getSection(char *sectionName, char *buffer, BYTE serial, char *fileName){	//printf("%s=%s\n",fileName,sectionName);	char section[128];	sprintf(section, "[%s]", sectionName);	myUpper(section);	FILE *f = fopen(fileName, "rt");	char buff[512];	BYTE found = 0;	if (f)	{		while (fgets(buff, 511, f))		{			myUpper(buff);			myTrim(buff, buff);			if (strstr(buff, section) == buff)			{				found++;				if (found == serial)				{					//printf("%s=%s\n",fileName,sectionName);					while (fgets(buff, 511, f))					{						myTrim(buff, buff);						if (strstr(buff, "[") == buff)							break;						if ((*buff) >= '0' && (*buff) <= '9' || (*buff) >= 'A' && (*buff) <= 'Z' || (*buff) >= 'a' && (*buff) <= 'z' || ((*buff) && strchr("/\\?*", (*buff))))						{							buffer += sprintf(buffer, "%s", buff);							buffer++;						}					}					break;				}			}		}		fclose(f);	}	*buffer = 0;	*(buffer + 1) = 0;	return (found == serial);}char *IP2String(char *target, DWORD ip){	data15 inaddr;	inaddr.ip = (unsigned int)ip;	sprintf(target, "%u.%u.%u.%u", inaddr.octate[0], inaddr.octate[1], inaddr.octate[2], inaddr.octate[3]);	return target;}char *myUpper(char *string){	char diff = 'a' - 'A';	WORD len = strlen(string);	for (int i = 0; i < len; i++)		if (string[i] >= 'a' && string[i] <= 'z')			string[i] -= diff;	return string;}char *myLower(char *string){	char diff = 'a' - 'A';	WORD len = strlen(string);	for (int i = 0; i < len; i++)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲va国产天堂va久久en| 天堂va蜜桃一区二区三区| 亚洲精品网站在线观看| 日韩国产欧美视频| 成人avav影音| 精品成人在线观看| 亚洲一区影音先锋| 国产精品系列在线播放| 欧美人妇做爰xxxⅹ性高电影 | 欧美日韩午夜在线视频| 欧美精品一区二区久久婷婷| 亚洲一区二区三区四区在线免费观看| 久久99蜜桃精品| 欧美日韩一区精品| 中文字幕一区二区三区精华液| 蜜臀av一区二区| 欧美日韩中文字幕精品| 亚洲国产精品国自产拍av| 日本视频在线一区| 欧日韩精品视频| 亚洲视频在线一区| 丁香天五香天堂综合| 久久久久久久久久久久电影| 蜜臀av性久久久久av蜜臀妖精 | 日韩欧美在线123| 天天射综合影视| 精品视频1区2区3区| 一片黄亚洲嫩模| 色成年激情久久综合| 亚洲图片你懂的| av男人天堂一区| 国产精品伦一区| 成人a区在线观看| 国产精品麻豆欧美日韩ww| 国产91精品一区二区| 久久精品综合网| 国产91精品欧美| 国产精品区一区二区三| 成人性生交大片免费看在线播放| 久久久亚洲精品一区二区三区 | 中文字幕乱码一区二区免费| 国产在线视视频有精品| 久久久亚洲高清| 国产成人在线视频网站| 国产欧美精品国产国产专区 | 美女被吸乳得到大胸91| 欧美人与z0zoxxxx视频| 麻豆国产91在线播放| 久久影院午夜片一区| 国产91富婆露脸刺激对白| 欧美高清在线一区二区| 色综合网站在线| 亚洲超碰精品一区二区| 91精品国产aⅴ一区二区| 日韩国产精品久久| 精品国内片67194| 成人免费毛片a| 一区二区三区不卡视频| 91精品国产一区二区三区| 免费精品视频在线| 国产亚洲成aⅴ人片在线观看| 成人黄色电影在线| 亚洲精品欧美激情| 日韩欧美一二三四区| 丁香桃色午夜亚洲一区二区三区| ...中文天堂在线一区| 欧美三区在线视频| 精品一区二区久久| 亚洲天堂福利av| 日韩一区二区免费在线观看| 丁香网亚洲国际| 日韩中文字幕麻豆| 欧美激情综合五月色丁香小说| 91麻豆国产自产在线观看| 麻豆一区二区99久久久久| 国产午夜亚洲精品理论片色戒| 日本乱人伦aⅴ精品| 国产综合色视频| 亚洲一区二区偷拍精品| 26uuu精品一区二区| 欧美在线免费播放| 国产大陆亚洲精品国产| 午夜精品一区二区三区电影天堂| 亚洲国产精品精华液ab| 日韩区在线观看| 欧美午夜视频网站| 大尺度一区二区| 美国一区二区三区在线播放| 一区二区三区在线视频观看58| 久久久综合九色合综国产精品| 91.com视频| 91精品办公室少妇高潮对白| 成人小视频免费在线观看| 日本成人在线电影网| 亚洲精品成人在线| 国产欧美精品一区二区三区四区| 日韩欧美国产午夜精品| 在线观看免费成人| 成人性生交大片免费看在线播放| 玖玖九九国产精品| 丝袜诱惑制服诱惑色一区在线观看| 中文字幕一区二区三中文字幕| 精品成人私密视频| 在线综合视频播放| 欧美日韩一区三区| 欧美午夜一区二区三区| 91久久线看在观草草青青| 国产999精品久久久久久| 精油按摩中文字幕久久| 日韩精品成人一区二区三区| 亚洲午夜影视影院在线观看| 亚洲乱码国产乱码精品精98午夜 | 国产东北露脸精品视频| 国产乱码精品一区二区三区忘忧草 | 另类欧美日韩国产在线| 亚洲123区在线观看| 亚洲免费观看在线视频| 日韩理论片中文av| 亚洲精品第1页| 亚洲成人自拍偷拍| 视频在线观看国产精品| 日日夜夜精品视频天天综合网| 亚洲h动漫在线| 视频一区二区中文字幕| 石原莉奈一区二区三区在线观看| 丝袜亚洲另类欧美| 奇米综合一区二区三区精品视频| 亚洲1区2区3区4区| 久热成人在线视频| 久久爱另类一区二区小说| 黄色资源网久久资源365| 国产一区二区在线观看视频| 国产高清精品网站| 成人黄色777网| 日本高清不卡在线观看| 欧美日韩dvd在线观看| 欧美一级片在线看| 精品国精品国产尤物美女| 国产亚洲va综合人人澡精品 | 久久精品这里都是精品| 国产日产欧美一区二区视频| 亚洲视频免费观看| 午夜影院久久久| 久久99精品久久久| 成a人片国产精品| 欧美日韩三级一区二区| 日韩一区二区电影| 国产欧美一区在线| 亚洲另类一区二区| 蜜臀av一区二区在线免费观看 | 麻豆精品国产91久久久久久| 大胆欧美人体老妇| 欧美日本视频在线| 久久久噜噜噜久久人人看| 亚洲天堂成人网| 精品写真视频在线观看| 99久精品国产| 日韩视频在线一区二区| 国产欧美日本一区视频| 午夜精品久久久久久不卡8050 | 精品在线免费视频| 99久久亚洲一区二区三区青草| 欧美精品乱码久久久久久按摩| 国产午夜亚洲精品羞羞网站| 亚洲h精品动漫在线观看| 丁香六月久久综合狠狠色| 51精品国自产在线| 国产精品麻豆久久久| 日本亚洲免费观看| 色偷偷一区二区三区| 久久综合久久综合久久| 亚洲国产色一区| www.亚洲激情.com| 精品久久久久久综合日本欧美| 一卡二卡欧美日韩| 成人福利视频网站| 欧美xingq一区二区| 五月婷婷综合在线| 91视频一区二区| 日本一区二区三区视频视频| 日日夜夜精品视频天天综合网| 日本精品裸体写真集在线观看| 久久精品日产第一区二区三区高清版| 亚洲国产成人av| 一本色道综合亚洲| 中文字幕高清不卡| 韩国欧美国产一区| 日韩限制级电影在线观看| 亚洲午夜在线视频| 色爱区综合激月婷婷| 中文字幕在线不卡一区| 国产精品综合一区二区三区| 欧美成人午夜电影| 免费观看在线色综合| 在线播放中文字幕一区| 亚洲欧美视频一区| 99re亚洲国产精品| 国产精品三级在线观看| 国产精品亚洲а∨天堂免在线| 久久久久久久久久久电影|