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

📄 servhs.cpp

📁 这是和p2p相关的一份源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		switch (servMgr->authType)		{			case ServMgr::AUTH_HTTPBASIC:				if (http.isHeader("Authorization"))					http.getAuthUserPass(user,pass);				break;			case ServMgr::AUTH_COOKIE:				if (http.isHeader("Cookie"))				{					Cookie c;					LOG_DEBUG("Got cookie: %s",arg);					char *idp=arg;					while ((idp = strstr(idp,"id=")))					{						idp+=3;						c.set(idp,sock->host.ip);						if (servMgr->cookieList.contains(c))						{							LOG_DEBUG("Cookie found");							cookie = c;							break;						}					}				}				break;		}	}	//servMgr->serverHost.toResolvedName(arg);	servMgr->serverHost.toStr(arg);	sprintf(tmp,"PeerCast on %s",arg);	HTML html(tmp,*sock);	if (!sock->host.isLocalhost())	{		if (!cmpCGIarg(cmd,"pass=",servMgr->password))		{			switch (servMgr->authType)			{				case ServMgr::AUTH_HTTPBASIC:											if (strcmp(pass,servMgr->password)!=0)					{						http.writeLine(HTTP_SC_UNAUTHORIZED);						http.writeLine("WWW-Authenticate: Basic realm=\"PeerCast Admin\"");						http.writeLine("%s %s",HTTP_HS_SERVER,PCX_AGENT);						http.writeLine("%s %s",HTTP_HS_CONTENT,MIME_HTML);						http.writeLine("%s %s",HTTP_HS_CACHE,"no-cache");						http.writeLine("%s %s",HTTP_HS_CONNECTION,"close");						http.writeLine("");						html.startHTML();							html.addHead();							html.startBody();								html.startTagEnd("h3","Please enter a valid password");							html.end();						html.end();						return;					}					break;				case ServMgr::AUTH_COOKIE:					if (!servMgr->cookieList.contains(cookie))					{						addLoginPage(html);						return;					}					break;				default:					http.writeLine(HTTP_SC_UNAUTHORIZED);					http.writeLine("");					return;			}		}	}	try	{		if (cmpCGIarg(cmd,"cmd=","redirect"))		{			char *j = getCGIarg(cmd,"url=");			if (j)			{				termArgs(cmd);				String url;				url.set(j,String::T_ESC);				url.convertTo(String::T_ASCII);				if (!url.contains("http://"))					url.prepend("http://");				html.setRefreshURL(url.cstr());				html.startHTML();					html.addHead();					html.startBody();						html.startTagEnd("h3","Please wait...");					html.end();				html.end();			}		}else{			if (cmpCGIarg(cmd,"cmd=","viewxml"))			{				handshakeXML();				retHTML = false;			}else if (cmpCGIarg(cmd,"cmd=","clearlog"))			{				sys->logBuf->clear();				sprintf(jumpStr,"/admin?page=viewlog");									jumpArg = jumpStr;			}else if (cmpCGIarg(cmd,"cmd=","save"))			{				peercastInst->saveSettings();				sprintf(jumpStr,"/admin?page=settings");									jumpArg = jumpStr;			}else if (cmpCGIarg(cmd,"cmd=","apply"))			{					servMgr->numFilters = 0;				ServFilter *currFilter=servMgr->filters;
				bool brRoot=false;
				bool getUpd=false;
				char *cp = cmd;				while (cp=nextCGIarg(cp,curr,arg))				{					// server					if (strcmp(curr,"serveractive")==0)						servMgr->autoServe = getCGIargBOOL(arg);					else if (strcmp(curr,"port")==0)						servMgr->serverHost.port = getCGIargINT(arg);					else if (strcmp(curr,"icymeta")==0)					{						int iv = getCGIargINT(arg);						if (iv < 0) iv = 0;						else if (iv > 16384) iv = 16384;						chanMgr->icyMetaInterval = iv;					}else if (strcmp(curr,"passnew")==0)						strcpy(servMgr->password,arg);					else if (strcmp(curr,"root")==0)						servMgr->isRoot = getCGIargBOOL(arg);					else if (strcmp(curr,"brroot")==0)
						brRoot = getCGIargBOOL(arg);
					else if (strcmp(curr,"getupd")==0)
						getUpd = getCGIargBOOL(arg);
					else if (strcmp(curr,"huint")==0)
						chanMgr->setUpdateInterval(getCGIargINT(arg));
					else if (strcmp(curr,"forceip")==0)						strcpy(servMgr->forceIP,arg);					else if (strcmp(curr,"djmsg")==0)					{						String msg;						msg.set(arg,String::T_ESC);						msg.convertTo(String::T_ASCII);						chanMgr->setBroadcastMsg(msg);					}					else if (strcmp(curr,"pcmsg")==0)					{						servMgr->rootMsg.set(arg,String::T_ESC);						servMgr->rootMsg.convertTo(String::T_ASCII);					}					// connections
					else if (strcmp(curr,"maxcin")==0)
						servMgr->maxControl = getCGIargINT(arg);
					else if (strcmp(curr,"maxup")==0)						servMgr->maxBitrate = getCGIargINT(arg);					else if (strcmp(curr,"maxstream")==0)						servMgr->maxStreams = getCGIargINT(arg);					else if (strcmp(curr,"maxlisten")==0)						chanMgr->maxStreamsPerChannel = getCGIargINT(arg);					else if (strncmp(curr,"filt_",5)==0)					{						char *fs = curr+5;						{							if (strncmp(fs,"ip",2)==0)		// ip must be first							{								currFilter = &servMgr->filters[servMgr->numFilters];								currFilter->init();									currFilter->host.fromStrIP(arg,DEFAULT_PORT);								if ((currFilter->host.ip) && (servMgr->numFilters < (ServMgr::MAX_FILTERS-1)))								{									servMgr->numFilters++;									servMgr->filters[servMgr->numFilters].init();	// clear new entry								}							}else if (strncmp(fs,"bn",2)==0)								currFilter->flags |= ServFilter::F_BAN;							else if (strncmp(fs,"pr",2)==0)								currFilter->flags |= ServFilter::F_PRIVATE;							else if (strncmp(fs,"nw",2)==0)								currFilter->flags |= ServFilter::F_NETWORK;							else if (strncmp(fs,"di",2)==0)								currFilter->flags |= ServFilter::F_DIRECT;						}					}					// client					else if (strcmp(curr,"clientactive")==0)						servMgr->autoConnect = getCGIargBOOL(arg);					else if (strcmp(curr,"yp")==0)					{						String str(arg,String::T_ESC);						str.convertTo(String::T_ASCII);						servMgr->rootHost = str;					}					else if (strcmp(curr,"deadhitage")==0)						chanMgr->deadHitAge = getCGIargINT(arg);					else if (strcmp(curr,"refresh")==0)						servMgr->refreshHTML = getCGIargINT(arg);					else if (strcmp(curr,"auth")==0)					{						if (strcmp(arg,"cookie")==0)							servMgr->authType = ServMgr::AUTH_COOKIE;						else if (strcmp(arg,"http")==0)							servMgr->authType = ServMgr::AUTH_HTTPBASIC;					}else if (strcmp(curr,"expire")==0)					{						if (strcmp(arg,"session")==0)							servMgr->cookieList.neverExpire = false;						else if (strcmp(arg,"never")==0)							servMgr->cookieList.neverExpire = true;					}				}				// log options				servMgr->showLog = 0;				servMgr->showLog |= cmpCGIarg(cmd,"logDebug=","1") ? (1<<LogBuffer::T_DEBUG):0;				servMgr->showLog |= cmpCGIarg(cmd,"logErrors=","1") ? (1<<LogBuffer::T_ERROR):0;				servMgr->showLog |= cmpCGIarg(cmd,"logNetwork=","1") ? (1<<LogBuffer::T_NETWORK):0;				servMgr->showLog |= cmpCGIarg(cmd,"logChannel=","1") ? (1<<LogBuffer::T_CHANNEL):0;				unsigned int a;				a=0;				a = cmpCGIarg(cmd,"allowHTML1=","1") ? (a|ALLOW_HTML) : (a&~ALLOW_HTML);				a = cmpCGIarg(cmd,"allowServent1=","1") ? (a|ALLOW_SERVENT) : (a&~ALLOW_SERVENT);				a = cmpCGIarg(cmd,"allowData1=","1") ? (a|ALLOW_DATA) : (a&~ALLOW_DATA);				a = cmpCGIarg(cmd,"allowBroadcast1=","1") ? (a|ALLOW_BROADCAST) : (a&~ALLOW_BROADCAST);				servMgr->allowServer1 = a;				a = 0;				a = cmpCGIarg(cmd,"allowHTML2=","1") ? (a|ALLOW_HTML) : (a&~ALLOW_HTML);				a = cmpCGIarg(cmd,"allowServent2=","1") ? (a|ALLOW_SERVENT) : (a&~ALLOW_SERVENT);				a = cmpCGIarg(cmd,"allowData2=","1") ? (a|ALLOW_DATA) : (a&~ALLOW_DATA);				a = cmpCGIarg(cmd,"allowBroadcast2=","1") ? (a|ALLOW_BROADCAST) : (a&~ALLOW_BROADCAST);				servMgr->allowServer2 = a;				peercastInst->saveSettings();
				peercastApp->updateSettings();
				if ((servMgr->isRoot) && (brRoot))
					servMgr->broadcastRootSettings(getUpd);

				sprintf(jumpStr,"/admin?page=settings");									jumpArg = jumpStr;			}else if (cmpCGIarg(cmd,"page=","chaninfo"))			{
				ChanInfo info;				char *cp = cmd;				bool fromRelay=false;				while (cp=nextCGIarg(cp,curr,arg))				{					if (strcmp(curr,"id")==0)						info.id.fromStr(arg);					else if (strcmp(curr,"relay")==0)						fromRelay = atoi(arg)!=0;				}				html.setRefresh(servMgr->refreshHTML);				addHeader(html,0);								ChanHitList *chl = chanMgr->findHitList(info);				if (fromRelay)				{					Channel *c = chanMgr->findChannelByID(info.id);					if (c)					{						addChanInfo(html,&c->info,c);						if (chl)							addChanHits(html,chl,&c->sourceHost,c->info);					}				}else				{					if (chl)					{						addChanInfo(html,&chl->info,NULL);						addChanHits(html,chl,NULL,chl->info);					}				}				addFooter(html);							}else if (cmpCGIarg(cmd,"cmd=","fetch"))			{				ChanInfo info;				String curl;				char *cp = cmd;				while (cp=nextCGIarg(cp,curr,arg))				{					if (strcmp(curr,"url")==0)					{						curl.set(arg,String::T_ESC);						curl.convertTo(String::T_ASCII);					}else if (strcmp(curr,"name")==0)					{						info.name.set(arg,String::T_ESC);						info.name.convertTo(String::T_ASCII);					}else if (strcmp(curr,"desc")==0)					{						info.desc.set(arg,String::T_ESC);						info.desc.convertTo(String::T_ASCII);					}else if (strcmp(curr,"genre")==0)					{						info.genre.set(arg,String::T_ESC);						info.genre.convertTo(String::T_ASCII);					}else if (strcmp(curr,"contact")==0)					{						info.url.set(arg,String::T_ESC);						info.url.convertTo(String::T_ASCII);					}else if (strcmp(curr,"bitrate")==0)					{						info.bitrate = atoi(arg);					}else if (strcmp(curr,"type")==0)					{						info.contentType = ChanInfo::getTypeFromStr(arg);					}				}				Channel *c = chanMgr->createChannel(info,NULL);				if (c)					c->startURL(curl.cstr());				sprintf(jumpStr,"/admin?page=mychans");									jumpArg = jumpStr;			}else if (cmpCGIarg(cmd,"cmd=","stopserv"))			{				char *cp = cmd;				while (cp=nextCGIarg(cp,curr,arg))				{					if (strcmp(curr,"index")==0)					{						Servent *s = servMgr->findServentByID(atoi(arg));						if (s)							s->abort();					}				}				sprintf(jumpStr,"/admin?page=connections");									jumpArg = jumpStr;			}else if (cmpCGIarg(cmd,"cmd=","stopfind"))			{				chanMgr->lastHit = 0;				chanMgr->numFinds = 0;				chanMgr->searchActive = false;				sprintf(jumpStr,"/admin?page=chans");									jumpArg = jumpStr;			}else if (cmpCGIarg(cmd,"cmd=","find"))			{				ChanInfo info;				info.init();				char *cp = cmd;				while (cp=nextCGIarg(cp,curr,arg))				{					if (strcmp(curr,"name")==0)						info.name.set(arg);					else if (strcmp(curr,"genre")==0)						info.genre.set(arg);					else if (strcmp(curr,"bitrate")==0)						info.bitrate = atoi(arg);					else if (strcmp(curr,"id")==0)						info.id.fromStr(arg);				}				chanMgr->startSearch(info);				sprintf(jumpStr,"/admin?page=chans");									jumpArg = jumpStr;			}else if (cmpCGIarg(cmd,"cmd=","hitlist"))			{												Channel *clist[ChanMgr::MAX_CHANNELS];				int numChans=0;				bool stayConnected=hasCGIarg(cmd,"relay");				for(int i=0; i<ChanMgr::MAX_HITLISTS; i++)				{					ChanHitList *chl = &chanMgr->hitlists[i];					if (chl->isUsed())					{						char tmp[64];						sprintf(tmp,"c%d=",i);						if (cmpCGIarg(cmd,tmp,"1"))						{							Channel *c;							if (!(c=chanMgr->findChannelByID(chl->info.id)))							{								c = chanMgr->createChannel(chl->info,NULL);								if (!c)									throw StreamException("out of channels");								c->stayConnected = stayConnected;								c->startGet();							}							clist[numChans++] = c;						}					}				}				char *findArg = getCGIarg(cmd,"keywords=");				if (hasCGIarg(cmd,"relay"))				{					sys->sleep(500);					sprintf(jumpStr,"/admin?page=mychans");										jumpArg = jumpStr;				}			}else if (cmpCGIarg(cmd,"cmd=","clear"))			{				char *cp = cmd;				while (cp=nextCGIarg(cp,curr,arg))				{					if (strcmp(curr,"hostcache")==0)						servMgr->clearHostCache(ServHost::T_SERVENT);					else if (strcmp(curr,"packets")==0)					{						stats.clearRange(Stats::PACKETSSTART,Stats::PACKETSEND);						servMgr->numVersions = 0;					}				}				sprintf(jumpStr,"/admin?page=index");									jumpArg = jumpStr;			}else if (cmpCGIarg(cmd,"cmd=","upgrade"))			{				if (servMgr->downloadURL[0])				{					sprintf(jumpStr,"/admin?cmd=redirect&url=%s",servMgr->downloadURL);					jumpArg = jumpStr;				}			}else if (cmpCGIarg(cmd,"cmd=","chan"))			{												Channel *clist2[ChanMgr::MAX_CHANNELS];				int num2=0;				Channel *clist[ChanMgr::MAX_CHANNELS];				ChanInfo info;				int num = chanMgr->findChannels(info,clist,ChanMgr::MAX_CHANNELS);				for(int i=0; i<num; i++)				{					Channel *c = clist[i];					char tmp[64];					sprintf(tmp,"c%d=",c->index);					if (cmpCGIarg(cmd,tmp,"1"))						clist2[num2++] = c;				}				bool delay=false;				if (hasCGIarg(cmd,"bump"))				{					for(int i=0; i<num2; i++)						clist2[i]->bump = true;					delay = true;				}				if (hasCGIarg(cmd,"keep"))				{					for(int i=0; i<num2; i++)						clist2[i]->stayConnected = true;					delay = true;				}				if (hasCGIarg(cmd,"stop"))				{					for(int i=0; i<num2; i++)						clist2[i]->thread.active = false;					delay = true;				}				if (delay)					sys->sleep(500);				sprintf(jumpStr,"/admin?page=mychans");									jumpArg = jumpStr;			}else if (cmpCGIarg(cmd,"cmd=","connect"))			{												Servent *s = servMgr->servents;				{					char tmp[64];					sprintf(tmp,"c%d=",s->serventID);					if (cmpCGIarg(cmd,tmp,"1"))

⌨️ 快捷键说明

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