📄 servhtml.cpp
字号:
html.startTableRow(row++); html.startTagEnd("td","HTML Authentication"); html.startTag("td"); html.startSingleTagEnd("input type=\"radio\" name=\"auth\" value=\"cookie\" %s",servMgr->authType==ServMgr::AUTH_COOKIE?"checked=\"1\"":""); html.startTagEnd("i","Cookies<br>"); html.startSingleTagEnd("input type=\"radio\" name=\"auth\" value=\"http\" %s",servMgr->authType==ServMgr::AUTH_HTTPBASIC?"checked=\"1\"":""); html.startTagEnd("i","Basic HTTP"); html.end(); html.end(); html.startTableRow(row++); html.startTagEnd("td","Cookies Expire"); html.startTag("td"); html.startSingleTagEnd("input type=\"radio\" name=\"expire\" value=\"session\" %s",servMgr->cookieList.neverExpire==false?"checked=\"1\"":""); html.startTagEnd("i","End of session<br>"); html.startSingleTagEnd("input type=\"radio\" name=\"expire\" value=\"never\" %s",servMgr->cookieList.neverExpire==true?"checked=\"1\"":""); html.startTagEnd("i","Never"); html.end(); html.end(); html.end();} // -----------------------------------void Servent::addSecurityOptions(HTML &html){ html.startTag("table width=\"100%%\" border=\"0\" align=\"center\""); html.startTag("tr bgcolor=\"#cccccc\" align=\"center\""); html.startTagEnd("td colspan=\"3\" ","<b>Security</b>"); html.end(); int row=0; html.startTableRow(row++); html.startTagEnd("td","<b>Allow on port:</b>"); html.startTagEnd("td","<b>%d<b>",servMgr->serverHost.port); html.startTagEnd("td","<b>%d<b>",servMgr->serverHost.port+1); html.end(); unsigned int a1 = servMgr->allowServer1; unsigned int a2 = servMgr->allowServer2; // port 1 html.startTableRow(row++); html.startTagEnd("td","HTML"); html.startTag("td"); html.startSingleTagEnd("input type=\"checkbox\" name=\"allowHTML1\" value=\"1\" %s",a1&ALLOW_HTML?"checked=\"1\"":""); //html.addOptionBox("allowHTML1",s1->isAllowed(ALLOW_HTML)?0:1,"Allow","1","Deny","0",NULL); html.end(); html.startTag("td"); html.startSingleTagEnd("input type=\"checkbox\" name=\"allowHTML2\" value=\"1\" %s",a2&ALLOW_HTML?"checked=\"1\"":""); //html.addOptionBox("allowHTML2",s2->isAllowed(ALLOW_HTML)?0:1,"Allow","1","Deny","0",NULL); html.end(); html.end(); html.startTableRow(row++); html.startTagEnd("td","Broadcasting"); html.startTag("td"); html.startSingleTagEnd("input type=\"checkbox\" name=\"allowBroadcast1\" value=\"1\" %s",a1&ALLOW_BROADCAST?"checked=\"1\"":""); html.end(); html.startTag("td"); html.startSingleTagEnd("input type=\"checkbox\" name=\"allowBroadcast2\" value=\"1\" %s",a2&ALLOW_BROADCAST?"checked=\"1\"":""); html.end(); html.end(); html.startTableRow(row++); html.startTagEnd("td","Servents"); html.startTag("td"); html.startSingleTagEnd("input type=\"checkbox\" name=\"allowServent1\" value=\"1\" %s",a1&ALLOW_SERVENT?"checked=\"1\"":""); html.end(); html.startTag("td"); html.startSingleTagEnd("input type=\"checkbox\" name=\"allowServent2\" value=\"1\" %s",a2&ALLOW_SERVENT?"checked=\"1\"":""); html.end(); html.end(); html.startTableRow(row++); html.startTagEnd("td","Data"); html.startTag("td"); html.startSingleTagEnd("input type=\"checkbox\" name=\"allowData1\" value=\"1\" %s",a1&ALLOW_DATA?"checked=\"1\"":""); html.end(); html.startTag("td"); html.startSingleTagEnd("input type=\"checkbox\" name=\"allowData2\" value=\"1\" %s",a2&ALLOW_DATA?"checked=\"1\"":""); html.end(); html.end(); html.end();}// -----------------------------------void Servent::addConnectionsPage(HTML &html){ html.setRefresh(servMgr->refreshHTML); addHeader(html,4); html.startTag("table border=\"0\" width=\"95%%\" align=\"center\""); html.startTag("form method=\"get\" action=\"/admin\""); html.startTag("tr bgcolor=\"#cccccc\" align=\"center\""); html.startTagEnd("td",""); html.startTagEnd("td","<b>Type<b>"); html.startTagEnd("td","<b>Status</b>"); html.startTagEnd("td","<b>Time</b>"); html.startTagEnd("td","<b>IP:Port</b>"); html.startTagEnd("td","<b>In</b>"); html.startTagEnd("td","<b>Out</b>"); html.startTagEnd("td","<b>Queue<br>(nrm/pri)</b>"); html.startTagEnd("td","<b>Route</b>"); html.startTagEnd("td","<b>Agent</b>"); html.startTagEnd("td","<b>Kbits/s</b>"); html.end(); int cnt=0; for(int i=0; i<ServMgr::MAX_SERVENTS; i++) { if (servMgr->servents[i].type != Servent::T_NONE) { Servent *s = &servMgr->servents[i]; Host h = s->getHost(); { int ip = h.ip; int port = h.port; Host h(ip,port); char hostName[64]; h.toStr(hostName); unsigned int tnum = 0; char tdef = 's'; if (s->lastConnect) tnum = sys->getTime()-s->lastConnect; html.startTableRow(cnt++); String tmp; html.startTag("td"); html.startTag("b",""); sprintf(tmp.data,"/admin?cmd=stopserv&index=%d",i); html.addLink(tmp.data,"Stop"); html.end(); html.end(); if (s->type == Servent::T_STREAM) { html.startTagEnd("td",s->getTypeStr()); html.startTagEnd("td",s->getStatusStr()); html.startTagEnd("td","%d%c",tnum,tdef); html.startTagEnd("td",hostName); html.startTagEnd("td","-"); html.startTagEnd("td","%d",s->currPos); html.startTagEnd("td","-"); html.startTagEnd("td","-"); }else{ html.startTagEnd("td",s->getTypeStr()); html.startTagEnd("td",s->getStatusStr()); html.startTagEnd("td","%d%c",tnum,tdef); html.startTagEnd("td",hostName); html.startTagEnd("td","%d",s->gnuStream.packetsIn); html.startTagEnd("td","%d",s->gnuStream.packetsOut); html.startTagEnd("td","%d / %d",s->outPacketsNorm.numPending(),s->outPacketsPri.numPending()); int nr = s->seenIDs.numUsed(); unsigned int tim = sys->getTime()-s->seenIDs.getOldest(); String tstr; tstr.setFromStopwatch(tim); if (nr) html.startTagEnd("td","%s (%d)",tstr.cstr(),nr); else html.startTagEnd("td","-"); } html.startTagEnd("td",s->agent.cstr()); if (s->sock) { unsigned int tot = s->sock->bytesInPerSec+s->sock->bytesOutPerSec; html.startTagEnd("td","%.1f",BYTES_TO_KBPS(tot)); }else html.startTagEnd("td","-"); html.end(); // tr } } } html.end(); html.end(); addFooter(html);}// -----------------------------------static int compareNamesDown(ChanHitList **c2, ChanHitList **c1){return stricmp(c1[0]->info.name.cstr(),c2[0]->info.name.cstr());}static int compareBitratesDown(ChanHitList **c2, ChanHitList **c1){return c1[0]->info.bitrate-c2[0]->info.bitrate;}static int compareListenersDown(ChanHitList **c2, ChanHitList **c1){return c1[0]->numListeners()-c2[0]->numListeners();}static int compareHitsDown(ChanHitList **c2, ChanHitList **c1){return c1[0]->numHits()-c2[0]->numHits();}static int compareTypesDown(ChanHitList **c2, ChanHitList **c1){return stricmp(ChanInfo::getTypeStr(c1[0]->info.contentType),ChanInfo::getTypeStr(c2[0]->info.contentType));}static int compareGenresDown(ChanHitList **c2, ChanHitList **c1){return stricmp(c1[0]->info.genre.cstr(),c2[0]->info.genre.cstr());}static int compareNamesUp(ChanHitList **c1, ChanHitList **c2){return stricmp(c1[0]->info.name.cstr(),c2[0]->info.name.cstr());}static int compareBitratesUp(ChanHitList **c1, ChanHitList **c2){return c1[0]->info.bitrate-c2[0]->info.bitrate;}static int compareListenersUp(ChanHitList **c1, ChanHitList **c2){return c1[0]->numListeners()-c2[0]->numListeners();}static int compareHitsUp(ChanHitList **c1, ChanHitList **c2){return c1[0]->numHits()-c2[0]->numHits();}static int compareTypesUp(ChanHitList **c1, ChanHitList **c2){return stricmp(ChanInfo::getTypeStr(c1[0]->info.contentType),ChanInfo::getTypeStr(c2[0]->info.contentType));}static int compareGenresUp(ChanHitList **c1, ChanHitList **c2){return stricmp(c1[0]->info.genre.cstr(),c2[0]->info.genre.cstr());}static COMPARE_FUNC2 compareFuncs[]={ compareNamesDown,compareNamesUp, compareBitratesDown,compareBitratesUp, compareListenersDown,compareListenersUp, compareHitsDown,compareHitsUp, compareTypesDown,compareTypesUp, compareGenresDown,compareGenresUp,};// -----------------------------------static void addChanInfoLink(HTML &html, ChanInfo &info,bool fromRelay){ char tmp[128]; char idstr[64]; info.id.toStr(idstr); sprintf(tmp,"/admin?page=chaninfo&id=%s&relay=%d",idstr,fromRelay?1:0); html.addLink(tmp,"Info"); }// -----------------------------------void addChannelInfo(HTML &html, ChanInfo &info, bool fromRelay, bool showPlay, bool showInfo, bool showURL, bool showRelay){ String name,url,desc; name = info.name; name.convertTo(String::T_HTML); TrackInfo track = info.track; track.convertTo(String::T_HTML); url = info.url; url.convertTo(String::T_ASCII); desc = info.desc; desc.convertTo(String::T_HTML); char idStr[64]; info.id.toStr(idStr); { String tmp; sprintf(tmp.data,"/pls/%s.m3u",idStr); html.startTag("td align=\"left\""); html.startTagEnd("b",name.cstr()); html.startTag("font size=\"-1\"",""); if (!desc.isEmpty()) html.startTagEnd("i","<br>%s",desc.cstr()); if (!track.artist.isEmpty() || !track.title.isEmpty()) html.startTagEnd("i","<br>(%s - %s)",track.artist.cstr(),track.title.cstr()); html.end(); html.startTag("font size=\"-1\""); if (showPlay) { html.startTag("b","<br>"); html.addLink(tmp.data,"Play"); html.end(); } if ((!fromRelay) && (showRelay)) { html.startTag("b"," - "); sprintf(tmp.data,"/admin?cmd=relay&id=%s",idStr); html.addLink(tmp.data,"Relay"); html.end(); } if (showRelay) { html.startTag("b"," - "); addChanInfoLink(html,info,fromRelay); html.end(); } if ((!url.isEmpty()) && (showURL)) { html.startTag("b"," - "); if (strstr(url.cstr(),"mailto:")) { html.addLink(url.cstr(),"MAIL"); }else{ String tmp; sprintf(tmp.data,"/admin?cmd=redirect&url=%s",url.cstr()); html.addLink(tmp.data,"WWW",true); } html.end(); } if (fromRelay) { html.startTag("b"," - "); sprintf(tmp.data,"/admin?cmd=bump&id=%s",idStr); html.addLink(tmp.data,"Bump"); html.end(); html.startTag("b"," - "); sprintf(tmp.data,"/admin?cmd=stop&id=%s",idStr); html.addLink(tmp.data,"Stop"); html.end(); } html.end(); html.end(); }}// -----------------------------------void Servent::addAllChannelsPage(HTML &html, SORT sort, bool dir, ChanInfo *info){ //while (chanMgr->numFinds) // sys->sleepIdle(); //bool showFind = ((sys->getTime()-chanMgr->lastHit)>15) && (!chanMgr->searchActive); bool showFind = true; if (!showFind) html.setRefresh(servMgr->refreshHTML); addHeader(html,2); //bool showFind = chanMgr->numFinds==0; html.startTag("table border=\"0\" align=\"center\""); //html.startTag("form method=\"get\" action=\"/admin\""); html.startTag("form method=\"get\" action=\"/admin\""); if (!showFind) { html.startTagEnd("input name=\"cmd\" type=\"hidden\" value=\"stopfind\""); html.startTag("tr"); html.startTag("td"); html.startTagEnd("input name=\"stop\" type=\"submit\" value=\" Stop Search \""); html.end(); html.end(); }else { html.startTagEnd("input name=\"page\" type=\"hidden\" value=\"chans\""); html.startTag("tr"); html.startTagEnd("td"); html.startTagEnd("td","Name"); html.startTagEnd("td","Genre"); html.startTagEnd("td","Bitrate"); html.startTagEnd("td","ID"); html.end(); html.startTag("tr"); html.startTag("td"); html.startTagEnd("input name=\"find\" type=\"submit\" value=\" Search \""); html.end(); String name,genre; int bitrate; //ChanInfo *info = &chanMgr->searchInfo; name = info->name; genre = info->genre; bitrate = info->bitrate; name.convertTo(String::T_HTML); genre.convertTo(String::T_HTML); char idStr[64],brStr[64]; if (info->id.isSet()) info->id.toStr(idStr); else idStr[0] = 0; if (bitrate) sprintf(brStr,"%d",bitrate); else brStr[0] = 0; html.startTag("td"); html.startSingleTagEnd("input name=\"name\" type=\"text\" value=\"%s\"",name.cstr()); html.end(); html.startTag("td"); html.startSingleTagEnd("input name=\"genre\" type=\"text\" value=\"%s\"",genre.cstr()); html.end(); html.startTag("td"); html.startSingleTagEnd("input name=\"bitrate\" size=\"5\" type=\"text\" value=\"%s\"",brStr); html.end(); html.startTag("td"); html.startSingleTagEnd("input name=\"id\" size=\"34\" type=\"text\" value=\"%s\"",idStr); html.end(); html.end(); // tr } html.end(); // form html.end(); // table html.startTag("table border=\"0\" width=\"95%%\" align=\"center\"");#if 0 html.startTag("form method=\"get\" action=\"/admin\""); html.startTag("tr"); html.startTagEnd("input name=\"play\" type=\"submit\" value=\"Play selected\""); html.startTagEnd("input name=\"relay\" type=\"submit\" value=\"Relay selected\""); html.startTagEnd("input name=\"cmd\" type=\"hidden\" value=\"hitlist\""); html.end();#endif html.startTag("tr bgcolor=\"#cccccc\" align=\"center\"");#if 0 html.startTagEnd("td width=\"1%%\"",""); #endif html.startTagEnd("td","<b><a href=\"/admin?page=chans&sort=name&dir=%s\">Channel</a></b>",dir?"down":"up"); html.startTagEnd("td","<b><a href=\"/admin?page=chans&sort=genre&dir=%s\">Genre</a></b>",dir?"down":"up"); html.startTagEnd("td width=\"1%%\"","<b><a href=\"/admin?page=chans&sort=bitrate&dir=%s\">Bitrate (kb/s)</a></b>",dir?"down":"up"); html.startTagEnd("td width=\"1%%\"","<b><a href=\"/admin?page=chans&sort=type&dir=%s\">Type</a></b>",dir?"down":"up"); html.startTagEnd("td width=\"2%%\"","<b><a href=\"/admin?page=chans&sort=hosts&dir=%s\">Hits</a></b>",dir?"down":"up"); html.end(); ChanHitList *hits[ChanMgr::MAX_HITLISTS]; int numHits=0; int i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -