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

📄 servhtml.cpp

📁 P2P应用 : Peercast的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// ------------------------------------------------// File : servhtml.cpp// Date: 4-apr-2002// Author: giles// Desc: //		HTML support for servents, TODO: should be in its own class//// (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 <stdlib.h>#include "servent.h"#include "servmgr.h"#include "html.h"#include "stats.h"typedef int (*COMPARE_FUNC)(const void *,const void *);typedef int (*COMPARE_FUNC2)(ChanHitList **, ChanHitList **);// -----------------------------------void Servent::addBasicHeader(HTML &html){
	html.writeOK(MIME_HTML);	html.startHTML();	html.addHead();	html.startBody();}// -----------------------------------void Servent::addHeader(HTML &html, int sel){	addBasicHeader(html);	html.startTagEnd("div align=\"center\"",PCX_VERSTRING);	if (servMgr->downloadURL[0])	{		html.startTag("font color=\"#FF0000\"");			html.startTag("div align=\"center\"");				html.startTagEnd("h2","! Attention !");			html.end();		html.end();		html.startTag("h3");			html.startTag("div align=\"center\"");				html.addLink("/admin?cmd=upgrade","Click here to update your client");			html.end();		html.end();	}	if (!servMgr->rootMsg.isEmpty())	{		String pcMsg = servMgr->rootMsg;		pcMsg.convertTo(String::T_HTML);		html.startTag("div align=\"center\"");			html.startTagEnd("h3",pcMsg.cstr());		html.end();	}	html.startTag("table width=\"100%%\"");		html.startTag("tr bgcolor=\"#CCCCCC\"");						if (sel >= 0)			{				html.startTag("td");					html.startTag("div align=\"center\"");					html.addLink("/admin?page=index",sel==1?"<b>Index</b>":"Index");					html.end();				html.end();				html.startTag("td");					html.startTag("div align=\"center\"");
						if (servMgr->isRoot)							html.addLink("/admin?page=chans",sel==2?"<b>All channels</b>":"All channels");
						else
						{
							String url;
							sprintf(url.cstr(),"http://yp.peercast.org?port=%d",servMgr->serverHost.port);							html.addLink(url.cstr(),"Yellow Pages",true);
						}
					html.end();				html.end();				html.startTag("td");					html.startTag("div align=\"center\"");						html.addLink("/admin?page=mychans",sel==3?"<b>Relayed channels</b>":"Relayed channels");					html.end();				html.end();				html.startTag("td");					html.startTag("div align=\"center\"");						html.addLink("/admin?page=broadcast",sel==8?"<b>Broadcast</b>":"Broadcast");					html.end();				html.end();				html.startTag("td");					html.startTag("div align=\"center\"");					html.addLink("/admin?page=connections",sel==4?"<b>Connections</b>":"Connections");					html.end();				html.end();				html.startTag("td");					html.startTag("div align=\"center\"");					html.addLink("/admin?page=settings",sel==5?"<b>Settings</b>":"Settings");					html.end();				html.end();				html.startTag("td");					html.startTag("div align=\"center\"");					html.addLink("/admin?page=viewlog",sel==7?"<b>View Log</b>":"View Log");					html.end();				html.end();				html.startTag("td");					html.startTag("div align=\"center\"");					html.addLink("/admin?page=logout",sel==6?"<b>Logout</b>":"Logout");					html.end();				html.end();			}else{				html.startTagEnd("td");			}		html.end(); // tr	html.end(); // table	html.startTagEnd("b","<br>");}// -----------------------------------void Servent::addFooter(HTML &html){	html.startTagEnd("p","<br>");	html.startTag("table width=\"100%%\"");		html.startTag("tr bgcolor=\"#CCCCCC\"");						html.startTag("td");				html.startTagEnd("div align=\"center\"","&copy; <a target=\"_blank\" href=/admin?cmd=redirect&url=www.peercast.org>peercast.org</a> 2004");			html.end();		html.end();	html.end();	html.end();	// body	html.end();	// html}// -----------------------------------void Servent::addAdminPage(HTML &html){	html.setRefresh(servMgr->refreshHTML);	addHeader(html,1);	html.startTag("table border=\"0\" align=\"center\"");			html.startTag("tr align=\"center\"");				html.startTag("td valign=\"top\"");					addInformation(html);				html.end();				html.startTag("td valign=\"top\"");					addStatistics(html);				html.end();			html.end();	html.end();	addFooter(html);}// -----------------------------------void Servent::addLogPage(HTML &html){	addHeader(html,7);
	html.addLink("/admin?cmd=clearlog","Clear log<br>");
	html.addLink("#bottom"," View tail<br><br>");

	html.startTag("font size=\"-1\"");

		sys->logBuf->dumpHTML(*html.out);

	html.end();
	html.addLink("/admin?page=viewlog","<br>View top");	html.startSingleTagEnd("a name=\"bottom\"");	addFooter(html);}// -----------------------------------void Servent::addLoginPage(HTML &html){	addHeader(html,-1);	html.startTag("table border=\"0\" align=\"center\"");		html.startTag("tr bgcolor=\"#cccccc\" align=\"center\"");			html.startTagEnd("td colspan=\"2\" ","<b>Login</b>"); 		html.end();		html.startTag("form method=\"get\" action=\"/admin?\"");		html.startSingleTagEnd("input name=\"cmd\" type=\"hidden\" value=\"login\"");							int row=0;		// password		html.startTableRow(row++);			html.startTagEnd("td","Password");			html.startTag("td");				html.startSingleTagEnd("input name=\"pass\" size=\"10\" type=\"password\"");			html.end();		html.end();		// login		html.startTableRow(row++);			html.startTagEnd("td","");			html.startTag("td");				html.startTagEnd("input name=\"submit\" type=\"submit\" id=\"submit\" value=\"Login\"");								html.end();		html.end();	html.end();	addFooter(html);}// -----------------------------------void Servent::addLogoutPage(HTML &html){	addHeader(html,6);	html.startTag("table border=\"0\" align=\"center\"");		html.startTag("tr align=\"center\"");			html.startTag("td colspan=\"2\" valign=\"top\"");				html.startTag("tr align=\"center\"");					html.startTag("td");					if ((servMgr->authType != ServMgr::AUTH_HTTPBASIC) 					     && !sock->host.isLocalhost()						)					{						html.startTag("form method=\"get\" action=\"/admin\"");							html.startTagEnd("input name=\"logout\" type=\"submit\" value=\"Logout\"");												html.startSingleTagEnd("input name=\"cmd\" type=\"hidden\" value=\"logout\"");											html.end();					}					html.end();					html.startTag("td");						html.startTag("form method=\"get\" action=\"/admin\"");							html.startTagEnd("input name=\"logout\" type=\"submit\" value=\"Shutdown\"");												html.startSingleTagEnd("input name=\"page\" type=\"hidden\" value=\"shutdown\"");											html.end();					html.end();				html.end();			html.end();		html.end(); // form	html.end(); // table		addFooter(html);}// -----------------------------------void Servent::addShutdownPage(HTML &html){	html.startTag("h1");		html.startTagEnd("div align=\"center\"","PeerCast will shutdown in 3 seconds");	html.end();	servMgr->shutdownTimer = 3;}// -----------------------------------void addChannelSourceTag(HTML &html, Channel *c){	const char *stype = c->getSrcTypeStr();	const char *ptype = ChanInfo::getProtocolStr(c->info.srcProtocol);	if (!c->sourceURL.isEmpty())		html.startTagEnd("td","%s-%s:<br>%s",stype,ptype,c->sourceURL.cstr()); 	else	{		char ipStr[64];		if (c->sock)			c->sock->host.toStr(ipStr);		else		{			strcpy(ipStr,"Unknown");		}		html.startTagEnd("td","%s-%s:<br>%s",stype,ptype,ipStr); 	}}// -----------------------------------void	Servent::addChanInfo(HTML &html, ChanInfo *info, Channel *ch){	int row=0;	TrackInfo track;	String name,genre,url,desc,comment,temp,hitTime;	track = info->track;	track.convertTo(String::T_HTML);	name = info->name;	name.convertTo(String::T_HTML);	genre = info->genre;	genre.convertTo(String::T_HTML);	url = info->url;	url.convertTo(String::T_HTML);	desc = info->desc;	desc.convertTo(String::T_HTML);	comment = info->comment;	comment.convertTo(String::T_HTML);	char idStr[64];	info->id.toStr(idStr);	html.startTag("table border=\"0\" align=\"center\"");		html.startTag("tr bgcolor=\"#cccccc\" align=\"center\"");			html.startTagEnd("td colspan=\"2\"","<b>Channel Information</b>"); 		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Name");			html.startTag("td");				sprintf(temp.data,"peercast://pls/%s",idStr);				html.addLink(temp.data,name.cstr());			html.end();		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Genre");			html.startTagEnd("td",genre.cstr());		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Desc.");			html.startTagEnd("td",desc.cstr());		html.end();		html.startTableRow(row++);			html.startTagEnd("td","URL");			html.startTag("td");				String tmp;				sprintf(tmp.data,"/admin?cmd=redirect&url=%s",url.cstr());				html.addLink(tmp.data,url.cstr(),true);			html.end();		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Comment");			html.startTagEnd("td",comment.cstr());		html.end();		html.startTableRow(row++);			html.startTagEnd("td","ID");			html.startTagEnd("td",idStr);		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Type");			html.startTagEnd("td",ChanInfo::getTypeStr(info->contentType));		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Bitrate");			html.startTagEnd("td","%d kb/s",info->bitrate);		html.end();

		if (ch)		{			html.startTableRow(row++);				html.startTagEnd("td","Source");				addChannelSourceTag(html,ch);			html.end();			html.startTableRow(row++);					html.startTagEnd("td","Uptime");					String uptime;					if (info->lastPlayTime)						uptime.setFromStopwatch(sys->getTime()-info->lastPlayTime);					else						uptime.set("-");					html.startTagEnd("td",uptime.cstr());			html.end();			html.startTableRow(row++);					html.startTagEnd("td","Skips");					html.startTagEnd("td","%d",info->numSkips);			html.end();					html.startTableRow(row++);				html.startTagEnd("td","Status");				html.startTagEnd("td",ch->getStatusStr());			html.end();

			html.startTableRow(row++);
				html.startTagEnd("td","Position");
				html.startTagEnd("td","%d",ch->streamPos);
			html.end();

			html.startTableRow(row++);
				html.startTagEnd("td","Head");
				html.startTagEnd("td","%d (%d bytes)",ch->headPack.pos,ch->headPack.len);
			html.end();

		}		html.startTableRow(row++);			html.startTagEnd("td colspan=\"2\" align=\"center\"","<b>Current Track</b>");		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Artist");			html.startTagEnd("td",track.artist.cstr());		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Title");			html.startTagEnd("td",track.title.cstr());		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Album");			html.startTagEnd("td",track.album.cstr());		html.end();		html.startTableRow(row++);			html.startTagEnd("td","Genre");

⌨️ 快捷键说明

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