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

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

?? gnutella.cpp

?? P2P應用 : 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一区二区三区免费野_久草精品视频
国内成人精品2018免费看| 欧美视频你懂的| 欧美一级免费大片| 亚洲欧美日韩一区二区三区在线观看 | 欧美人成免费网站| 亚洲综合色在线| 波多野结衣亚洲一区| 国产亚洲欧美一级| 国产一区二区三区蝌蚪| 久久久久9999亚洲精品| 久久66热re国产| 日韩精品一区二区三区视频播放| 琪琪久久久久日韩精品| 欧美精品一区二区三区高清aⅴ | 粉嫩在线一区二区三区视频| 国产精品伦理在线| 欧美在线观看一区二区| 日本亚洲欧美天堂免费| 久久免费精品国产久精品久久久久| 顶级嫩模精品视频在线看| 一区二区欧美视频| 精品久久久久久久一区二区蜜臀| 粉嫩13p一区二区三区| 一级中文字幕一区二区| 精品乱码亚洲一区二区不卡| 99久久国产综合精品女不卡| 亚洲大尺度视频在线观看| 欧美哺乳videos| 91在线视频网址| 麻豆传媒一区二区三区| 国产精品国产三级国产普通话蜜臀| 欧美羞羞免费网站| 国产精品一卡二| 亚洲成人午夜影院| 自拍视频在线观看一区二区| 欧美日韩国产一区| 国产成人精品亚洲午夜麻豆| 天天综合网 天天综合色| 国产亚洲精品bt天堂精选| 欧美性色aⅴ视频一区日韩精品| 国产一区视频在线看| 亚洲一区中文在线| 国产日本亚洲高清| 日韩情涩欧美日韩视频| 色综合欧美在线| 国产风韵犹存在线视精品| 亚洲午夜成aⅴ人片| 国产精品视频yy9299一区| 欧美一级专区免费大片| 色婷婷av一区二区三区gif| 国模少妇一区二区三区| 首页国产欧美日韩丝袜| 亚洲精品伦理在线| 国产精品三级视频| 精品福利一区二区三区| 欧美高清视频不卡网| 色综合中文字幕国产 | 日韩午夜小视频| 欧美吻胸吃奶大尺度电影| 高清不卡一二三区| 国产乱子轮精品视频| 日韩高清不卡一区二区三区| 亚洲精品欧美综合四区| 18成人在线观看| 国产精品女人毛片| 免费在线成人网| 欧美videossexotv100| 99天天综合性| 美女免费视频一区二区| 国产欧美日韩亚州综合| 欧美在线free| 国产成人av电影| 婷婷综合久久一区二区三区| 国产三级欧美三级日产三级99 | 中文字幕视频一区| 欧美丰满少妇xxxbbb| 成人一道本在线| 日韩 欧美一区二区三区| 国产精品视频观看| 欧美videos中文字幕| 国产精品一区二区视频| 国产福利视频一区二区三区| 国产美女精品一区二区三区| 国产最新精品精品你懂的| 精品一区二区三区不卡| 国产精品一色哟哟哟| 国产精品一区一区| voyeur盗摄精品| 一本久久a久久精品亚洲| 欧美午夜片在线观看| 在线观看不卡视频| 欧美裸体一区二区三区| 337p亚洲精品色噜噜狠狠| 欧美欧美午夜aⅴ在线观看| 欧美日本视频在线| 欧美成人一区二区三区片免费| 中文字幕一区二区三区四区不卡| 亚洲国产高清在线观看视频| 亚洲欧洲在线观看av| 亚洲欧美另类小说| 天堂久久一区二区三区| 久国产精品韩国三级视频| 国产精品123区| 91免费国产视频网站| 欧美午夜一区二区三区免费大片| 欧美一级日韩一级| 国产日韩一级二级三级| 一二三区精品福利视频| 久久精品久久99精品久久| 成人动漫av在线| 欧美老肥妇做.爰bbww| 欧美精品一区二区三区蜜桃视频| 中文字幕中文在线不卡住| 五月婷婷久久丁香| 国产精品一区不卡| 欧美色倩网站大全免费| 久久你懂得1024| 亚洲麻豆国产自偷在线| 九色|91porny| 色噜噜夜夜夜综合网| 精品国产一区二区在线观看| 亚洲视频在线一区| 秋霞影院一区二区| 91视频在线看| 欧美精品一区二区三区在线| 亚洲制服丝袜av| 国产精品一区二区久久精品爱涩| 色哟哟一区二区在线观看| 日韩精品专区在线| 亚洲最新视频在线观看| 国产综合色在线视频区| 欧美日本韩国一区二区三区视频| 久久久久久免费网| 天堂蜜桃一区二区三区| 97精品久久久久中文字幕 | 中文字幕乱码亚洲精品一区| 日韩成人免费看| 色噜噜夜夜夜综合网| 久久精品一区八戒影视| 亚洲成人资源在线| 成人黄色国产精品网站大全在线免费观看 | 精品理论电影在线| 亚洲成人动漫在线免费观看| 不卡的电影网站| 久久久久久久电影| 日本v片在线高清不卡在线观看| 色狠狠一区二区| 国产精品乱子久久久久| 久久国产视频网| 欧美一区二区美女| 亚洲午夜精品久久久久久久久| 99久久久久久| 亚洲国产岛国毛片在线| 国产精品一区在线| 亚洲精品一区二区三区99 | 久色婷婷小香蕉久久| 欧美r级在线观看| 蜜臀精品久久久久久蜜臀| 欧美嫩在线观看| 午夜欧美视频在线观看| 欧美日韩在线免费视频| 亚洲一区在线电影| 色噜噜久久综合| 一个色在线综合| 欧美日韩一区精品| 亚洲成人午夜电影| 91麻豆精品国产自产在线| 午夜激情一区二区| 3751色影院一区二区三区| 视频一区二区欧美| 91精品国产麻豆国产自产在线 | 青青草91视频| 欧美变态tickle挠乳网站| 麻豆91在线播放免费| 欧美一二三四在线| 久久av老司机精品网站导航| 精品乱码亚洲一区二区不卡| 久久激五月天综合精品| 精品国产伦一区二区三区观看方式 | 色94色欧美sute亚洲线路二| 国产精品区一区二区三| 99久久久久免费精品国产| 日韩美女视频一区| 欧美在线一二三| 日韩高清电影一区| 久久久亚洲综合| 成人av在线一区二区| 亚洲激情图片小说视频| 欧美日韩精品一区二区三区四区 | 国产目拍亚洲精品99久久精品| 懂色av一区二区在线播放| 中文字幕一区在线| 欧美日韩日日摸| 日本va欧美va瓶| 国产欧美精品一区二区三区四区| 91在线porny国产在线看| 亚洲成人一区二区| 国产亚洲精品中文字幕| 色成年激情久久综合| 久久精品国产免费|