📄 servhtml.cpp
字号:
// ------------------------------------------------// 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\"","© <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 + -