📄 servmgr.cpp.svn-base
字号:
if (pack.ttl) { for(int i=0; i<MAX_SERVENTS; i++) { Servent *s = &servents[i]; if (s != src) if (s->type != Servent::T_STREAM) if (s->status == Servent::S_CONNECTED) if (!s->seenIDs.contains(pack.id)) { if (src) if (!src->networkID.isSame(s->networkID)) continue; if (s->outputPacket(pack,false)) cnt++; } } } 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) { for(int i=0; i<MAX_SERVENTS; i++) { Servent *s = &servents[i]; if (s != src) if (s->type != Servent::T_STREAM) if (s->status == Servent::S_CONNECTED) 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++; } } } LOG_NETWORK("route: %s (%d) to %d servents",GNU_FUNC_STR(pack.func),pack.ttl,cnt); return cnt;}// -----------------------------------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("allowData",a & Servent::ALLOW_DATA); iniFile.writeBoolValue("allowServent",a & Servent::ALLOW_SERVENT); iniFile.writeBoolValue("allowBroadcast",a & Servent::ALLOW_BROADCAST);}// --------------------------------------------------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); if (sh.netid.isSet()) { char netidStr[64]; sh.netid.toStr(netidStr); iniFile.writeStrValue("networkID",netidStr); } iniFile.writeLine("[End]");}// --------------------------------------------------void ServMgr::saveSettings(const char *fn){ IniFile iniFile; if (!iniFile.openWriteReplace(fn)) { LOG_ERROR("Unable to open ini file"); }else{ LOG("Saving settings to: %s",fn); iniFile.writeSection("Server"); iniFile.writeIntValue("serverPort",servMgr->serverHost.port); iniFile.writeBoolValue("autoServe",servMgr->autoServe); iniFile.writeStrValue("icyPassword",servMgr->password); 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("maxIncoming",servMgr->maxIncoming); iniFile.writeIntValue("maxOutgoing",servMgr->maxOutgoing); iniFile.writeIntValue("maxTryout",servMgr->maxTryout); iniFile.writeIntValue("minConnected",servMgr->minConnected); iniFile.writeIntValue("maxPreviewTime",servMgr->maxPreviewTime); iniFile.writeIntValue("maxPreviewWait",servMgr->maxPreviewWait); iniFile.writeIntValue("serventBandwidth",servMgr->serventBandwidth); 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("network",servMgr->network.cstr()); iniFile.writeSection("Client"); iniFile.writeBoolValue("autoConnect",servMgr->autoConnect); iniFile.writeStrValue("lookupHost",servMgr->connectHost); iniFile.writeIntValue("tryoutDelay",servMgr->tryoutDelay); iniFile.writeIntValue("refreshHTML",refreshHTML); iniFile.writeIntValue("relayBroadcast",servMgr->relayBroadcast); iniFile.writeIntValue("broadcastTTL",chanMgr->broadcastTTL); iniFile.writeIntValue("pushTries",chanMgr->pushTries); iniFile.writeIntValue("pushTimeout",chanMgr->pushTimeout); iniFile.writeIntValue("maxPushHops",chanMgr->maxPushHops); iniFile.writeSection("Notify"); iniFile.writeBoolValue("PeerCast",notifyMask&NT_PEERCAST); iniFile.writeBoolValue("Broadcasters",notifyMask&NT_BROADCASTERS); iniFile.writeBoolValue("TrackInfo",notifyMask&NT_TRACKINFO); iniFile.writeLine("[End]"); int i; for(i=0; i<servMgr->numFilters; i++) { iniFile.writeSection("Filter"); writeFilterSettings(iniFile,servMgr->filters[i]); iniFile.writeLine("[End]"); } iniFile.writeSection("Server1"); writeServerSettings(iniFile,allowServer1); iniFile.writeLine("[End]"); iniFile.writeSection("Server2"); writeServerSettings(iniFile,allowServer2); iniFile.writeLine("[End]"); iniFile.writeSection("Broadcast"); iniFile.writeIntValue("broadcastMsgInterval",chanMgr->broadcastMsgInterval); iniFile.writeStrValue("broadcastMsg",chanMgr->broadcastMsg.cstr()); iniFile.writeIntValue("icyMetaInterval",chanMgr->icyMetaInterval); char idStr[64]; chanMgr->broadcastID.toStr(idStr); iniFile.writeStrValue("broadcastID",idStr); iniFile.writeIntValue("deadHitAge",chanMgr->deadHitAge); 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()) if ( (c->type == Channel::T_RELAY) || ((c->type == Channel::T_BROADCAST) && (c->srcType == Channel::SRC_URL))) { 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("sourceType",ChanInfo::getTypeStr(c->info.srcType)); 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); iniFile.writeLine("[End]"); } } for(i=0; i<ServMgr::MAX_SERVENTS; i++) if (servMgr->servents[i].type == Servent::T_OUTGOING) if (servMgr->servents[i].status == Servent::S_CONNECTED) { ServHost sh; Host h = servMgr->servents[i].getHost(); sh.init(h,ServHost::T_SERVENT,0,servMgr->servents[i].networkID); writeServHost(iniFile,sh); } for(i=0; i<ServMgr::MAX_HOSTCACHE; i++) { ServHost *sh = &servMgr->hostCache[i]; if (sh->type != ServHost::T_NONE) if (!servMgr->findServent(Servent::T_OUTGOING,sh->host,sh->netid)) 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("allowData")) a = iniFile.getBoolValue()?a|Servent::ALLOW_DATA:a&~Servent::ALLOW_DATA; else if (iniFile.isName("allowServent")) a = iniFile.getBoolValue()?a|Servent::ALLOW_SERVENT:a&~Servent::ALLOW_SERVENT; 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.fromStr(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); servMgr->numFilters = 0; showLog = 0; if (iniFile.openReadOnly(fn)) { while (iniFile.readNext()) { // server settings if (iniFile.isName("serverPort")) servMgr->serverHost.port = iniFile.getIntValue(); else if (iniFile.isName("autoServe")) servMgr->autoServe = iniFile.getBoolValue(); else if (iniFile.isName("autoConnect")) servMgr->autoConnect = iniFile.getBoolValue(); else if (iniFile.isName("icyPassword")) strcpy(servMgr->password,iniFile.getStrValue()); else if (iniFile.isName("forceIP")) { strcpy(servMgr->forceIP,iniFile.getStrValue()); if (strlen(servMgr->forceIP)) servMgr->serverHost.ip = ClientSocket::getIP(servMgr->forceIP); } else if (iniFile.isName("isRoot")) servMgr->isRoot = iniFile.getBoolValue(); else if (iniFile.isName("broadcastID")) chanMgr->broadcastID.fromStr(iniFile.getStrValue()); else if (iniFile.isName("maxBitrate")) servMgr->maxBitrate = iniFile.getIntValue(); else if (iniFile.isName("maxStreams")) servMgr->maxStreams = iniFile.getIntValue(); else if (iniFile.isName("maxStreamsPerChannel")) chanMgr->maxStreamsPerChannel = iniFile.getIntValue(); else if (iniFile.isName("maxIncoming")) servMgr->maxIncoming = iniFile.getIntValue(); else if (iniFile.isName("maxOutgoing")) servMgr->maxOutgoing = iniFile.getIntValue(); else if (iniFile.isName("maxTryout")) servMgr->maxTryout = iniFile.getIntValue(); else if (iniFile.isName("minConnected")) servMgr->minConnected = iniFile.getIntValue(); else if (iniFile.isName("maxPreviewTime")) servMgr->maxPreviewTime = iniFile.getIntValue(); else if (iniFile.isName("maxPreviewWait")) servMgr->maxPreviewWait = iniFile.getIntValue(); else if (iniFile.isName("firewallTimeout")) firewallTimeout = iniFile.getIntValue(); else if (iniFile.isName("forceNormal")) forceNormal = iniFile.getBoolValue(); else if (iniFile.isName("broadcastMsgInterval")) chanMgr->broadcastMsgInterval = iniFile.getIntValue(); else if (iniFile.isName("broadcastMsg")) chanMgr->broadcastMsg.set(iniFile.getStrValue(),String::T_ASCII); else if (iniFile.isName("icyMetaInterval")) chanMgr->icyMetaInterval = iniFile.getIntValue(); else if (iniFile.isName("rootMsg")) rootMsg.set(iniFile.getStrValue()); else if (iniFile.isName("network")) network.set(iniFile.getStrValue()); else if (iniFile.isName("authType")) { char *t = iniFile.getStrValue(); if (stricmp(t,"cookie")==0) servMgr->authType = ServMgr::AUTH_COOKIE; else if (stricmp(t,"http-basic")==0) servMgr->authType = ServMgr::AUTH_HTTPBASIC; }else if (iniFile.isName("cookiesExpire")) { char *t = iniFile.getStrValue(); if (stricmp(t,"never")==0) servMgr->cookieList.neverExpire = true; else if (stricmp(t,"session")==0) servMgr->cookieList.neverExpire = false; // client settings }else if (iniFile.isName("lookupHost")) strcpy(servMgr->connectHost,iniFile.getStrValue()); else if (iniFile.isName("deadHitAge")) chanMgr->deadHitAge = iniFile.getIntValue(); else if (iniFile.isName("tryoutDelay")) servMgr->tryoutDelay = iniFile.getIntValue(); else if (iniFile.isName("refreshHTML")) refreshHTML = iniFile.getIntValue(); else if (iniFile.isName("relayBroadcast")) servMgr->relayBroadcast = iniFile.getIntValue(); else if (iniFile.isName("broadcastTTL")) chanMgr->broadcastTTL = iniFile.getIntValue(); else if (iniFile.isName("pushTimeout")) chanMgr->pushTimeout = iniFile.getIntValue(); else if (iniFile.isName("pushTries")) chanMgr->pushTries = iniFile.getIntValue(); else if (iniFile.isName("maxPushHops")) chanMgr->maxPushHops = iniFile.getIntValue(); // debug else if (iniFile.isName("logDebug")) showLog |= iniFile.getBoolValue() ? 1<<LogBuffer::T_DEBUG:0; else if (iniFile.isName("logErrors")) showLog |= iniFile.getBoolValue() ? 1<<LogBuffer::T_ERROR:0; else if (iniFile.isName("logNetwork")) showLog |= iniFile.getBoolValue() ? 1<<LogBuffer::T_NETWORK:0; else if (iniFile.isName("logChannel")) showLog |= iniFile.getBoolValue() ? 1<<LogBuffer::T_CHANNEL:0; else if (iniFile.isName("pauseLog")) pauseLog = iniFile.getBoolValue(); else if (iniFile.isName("idleSleepTime")) sys->idleSleepTime = iniFile.getIntValue(); else if (iniFile.isName("[Server1]")) allowServer1 = readServerSettings(iniFile,allowServer1); else if (iniFile.isName("[Server2]")) allowServer2 = readServerSettings(iniFile,allowServer2); else if (iniFile.isName("[Filter]")) { readFilterSettings(iniFile,filters[numFilters]); if (numFilters < (MAX_FILTERS-1)) numFilters++; } else if (iniFile.isName("[Notify]")) { notifyMask = NT_UPGRADE; while (iniFile.readNext()) { if (iniFile.isName("[End]")) break; else if (iniFile.isName("PeerCast")) notifyMask |= iniFile.getBoolValue()?NT_PEERCAST:0; else if (iniFile.isName("Broadcasters")) notifyMask |= iniFile.getBoolValue()?NT_BROADCASTERS:0; else if (iniFile.isName("TrackInfo")) notifyMask |= iniFile.getBoolValue()?NT_TRACKINFO:0; } } else if (iniFile.isName("[RelayChannel]")) { ChanInfo info; bool stayConnected=false; String sourceURL; while (iniFile.readNext()) { if (iniFile.isName("[End]")) break; else if (iniFile.isName("name")) info.name.set(iniFile.getStrValue()); else if (iniFile.isName("id")) info.id.fromStr(iniFile.getStrValue()); else if (iniFile.isName("sourceType")) info.srcType = ChanInfo::getTypeFromStr(iniFile.getStrValue()); else if (iniFile.isName("contentType")) info.contentType = ChanInfo::getTypeFromStr(iniFile.getStrValue()); else if (iniFile.isName("stayConnected")) stayConnected = iniFile.getBoolValue(); else if (iniFile.isName("sourceURL")) sourceURL.set(iniFile.getStrValue()); else if (iniFile.isName("genre")) info.genre.set(iniFile.getStrValue()); else if (iniFile.isName("contactURL")) info.url.set(iniFile.getStrValue()); else if (iniFile.isName("bitrate")) info.bitrate = atoi(iniFile.getStrValue()); } if (sourceURL.isEmpty())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -