⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servmgr.cpp.svn-base

📁 这是和p2p相关的一份源码
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
	unsigned int cnt=0;

	Servent *s = servents;
	while (s)
	{
		cnt++;
		s=s->next;
	}
	return cnt;
}

// -----------------------------------unsigned int ServMgr::numUsed(int type){	unsigned int cnt=0;	Servent *s = servents;	while (s)	{		if (s->type == type)			cnt++;		s=s->next;	}	return cnt;}// -----------------------------------unsigned int ServMgr::numStreams(bool all){	unsigned int cnt=0;	Servent *s = servents;	while (s)	{		if (s->thread.active)			if (s->isConnected())
				if (s->type == Servent::T_STREAM)					if (all || !s->isPrivate())						cnt++;		s=s->next;	}	return cnt;}// -----------------------------------unsigned int ServMgr::totalOutput(bool all){	unsigned int tot = 0;	Servent *s = servents;	while (s)	{		if (s->isConnected())
			if (s->type == Servent::T_STREAM)				if (all || !s->isPrivate())					if (s->sock)						tot += s->sock->bytesOutPerSec;		s=s->next;	}	return tot;}// -----------------------------------unsigned int ServMgr::numOutgoing(){	int cnt=0;	Servent *s = servents;	while (s)	{//		if ((s->type == Servent::T_INCOMING) ||//		    (s->type == Servent::T_OUTGOING)) //			cnt++;		s=s->next;	}	return cnt;}// -----------------------------------bool ServMgr::seenPacket(GnuPacket &p){	Servent *s = servents;	while (s)	{		if (s->isConnected())
			if (s->seenIDs.contains(p.id))				return true;		s=s->next;	}	return false;}
// -----------------------------------
void ServMgr::quit()
{
	Servent *s = servents;
	while (s)
	{
		if (s->isConnected())
		{
			try
			{
				s->thread.active=false;	// cant call abort because the connection may need to send quit
			}catch(StreamException &){}
		}
		s=s->next;
	}

}
// -----------------------------------int ServMgr::broadcast(GnuPacket &pack,Servent *src){	int cnt=0;	if (pack.ttl)	{		Servent *s = servents;		while (s)		{			if (s != src)				if (s->isConnected())
					if (s->type == Servent::T_PGNU)						if (!s->seenIDs.contains(pack.id))						{							if (src)								if (!src->networkID.isSame(s->networkID))									continue;							if (s->outputPacket(pack,false))								cnt++;						}			s=s->next;		}	}	LOG_NETWORK("broadcast: %s (%d) to %d servents",GNU_FUNC_STR(pack.func),pack.ttl,cnt);	return cnt;}// -----------------------------------int ServMgr::route(GnuPacket &pack, GnuID &routeID, Servent *src){	int cnt=0;	if (pack.ttl)	{		Servent *s = servents;		while (s)		{			if (s != src)				if (s->isConnected())
					if (s->type == Servent::T_PGNU)
						if (!s->seenIDs.contains(pack.id))							if (s->seenIDs.contains(routeID))							{								if (src)									if (!src->networkID.isSame(s->networkID))										continue;								if (s->outputPacket(pack,true))									cnt++;							}			s=s->next;		}	}	LOG_NETWORK("route: %s (%d) to %d servents",GNU_FUNC_STR(pack.func),pack.ttl,cnt);	return cnt;}
// -----------------------------------
bool ServMgr::canConnectToMe(Host &h)
{
	if ((firewalled != FW_ON) || h.localIP())
		return true;

	return false;
}
// -----------------------------------
void ServMgr::checkFirewall()
{
	if ((getFirewall() == FW_UNKNOWN) && !servMgr->rootHost.isEmpty())
	{

		LOG_DEBUG("Checking firewall..");
		Host host;
		host.fromStrName(servMgr->rootHost.cstr(),DEFAULT_PORT);

		ClientSocket *sock = sys->createSocket();
		if (!sock)
			throw StreamException("Unable to create socket");
		sock->setReadTimeout(30000);
		sock->open(host);
		sock->connect();

		AtomStream atom(*sock);

		atom.writeInt(PCP_CONNECT,1);

		GnuID remoteID;
		String agent;
		Servent::handshakeOutgoingPCP(atom,sock->host,remoteID,agent);

		atom.writeInt(PCP_QUIT,0);

		sock->close();
		delete sock;
	}
}
// -----------------------------------void ServMgr::setFirewall(FW_STATE state){	if (firewalled != state)	{		char *str;		switch (state)		{			case FW_ON:				str = "ON";				break;			case FW_OFF:				str = "OFF";				break;			case FW_UNKNOWN:			default:				str = "UNKNOWN";				break;		}		LOG_DEBUG("Firewall is set to %s",str);		firewalled = state;	}}// -----------------------------------bool ServMgr::isFiltered(int fl, Host &h){	for(int i=0; i<numFilters; i++)		if (filters[i].flags & fl)			if (h.isMemberOf(filters[i].host))				return true;	return false;}#if 0// -----------------------------------bool ServMgr::canServeHost(Host &h){	if (server)	{		Host sh = server->getHost();		if (sh.globalIP() || (sh.localIP() && h.localIP()))			return true;			}	return false;}#endif// --------------------------------------------------void writeServerSettings(IniFile &iniFile, unsigned int a){	iniFile.writeBoolValue("allowHTML",a & Servent::ALLOW_HTML);	iniFile.writeBoolValue("allowBroadcast",a & Servent::ALLOW_BROADCAST);
	iniFile.writeBoolValue("allowNetwork",a & Servent::ALLOW_NETWORK);	iniFile.writeBoolValue("allowDirect",a & Servent::ALLOW_DIRECT);
}// --------------------------------------------------void writeFilterSettings(IniFile &iniFile, ServFilter &f){	char ipstr[64];	f.host.IPtoStr(ipstr);	iniFile.writeStrValue("ip",ipstr);	iniFile.writeBoolValue("private",f.flags & ServFilter::F_PRIVATE);	iniFile.writeBoolValue("ban",f.flags & ServFilter::F_BAN);	iniFile.writeBoolValue("network",f.flags & ServFilter::F_NETWORK);	iniFile.writeBoolValue("direct",f.flags & ServFilter::F_DIRECT);}// --------------------------------------------------static void  writeServHost(IniFile &iniFile, ServHost &sh){	iniFile.writeSection("Host");	char ipStr[64];	sh.host.toStr(ipStr);	iniFile.writeStrValue("type",ServHost::getTypeStr(sh.type));	iniFile.writeStrValue("address",ipStr);	iniFile.writeIntValue("time",sh.time);	iniFile.writeLine("[End]");}// --------------------------------------------------void ServMgr::saveSettings(const char *fn){	IniFile iniFile;	if (!iniFile.openWriteReplace(fn))	{		LOG_ERROR("Unable to open ini file");	}else{		LOG_DEBUG("Saving settings to:  %s",fn);		char idStr[64];		iniFile.writeSection("Server");		iniFile.writeIntValue("serverPort",servMgr->serverHost.port);		iniFile.writeBoolValue("autoServe",servMgr->autoServe);		iniFile.writeStrValue("forceIP",servMgr->forceIP);		iniFile.writeBoolValue("isRoot",servMgr->isRoot);		iniFile.writeIntValue("maxBitrate",servMgr->maxBitrate);		iniFile.writeIntValue("maxStreams",servMgr->maxStreams);		iniFile.writeIntValue("maxStreamsPerChannel",chanMgr->maxStreamsPerChannel);		iniFile.writeIntValue("firewallTimeout",firewallTimeout);		iniFile.writeBoolValue("forceNormal",forceNormal);		iniFile.writeStrValue("rootMsg",rootMsg.cstr());		iniFile.writeStrValue("authType",servMgr->authType==ServMgr::AUTH_COOKIE?"cookie":"http-basic");		iniFile.writeStrValue("cookiesExpire",servMgr->cookieList.neverExpire==true?"never":"session");		iniFile.writeStrValue("htmlPath",servMgr->htmlPath);
		iniFile.writeBoolValue("useIPSalt",servMgr->useIPSalt);
		networkID.toStr(idStr);		iniFile.writeStrValue("networkID",idStr);

		iniFile.writeSection("Broadcast");
		iniFile.writeIntValue("broadcastMsgInterval",chanMgr->broadcastMsgInterval);
		iniFile.writeStrValue("broadcastMsg",chanMgr->broadcastMsg.cstr());
		iniFile.writeIntValue("icyMetaInterval",chanMgr->icyMetaInterval);
		chanMgr->broadcastID.toStr(idStr);
		iniFile.writeStrValue("broadcastID",idStr);		
		iniFile.writeIntValue("hostUpdateInterval",chanMgr->hostUpdateInterval);
		iniFile.writeIntValue("maxControlConnections",servMgr->maxControl);
		iniFile.writeStrValue("rootHost",servMgr->rootHost.cstr());
		iniFile.writeSection("Client");		iniFile.writeIntValue("refreshHTML",refreshHTML);		iniFile.writeIntValue("relayBroadcast",servMgr->relayBroadcast);		iniFile.writeIntValue("minBroadcastTTL",chanMgr->minBroadcastTTL);		iniFile.writeIntValue("maxBroadcastTTL",chanMgr->maxBroadcastTTL);		iniFile.writeIntValue("pushTries",chanMgr->pushTries);		iniFile.writeIntValue("pushTimeout",chanMgr->pushTimeout);		iniFile.writeIntValue("maxPushHops",chanMgr->maxPushHops);		iniFile.writeIntValue("autoQuery",chanMgr->autoQuery);		iniFile.writeIntValue("queryTTL",servMgr->queryTTL);
		iniFile.writeSection("Privacy");		iniFile.writeStrValue("password",servMgr->password);		iniFile.writeIntValue("maxUptime",chanMgr->maxUptime);				int i;		for(i=0; i<servMgr->numFilters; i++)		{			iniFile.writeSection("Filter");				writeFilterSettings(iniFile,servMgr->filters[i]);			iniFile.writeLine("[End]");		}		iniFile.writeSection("Notify");			iniFile.writeBoolValue("PeerCast",notifyMask&NT_PEERCAST);			iniFile.writeBoolValue("Broadcasters",notifyMask&NT_BROADCASTERS);			iniFile.writeBoolValue("TrackInfo",notifyMask&NT_TRACKINFO);		iniFile.writeLine("[End]");		iniFile.writeSection("Server1");			writeServerSettings(iniFile,allowServer1);		iniFile.writeLine("[End]");		iniFile.writeSection("Server2");			writeServerSettings(iniFile,allowServer2);		iniFile.writeLine("[End]");		iniFile.writeSection("Debug");		iniFile.writeBoolValue("logDebug",(showLog&(1<<LogBuffer::T_DEBUG))!=0);		iniFile.writeBoolValue("logErrors",(showLog&(1<<LogBuffer::T_ERROR))!=0);		iniFile.writeBoolValue("logNetwork",(showLog&(1<<LogBuffer::T_NETWORK))!=0);		iniFile.writeBoolValue("logChannel",(showLog&(1<<LogBuffer::T_CHANNEL))!=0);		iniFile.writeBoolValue("pauseLog",pauseLog);		iniFile.writeIntValue("idleSleepTime",sys->idleSleepTime);		for(i=0; i<ChanMgr::MAX_CHANNELS; i++)		{			char idstr[64];			Channel *c = &chanMgr->channels[i];			if (c->isActive() && c->stayConnected)			{				c->getIDStr(idstr);				iniFile.writeSection("RelayChannel");				iniFile.writeStrValue("name",c->getName());				iniFile.writeStrValue("genre",c->info.genre.cstr());				if (!c->sourceURL.isEmpty())					iniFile.writeStrValue("sourceURL",c->sourceURL.cstr());				iniFile.writeStrValue("sourceProtocol",ChanInfo::getProtocolStr(c->info.srcProtocol));				iniFile.writeStrValue("contentType",ChanInfo::getTypeStr(c->info.contentType));				iniFile.writeIntValue("bitrate",c->info.bitrate);				iniFile.writeStrValue("contactURL",c->info.url.cstr());				iniFile.writeStrValue("id",idstr);				iniFile.writeBoolValue("stayConnected",c->stayConnected);


				ChanHitList *chl = chanMgr->findHitList(c->info);
				if (chl)
				{
					ChanHit best = chl->getHit(NULL,0,false,true);
					if (best.host.ip)
					{
						char ipStr[64];
						best.host.toStr(ipStr);
						iniFile.writeStrValue("tracker",ipStr);
					}
				}
				iniFile.writeLine("[End]");			}		}		#if 0		Servent *s = servents;		while (s)		{			if (s->type == Servent::T_OUTGOING)				if (s->isConnected())
				{					ServHost sh;					Host h = s->getHost();					sh.init(h,ServHost::T_SERVENT,0,s->networkID);					writeServHost(iniFile,sh);				}			s=s->next;		}#endif
		for(i=0; i<ServMgr::MAX_HOSTCACHE; i++)		{			ServHost *sh = &servMgr->hostCache[i];			if (sh->type != ServHost::T_NONE)				writeServHost(iniFile,*sh);		}		iniFile.close();	}}// --------------------------------------------------unsigned int readServerSettings(IniFile &iniFile, unsigned int a){	while (iniFile.readNext())	{		if (iniFile.isName("[End]"))			break;		else if (iniFile.isName("allowHTML"))			a = iniFile.getBoolValue()?a|Servent::ALLOW_HTML:a&~Servent::ALLOW_HTML;		else if (iniFile.isName("allowDirect"))			a = iniFile.getBoolValue()?a|Servent::ALLOW_DIRECT:a&~Servent::ALLOW_DIRECT;		else if (iniFile.isName("allowNetwork"))			a = iniFile.getBoolValue()?a|Servent::ALLOW_NETWORK:a&~Servent::ALLOW_NETWORK;		else if (iniFile.isName("allowBroadcast"))			a = iniFile.getBoolValue()?a|Servent::ALLOW_BROADCAST:a&~Servent::ALLOW_BROADCAST;	}	return a;}// --------------------------------------------------void readFilterSettings(IniFile &iniFile, ServFilter &sv){	sv.host.init();	while (iniFile.readNext())	{		if (iniFile.isName("[End]"))			break;		else if (iniFile.isName("ip"))			sv.host.fromStrIP(iniFile.getStrValue(),0);		else if (iniFile.isName("private"))			sv.flags = (sv.flags & ~ServFilter::F_PRIVATE) | (iniFile.getBoolValue()?ServFilter::F_PRIVATE:0);		else if (iniFile.isName("ban"))			sv.flags = (sv.flags & ~ServFilter::F_BAN) | (iniFile.getBoolValue()?ServFilter::F_BAN:0);		else if (iniFile.isName("allow") || iniFile.isName("network"))			sv.flags = (sv.flags & ~ServFilter::F_NETWORK) | (iniFile.getBoolValue()?ServFilter::F_NETWORK:0);		else if (iniFile.isName("direct"))			sv.flags = (sv.flags & ~ServFilter::F_DIRECT) | (iniFile.getBoolValue()?ServFilter::F_DIRECT:0);	}}// --------------------------------------------------void ServMgr::loadSettings(const char *fn){	IniFile iniFile;	if (!iniFile.openReadOnly(fn))		saveSettings(fn);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -