📄 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){ sock->writeLine(HTTP_SC_OK); sock->writeLine("%s %s",HTTP_HS_SERVER,PCX_AGENT); sock->writeLine("%s %s",HTTP_HS_CONTENT,MIME_HTML); sock->writeLine("%s %s",HTTP_HS_CACHE,"no-cache"); sock->writeLine("%s %s",HTTP_HS_CONNECTION,"close"); sock->writeLine(""); html.startHTML(); html.addHead(); html.startBody();}// -----------------------------------void Servent::addHeader(HTML &html, int sel){ addBasicHeader(html); html.startTagEnd("div align=\"center\"",HTML_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\""); html.addLink("/admin?page=chans",sel==2?"<b>All channels</b>":"All channels"); 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> 2003"); 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); LogBuffer *lb = sys->logBuf; lb->lock.on(); try { unsigned int nl = lb->currLine; unsigned int sp = 0; if (nl > lb->maxLines) { nl = lb->maxLines-1; sp = (lb->currLine+1)%lb->maxLines; } String tim,str; if (nl) { html.addLink("/admin?cmd=clearlog","Clear log<br>"); html.addLink("#bottom"," View tail<br><br>"); html.startTag("font size=\"-1\""); for(unsigned int i=0; i<nl; i++) { unsigned int bp = sp*lb->lineLen; if (lb->types[sp]) { tim.setFromTime(lb->times[sp]); html.addContent(tim.cstr()); html.addContent(" <b>["); html.addContent(lb->getTypeStr(lb->types[sp])); html.addContent("]</b> "); } str.set(&lb->buf[bp]); str.convertTo(String::T_HTML); html.addContent(str.cstr()); html.addContent("<br>"); sp++; sp %= lb->maxLines; } html.end(); html.addLink("/admin?page=viewlog","<br>View top"); html.startSingleTagEnd("a name=\"bottom\""); } }catch(StreamException &) { } lb->lock.off(); 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 *ctype = ChanInfo::getTypeStr(c->info.srcType); if (!c->sourceURL.isEmpty()) html.startTagEnd("td","%s-%s from %s",stype,ctype,c->sourceURL.cstr()); else { char ipStr[64]; if (c->sock) c->sock->host.toStr(ipStr); else { strcpy(ipStr,"Unknown"); } if (c->type == Channel::T_RELAY) html.startTagEnd("td","%s-%s relay from %s",stype,ctype,ipStr); else if (c->type == Channel::T_BROADCAST) html.startTagEnd("td","%s-%s broadcast from %s",stype,ctype,ipStr); else html.startTagEnd("td","%s-%s from %s",stype,ctype,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); 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"); char idStr[64]; info->id.toStr(idStr); sprintf(temp.data,"peercast://pls/%s.pls",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"); char idstr[128]; info->id.toStr(idstr); 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();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -