📄 webserver.java
字号:
writer.writeln("<!--"); //$NON-NLS-1$
writer.writeln("body, h1, h2, th, td, p, ul, li { font-family: Arial, Helvetica, sans-serif }"); //$NON-NLS-1$
writer.writeln("th { text-align: right }"); //$NON-NLS-1$
writer.writeln("table.freeloader th { text-align: left }"); //$NON-NLS-1$
writer.writeln("-->"); //$NON-NLS-1$
writer.writeln("</STYLE>"); //$NON-NLS-1$
writer.writeln("<META HTTP-EQUIV=\"refresh\" CONTENT=\"" + REFRESH_PERIOD + "; URL=http://" + getWebHost(peer) + "/\">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
writer.writeln("<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=ISO-8859-1\">"); //$NON-NLS-1$
writer.writeln("</HEAD>"); //$NON-NLS-1$
writer.writeln("<BODY>"); //$NON-NLS-1$
writer.writeln("<H1>" + textToHTML(Messages.getString("WebServer.TITLE", new Object[]{Radio.s2sName, peer.getSocketAddress()})) + "</H1>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
MetadataPacket metadataPacket = peer.getBuffer().getNewestMetadataPacket();
if (shutdown)
return;
if (metadataPacket != null)
{
Metadata metadata = peer.getUI().getMetadata();
writer.writeln("<H2>" + textToHTML(Messages.getString("WebServer.STREAM")) + "</H2>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
writer.writeln("<TABLE BORDER>"); //$NON-NLS-1$
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.STATION_NAME")) + "</TH><TD>" + makeLinkOfName(metadata.getStationName(), metadata.getStationURL()) + "</TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
// Hack
if (metadata.getContentType().toLowerCase().equals("audio/mpeg") || metadata.getContentType().toLowerCase().equals("application/ogg")) //$NON-NLS-1$ //$NON-NLS-2$
{
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.CURRENT_SONG")) + "</TH><TD>" + makeLinkOfName(metadata.getSongTitle(), metadata.getSongURL()) + "</TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
else if (metadata.getContentType().toLowerCase().equals("video/nsv")) //$NON-NLS-1$ //$NON-NLS-2$
{
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.CURRENT_VIDEO")) + "</TH><TD>" + makeLinkOfName(metadata.getSongTitle(), metadata.getSongURL()) + "</TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
else
{
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.CURRENT_CONTENT")) + "</TH><TD>" + makeLinkOfName(metadata.getSongTitle(), metadata.getSongURL()) + "</TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.STATION_GENRE")) + "</TH><TD>" + textToHTML(metadata.getGenre()) + "</TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.STATION_DESCRIPTION")) + "</TH><TD>" + textToHTML(metadata.getDescription()) + "</TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.BIT_RATE")) + "</TH><TD>" + textToHTML(Messages.getString("WebServer.BIT_RATE_VALUE", new Integer(metadata.getAverageByterate() / 125))) + "</TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
writer.writeln("</TABLE>"); //$NON-NLS-1$
/*
if (player instanceof ShoutcastPlayer)
{
writer.writeln("<H2>Zusätzliche Shoutcast-Metadaten:</H2>");
writer.writeln("<TABLE BORDER>");
Enumeration enumeration = metadata.propertyNames();
while (enumeration.hasMoreElements())
{
String key = (String)enumeration.nextElement();
boolean found = false;
for (int i=0; i < Metadata.knownMetadataKeys.length; i++)
{
if (Metadata.knownMetadataKeys[i].equals(key))
{
found = true;
break;
}
}
if (found)
{
continue;
}
String value = (String)metadata.getProperty(key);
writer.writeln("<TR><TH>" + textToHTML(key) + ":</TH><TD>" + textToHTML(value) + "</TD></TR>");
}
writer.writeln("</TABLE>");
}
*/
}
if (shutdown)
return;
if (player instanceof HttpPlayer)
{
HttpPlayer shoutcastPlayer = (HttpPlayer)player;
writer.writeln("<P><A HREF=\"" + shoutcastPlayer.getPlaylistURL() + "\">" + textToHTML(Messages.getString("WebServer.PLAY_THIS_STATION")) + "</A></P>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
writer.writeln("<P>" + textToHTML(Messages.getString("WebServer.STREAM_ADDRESS")) + " <TT>" + shoutcastPlayer.getStreamURL() + "</TT></P>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
synchronized(peer)
{
if (shutdown)
return;
String listeners = "";
if (peer.isServer())
{
int number = 0;
if (MessageDispatcher.acceptedPeers != null)
number = MessageDispatcher.acceptedPeers.size();
listeners = "(Listeners: " + number + ")";
}
writer.writeln("<H2>" + textToHTML(Messages.getString("WebServer.P2P_NETWORK")) + listeners + "</H2>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
writer.writeln("<TABLE BORDER>"); //$NON-NLS-1$
if (peer.isServer())
{
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.BROADCASTER")) + "</TH><TD><EM>" + textToHTML(Messages.getString("WebServer.THAT_IS_ME")) + "</EM></TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
}
else
{
if (peer.getServer() != null)
{
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.BROADCASTER")) + "</TH><TD>" + makeLink(peer.getServer()) + "</TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
else
{
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.BROADCASTER")) + "</TH><TD><EM>" + textToHTML(Messages.getString("WebServer.MISSING")) + "</EM></TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
}
if (peer.getSupplier() != null)
{
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.SUPPLIER")) + "</TH><TD>" + makeLink(peer.getSupplier()) + "</TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
else
{
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.SUPPLIER")) + "</TH><TD><EM>" + textToHTML(Messages.getString("WebServer.MISSING")) + "</EM></TD></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
}
}
writer.write("<TR><TH>" + textToHTML(Messages.getString("WebServer.REMOTE_CHILDREN")) + "</TH><TD>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
LinkedList remoteChildren = peer.getRemoteChildren();
if (remoteChildren.size() != 0)
{
for (int i=0; i < remoteChildren.size(); i++)
{
if (i != 0)
{
writer.write("<BR>"); //$NON-NLS-1$
}
writer.write(makeLink((RemotePeer)remoteChildren.get(i)));
}
}
else
{
writer.write("<EM>" + textToHTML(Messages.getString("WebServer.NONE")) + "</EM>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
writer.writeln("</TD></TR>"); //$NON-NLS-1$
writer.write("<TR><TH>" + textToHTML(Messages.getString("WebServer.LOCAL_CHILDREN")) + "</TH><TD>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
LinkedList localChildren = peer.getLocalChildren();
if (localChildren.size() != 0)
{
for (int i=0; i < localChildren.size(); i++)
{
if (i != 0)
{
writer.write("<BR>"); //$NON-NLS-1$
}
writer.write(makeLink((RemotePeer)localChildren.get(i)));
}
}
else
{
writer.write("<EM>" + textToHTML(Messages.getString("WebServer.NONE")) + "</EM>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
writer.writeln("</TD></TR>"); //$NON-NLS-1$
writer.write("<TR><TH>" + textToHTML(Messages.getString("WebServer.BANNED_PEERS")) + "</TH><TD>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Vector bannedPeers = peer.getBannedPeers();
if (bannedPeers.size() != 0)
{
for (int i=0; i < bannedPeers.size(); i++)
{
if (i != 0)
{
writer.write("<BR>"); //$NON-NLS-1$
}
writer.write(makeLink((RemotePeer)bannedPeers.get(i)));
}
}
else
{
writer.write("<EM>" + textToHTML(Messages.getString("WebServer.NONE")) + "</EM>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
writer.writeln("</TD></TR>"); //$NON-NLS-1$
writer.writeln("</TABLE>"); //$NON-NLS-1$
writer.writeln("<H2>" + textToHTML(Messages.getString("WebServer.FREELOADER_COMPLAINTS")) + "</H2>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
boolean freeloaderFound = false;
Vector children = peer.getChildren();
for (int i=0; i < children.size(); i++)
{
RemotePeerData childData = peer.getChildData((RemotePeer)children.get(i));
Vector freeloaderComplainants = childData.getFreeloaderComplainants();
if (freeloaderComplainants.size() != 0)
{
if (!freeloaderFound)
{
freeloaderFound = true;
writer.writeln("<TABLE CLASS=\"freeloader\" BORDER>"); //$NON-NLS-1$
writer.writeln("<TR><TH>" + textToHTML(Messages.getString("WebServer.POSSIBLE_FREELOADER")) + "</TH><TH>" + textToHTML(Messages.getString("WebServer.REPORTED_BY")) + "</TH></TR>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
}
writer.write("<TR><TD>" + makeLink((RemotePeer)children.get(i)) + "</TD><TD>"); //$NON-NLS-1$ //$NON-NLS-2$
for (int j=0; j < freeloaderComplainants.size(); j++)
{
if (j != 0)
{
writer.write("<BR>"); //$NON-NLS-1$
}
writer.write(makeLink((RemotePeer)freeloaderComplainants.get(j)));
}
writer.writeln("</TD></TR>"); //$NON-NLS-1$
}
}
if (freeloaderFound)
{
writer.writeln("</TABLE>"); //$NON-NLS-1$
}
else
{
writer.writeln("<EM>" + textToHTML(Messages.getString("WebServer.NONE")) + "</EM>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
if (shutdown)
return;
if (player instanceof HttpPlayer)
{
HttpPlayer httpPlayer = (HttpPlayer)player;
// Adresse des eigenen Sockets zusammensetzen
// Nur f黵 interne Verwendung
int ownPort = tcpSocket.getLocalPort();
String ownURL ="http://localhost:" + ownPort; //$NON-NLS-1$
writer.writeln("<P><A HREF=\"" + ownURL + "\">" + textToHTML(Messages.getString("WebServer.REFRESH")) + "</A></P>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
// writer.writeln("<P>Sie können diese Informationen auch in Ihrem Web-Browser anschauen: <STRONG>" + ownURL + "/</STRONG><BR>Dort ist es auch möglich, den Media-Player automatisch zu starten und die Informationen der anderen Peers einzusehen.</P>");
writer.writeln(Messages.getString("WebServer.HINTS_HTML", new Object[]{httpPlayer.getStreamURL(), (ownURL + "/"), textToHTML(Messages.getString("WebServer.PLAY_THIS_STATION"))})); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
/*
writer.writeln("<HR>");
writer.writeln("<ADDRESS>" + Radio.Name + " " + Radio.Version + "</ADDRESS>");
*/
writer.writeln("</BODY>"); //$NON-NLS-1$
writer.writeln("</HTML>"); //$NON-NLS-1$
writer.flush();
return;
}
private static String makeLink(RemotePeer peer)
{
if (peer.isMulticastAddress())
return getRealHost(peer); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
return "<A HREF=\"http://" + getWebHost(peer) + "/\">" + getRealHost(peer) + "</A>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
private static String getRealHost(RemotePeer peer)
{
return peer.getSocketAddress().getAddress().getCanonicalHostName() + ":" + peer.getSocketAddress().getPort(); //$NON-NLS-1$
}
private static String getWebHost(RemotePeer peer)
{
return peer.getSocketAddress().getAddress().getHostAddress() + ":" + (peer.getSocketAddress().getPort() + Peer.WEBINTERFACE_PORT_OFFSET); //$NON-NLS-1$
}
private static String makeLinkOfName(String name, String url)
{
if (url.length() == 0)
{
return textToHTML(name);
}
else
{
return "<A HREF=\"" + textToHTML(url) + "\">" + textToHTML(name) + "</A>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
private static String textToHTML(String text)
{
text = StringReplacer.replaceAll(text, "&", "&"); // muss zuerst gemacht werden! //$NON-NLS-1$ //$NON-NLS-2$
text = StringReplacer.replaceAll(text, "<", "<"); //$NON-NLS-1$ //$NON-NLS-2$
text = StringReplacer.replaceAll(text, ">", ">"); //$NON-NLS-1$ //$NON-NLS-2$
text = StringReplacer.replaceAll(text, "\"", """); //$NON-NLS-1$ //$NON-NLS-2$
text = StringReplacer.replaceAll(text, "
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -