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

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

?? gnutella.cpp

?? peercast的源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ------------------------------------------------// File : gnutella.cpp// Date: 4-apr-2002// Author: giles// Desc: //		GnuPacket is a Gnutella protocol packet.//		GnuStream is a Stream that reads/writes GnuPackets////// (c) 2002 peercast.org// // ------------------------------------------------// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// ------------------------------------------------#include "gnutella.h"#include "stream.h"#include "common.h"#include "servent.h"#include "servmgr.h"#include "stats.h"#include <stdlib.h>// ---------------------------const char *GNU_FUNC_STR(int func){	switch (func)	{		case GNU_FUNC_PING: return "PING"; break;		case GNU_FUNC_PONG: return "PONG"; break;		case GNU_FUNC_QUERY: return "QUERY"; break;		case GNU_FUNC_HIT: return "HIT"; break;		case GNU_FUNC_PUSH: return "PUSH"; break;		default: return "UNKNOWN"; break;	}}// ---------------------------const char *GnuStream::getRouteStr(R_TYPE r){	switch(r)	{		case R_PROCESS: return "PROCESS"; break;		case R_DEAD: return "DEAD"; break;		case R_DISCARD: return "DISCARD"; break;		case R_ACCEPTED: return "ACCEPTED"; break;		case R_BROADCAST: return "BROADCAST"; break;		case R_ROUTE: return "ROUTE"; break;		case R_DUPLICATE: return "DUPLICATE"; break;		case R_BADVERSION: return "BADVERSION"; break;		case R_DROP: return "DROP"; break;		default: return "UNKNOWN"; break;	}}// ---------------------------void GnuPacket::makeChecksumID(){	for(unsigned int i=0; i<len; i++)		id.id[i%16] += data[i];	}// ---------------------------void GnuPacket::initPing(int t){	func = GNU_FUNC_PING;	ttl = t;	hops = 0;	len = 0;	id.generate();}// ---------------------------void GnuPacket::initPong(Host &h, bool ownPong, GnuPacket &ping){	func = GNU_FUNC_PONG;	ttl = ping.hops;	hops = 0;	len = 14;	id = ping.id;	MemoryStream pk(data,len);	pk.writeShort(h.port);		// port	pk.writeLong(SWAP4(h.ip));	// ip	if (ownPong)	{		pk.writeLong(chanMgr->numChannels());	// cnt		pk.writeLong(servMgr->totalOutput(false));	// total	}else{		pk.writeLong(0);				// cnt		pk.writeLong(0);				// total	}}// ---------------------------void GnuPacket::initPush(ChanHit &ch, Host &sh){
#if 0	func = GNU_FUNC_PUSH;	ttl = ch.numHops;	hops = 0;	len = 26;	id.generate();	MemoryStream data(data,len);	// ID of Hit packet	data.write(ch.packetID.id,16);	// index of channel	data.writeLong(ch.index);	data.writeLong(SWAP4(sh.ip));	// ip	data.writeShort(sh.port);		// port
#endif}// ---------------------------bool GnuPacket::initHit(Host &h, Channel *ch, GnuPacket *query, bool push, bool busy, bool stable, bool tracker, int maxttl){	if (!ch)
		return false;
	func = GNU_FUNC_HIT;	hops = 0;	id.generate();	ttl = maxttl;	MemoryStream mem(data,MAX_DATA);	mem.writeChar(1);			// num hits	mem.writeShort(h.port);		// port	mem.writeLong(SWAP4(h.ip));	// ip	if (query)		mem.writeLong(0);			// speed - route	else		mem.writeLong(1);			// broadcast		//mem.writeLong(ch->index);				// index	mem.writeLong(0);				// index
	mem.writeShort(ch->getBitrate());	// bitrate	mem.writeShort(ch->localListeners());		// num listeners	mem.writeChar(0);	// no name	XML xml;	XML::Node *cn = ch->info.createChannelXML();	cn->add(ch->info.createTrackXML());	xml.setRoot(cn);	xml.writeCompact(mem);	mem.writeChar(0);							// extra null 	// QHD	mem.writeLong('PCST');				// vendor ID			mem.writeChar(2);					// public sector length 	int f1 = 0, f2 = 0;	f1 = 1 | 4 | 8 | 32 | 64;	// use push | busy | stable | broadcast | tracker 	if (push) f2 |= 1;				if (busy) f2 |= 4;	if (stable) f2 |= 8;	if (!query) f2 |= 32;	if (tracker) f2 |= 64;
		mem.writeChar(f1);	mem.writeChar(f2);
	{		// write private sector		char pbuf[256];		MemoryStream pmem(pbuf,sizeof(pbuf));		XML xml;		XML::Node *pn = servMgr->createServentXML();		xml.setRoot(pn);		xml.writeCompact(pmem);		pmem.writeChar(0);			// add null terminator		if (pmem.pos <= 255)		{			mem.writeChar(pmem.pos);			mem.write(pmem.buf,pmem.pos);		}else			mem.writeChar(0);
	}	// queryID/not used	if (query)		mem.write(query->id.id,16);						else		mem.write(id.id,16);						len = mem.pos;	LOG_NETWORK("Created Hit packet: %d bytes",len);	if (len >= MAX_DATA)		return false;//	servMgr->addReplyID(id);	return true;}// ---------------------------void GnuPacket::initFind(const char *str, XML *xml, int maxTTL){	func = GNU_FUNC_QUERY;	ttl = maxTTL;	hops = 0;	id.generate();	MemoryStream mem(data,MAX_DATA);	mem.writeShort(0);		// min speed	if (str)	{		int slen = strlen(str);		mem.write((void *)str,slen+1);	// string	}else		mem.writeChar(0);		// null string		if (xml)		xml->writeCompact(mem);	len = mem.pos;}// ---------------------------void GnuStream::ping(int ttl){	GnuPacket ping;	ping.initPing(ttl);//	servMgr->addReplyID(ping.id);	sendPacket(ping);	LOG_NETWORK("ping out %02x%02x%02x%02x",ping.id.id[0],ping.id.id[1],ping.id.id[2],ping.id.id[3]);}// ---------------------------void GnuStream::sendPacket(GnuPacket &p){	try 	{		lock.on();		packetsOut++;		stats.add(Stats::NUMPACKETSOUT);		switch(p.func)		{			case GNU_FUNC_PING: stats.add(Stats::NUMPINGOUT); break;			case GNU_FUNC_PONG: stats.add(Stats::NUMPONGOUT); break;			case GNU_FUNC_QUERY: stats.add(Stats::NUMQUERYOUT); break;			case GNU_FUNC_HIT: stats.add(Stats::NUMHITOUT); break;			case GNU_FUNC_PUSH: stats.add(Stats::NUMPUSHOUT); break;			default: stats.add(Stats::NUMOTHEROUT); break;		}		write(p.id.id,16);		writeChar(p.func);	// ping func		writeChar(p.ttl);	// ttl		writeChar(p.hops);	// hops		writeLong(p.len);	// len		if (p.len)			write(p.data,p.len);		stats.add(Stats::PACKETDATAOUT,23+p.len);		lock.off();	}catch(StreamException &e)	{				lock.off();		throw e;	}}// ---------------------------bool GnuStream::readPacket(GnuPacket &p){	try 	{		lock.on();		packetsIn++;		stats.add(Stats::NUMPACKETSIN);		read(p.id.id,16);		p.func = readChar();		p.ttl = readChar();		p.hops = readChar();		p.len = readLong();		if ((p.hops >= 1) && (p.hops <= 10))			stats.add((Stats::STAT)((int)Stats::NUMHOPS1+p.hops-1));		stats.add(Stats::PACKETDATAIN,23+p.len);		switch(p.func)		{			case GNU_FUNC_PING: stats.add(Stats::NUMPINGIN); break;			case GNU_FUNC_PONG: stats.add(Stats::NUMPONGIN); break;			case GNU_FUNC_QUERY: stats.add(Stats::NUMQUERYIN); break;			case GNU_FUNC_HIT: stats.add(Stats::NUMHITIN); break;			case GNU_FUNC_PUSH: stats.add(Stats::NUMPUSHIN); break;			default: stats.add(Stats::NUMOTHERIN); break;		}		if (p.len)		{			if (p.len > GnuPacket::MAX_DATA)			{				while (p.len--)					readChar();				lock.off();				return false;			}			read(p.data,p.len);		}		lock.off();		return true;	}catch(StreamException &e)	{				lock.off();		throw e;	}}// ---------------------------GnuStream::R_TYPE GnuStream::processPacket(GnuPacket &in, Servent *serv, GnuID &routeID){	R_TYPE ret = R_DISCARD;	MemoryStream data(in.data,in.len);	Host remoteHost = serv->getHost();	in.ttl--;	in.hops++;	routeID = in.id;	switch(in.func)	{		case GNU_FUNC_PING: // ping			{				LOG_NETWORK("ping: from %d.%d.%d.%d : %02x%02x%02x%02x",							remoteHost.ip>>24&0xff,remoteHost.ip>>16&0xff,remoteHost.ip>>8&0xff,remoteHost.ip&0xff,							in.id.id[0],in.id.id[1],in.id.id[2],in.id.id[3]					);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人av一区二区三区| 波多野结衣中文字幕一区| 国产一区二区精品在线观看| 不卡区在线中文字幕| 欧美群妇大交群中文字幕| 久久精品一区二区三区不卡| 亚洲一区在线电影| 高清不卡在线观看| 欧美一级夜夜爽| 亚洲男人的天堂网| 丰满白嫩尤物一区二区| 欧美一区二区美女| 亚洲福利电影网| 不卡的av网站| 久久夜色精品国产欧美乱极品| 亚洲国产日韩a在线播放| 懂色av一区二区在线播放| 欧美日韩国产片| 亚洲男人的天堂一区二区| 欧美一区二区三区免费视频| 最新欧美精品一区二区三区| 国产精品一区在线| 欧美mv和日韩mv的网站| 日韩二区在线观看| 欧美三级一区二区| 亚洲欧美激情一区二区| 成人av在线影院| 国产女同互慰高潮91漫画| 美女网站在线免费欧美精品| 欧美熟乱第一页| 亚洲伦在线观看| 91免费版pro下载短视频| 中文字幕日韩一区| 91在线视频网址| 综合久久国产九一剧情麻豆| voyeur盗摄精品| 综合在线观看色| 色菇凉天天综合网| 一区二区三区国产豹纹内裤在线 | 国产成人精品免费视频网站| 7777精品久久久大香线蕉 | 久久日一线二线三线suv| 免费成人av在线| 精品免费国产一区二区三区四区| 美女在线观看视频一区二区| www国产精品av| 国产高清精品网站| 国产精品久久久久影院亚瑟| 亚洲综合久久久| 亚洲国产精品影院| 精品欧美一区二区久久| 同产精品九九九| 国产日韩欧美精品综合| 石原莉奈在线亚洲二区| 欧美一二三区在线观看| 久久99这里只有精品| 国产欧美日韩三级| 91免费国产在线| 日韩电影在线观看网站| 久久久久成人黄色影片| 91在线码无精品| 亚洲第一搞黄网站| 久久综合国产精品| 91啪九色porn原创视频在线观看| 亚洲综合一区二区精品导航| 日韩美女视频在线| 成人免费视频视频在线观看免费| 一区二区成人在线视频| 日韩精品专区在线影院重磅| 国产精品一二三四五| 一区二区三区精品在线| 精品美女在线播放| 99久久国产免费看| 美女在线一区二区| 亚洲少妇最新在线视频| 欧美一区二区三区免费在线看| 丰满放荡岳乱妇91ww| 亚洲国产成人高清精品| 国产欧美一区二区精品仙草咪| 欧美在线观看一区| 国产麻豆精品久久一二三| 一区二区三区国产豹纹内裤在线 | 国产精品国产三级国产普通话蜜臀| 欧洲一区二区av| 国产成人在线观看免费网站| 一区二区国产视频| 国产欧美一区二区精品仙草咪| 色拍拍在线精品视频8848| 国产在线看一区| 亚洲电影视频在线| 国产精品一区一区三区| 香蕉成人啪国产精品视频综合网| 久久久不卡网国产精品二区| 欧美日韩国产美| 91麻豆成人久久精品二区三区| 极品少妇xxxx精品少妇偷拍| 亚洲国产精品天堂| 亚洲人成网站在线| 中文字幕不卡在线播放| 精品日产卡一卡二卡麻豆| 欧美日高清视频| 在线精品视频一区二区| 成人av免费在线观看| 国内不卡的二区三区中文字幕| 亚洲成年人网站在线观看| 中文字幕永久在线不卡| 国产欧美精品一区| 精品国产一区二区在线观看| 欧美一区二区三区啪啪| 在线成人小视频| 欧美写真视频网站| 92精品国产成人观看免费| 成人免费精品视频| 成人高清免费在线播放| 高清在线观看日韩| 国产成人综合网| 国产91精品在线观看| 国产黄色精品视频| 国产91在线|亚洲| 国产a级毛片一区| 粉嫩av亚洲一区二区图片| 国产一区二区按摩在线观看| 激情综合一区二区三区| 极品尤物av久久免费看| 国产一区二区三区四| 国产一区二区三区日韩| 国产精品夜夜爽| 成人综合日日夜夜| 国产亚洲一区字幕| 国产欧美一区二区三区鸳鸯浴 | 视频一区在线播放| 天天做天天摸天天爽国产一区 | 免费精品视频在线| 麻豆精品国产传媒mv男同| 久久疯狂做爰流白浆xx| 国产一级精品在线| 成人性生交大片免费看视频在线 | 欧美sm极限捆绑bd| 中文一区在线播放| 亚洲欧洲www| 亚洲成人手机在线| 久久国产精品免费| 成人伦理片在线| 欧美亚洲国产一区在线观看网站| 欧美男女性生活在线直播观看 | 色哟哟在线观看一区二区三区| 91黄色免费版| 日韩欧美一级精品久久| 国产网红主播福利一区二区| 亚洲欧美欧美一区二区三区| 丝袜国产日韩另类美女| 黄网站免费久久| www.性欧美| 宅男噜噜噜66一区二区66| 国产丝袜在线精品| 亚洲永久精品大片| 韩国精品一区二区| 一本久久a久久精品亚洲| 这里只有精品免费| 国产精品乱子久久久久| 午夜伦欧美伦电影理论片| 国产伦精品一区二区三区免费迷| 91亚洲精华国产精华精华液| 777久久久精品| 亚洲丝袜精品丝袜在线| 日韩av不卡在线观看| 成人午夜视频在线观看| 欧美另类久久久品| 日本一区二区成人在线| 99re视频精品| 久久久精品综合| 亚洲444eee在线观看| 成人av免费网站| 久久网站最新地址| 午夜视频在线观看一区二区| 成人午夜精品一区二区三区| 欧美一区二区精美| 亚洲曰韩产成在线| 99精品国产热久久91蜜凸| 日韩欧美一二三四区| 亚洲综合999| 91网址在线看| 国产欧美一区视频| 久久99久久99小草精品免视看| 欧美日本视频在线| 亚洲黄色片在线观看| 成人99免费视频| www激情久久| 久久国产精品99久久人人澡| 欧美精品在线一区二区三区| 亚洲色图第一区| 波波电影院一区二区三区| 国产午夜精品久久| 国内偷窥港台综合视频在线播放| 欧美一区二区三区视频在线观看| 一区二区视频在线| 91麻豆国产福利精品| 亚洲欧美一区二区三区孕妇| 不卡一区中文字幕| 亚洲人123区|