Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • xiph/icecast-server
  • zenermerps/Icecast-Server
  • ePirat/icecast-server
  • spr0cketeer/icecast-server
  • theassassin/icecast-server
  • gilou/icecast-server
  • stephan48/icecast-server
  • rillian/icecast-server
  • vcode11/icecast-server
  • refactor-droidyy/icecast-server
10 results
Show changes
Commits on Source (286)
Makefile
Makefile.in
aclocal.m4
autom4te.cache
compile
config.cache
config.guess
config.sub
config.h.in
config.log
config.status
configure
depcomp
install-sh
libtool
ltconfig
ltmain.sh
missing
mkinstalldirs
*.tar.gz
## Process this file with automake to produce Makefile.in
AUTOMAKE_OPTIONS = 1.6 foreign dist-zip
AUTOMAKE_OPTIONS = foreign
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src conf debian doc web admin win32
EXTRA_DIST = HACKING m4/acx_pthread.m4 m4/ogg.m4 m4/vorbis.m4 \
EXTRA_DIST = HACKING config.h.vc6 m4/acx_pthread.m4 m4/ogg.m4 \
m4/theora.m4 m4/vorbis.m4 m4/speex.m4\
m4/xiph_compiler.m4 m4/xiph_curl.m4 m4/xiph_net.m4 \
m4/xiph_types.m4 m4/xiph_xml2.m4 icecast.spec
m4/xiph_types.m4 m4/xiph_xml2.m4 m4/xiph_openssl.m4 icecast.spec
docdir = $(datadir)/doc/$(PACKAGE)
doc_DATA = README AUTHORS COPYING NEWS TODO
......
This diff is collapsed.
......@@ -25,15 +25,11 @@ FEATURES
- allow using get_predata() stuff to send an "intro" to any newly-connected
user?
- stats to list currently connected clients: ip and hostname
- general registerable url-handlers in connection.c rather than hard-coded list
(already getting unmaintainable)
- httpp - split out query string for further processing
- option to use ipv6 (equiv to using <bind-address>::</bindaddress>, I think.
- abstract all admin functionality to a set of commands, and command handlers.
Make /admin/* just parse according to a set of rules, and dispatch generic
commands through that.
......
Makefile.in
......@@ -4,5 +4,6 @@ AUTOMAKE_OPTIONS = foreign
admindir = $(pkgdatadir)/admin
dist_admin_DATA = listclients.xsl listmounts.xsl moveclients.xsl response.xsl \
stats.xsl manageauth.xsl
logs.xsl showlog.xsl xspf.xsl \
stats.xsl manageauth.xsl updatemetadata.xsl managerelays.xsl
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="html" indent="yes" />
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/icestats" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body bgcolor="black">
<center>
<table border="0" cellpadding="1" cellspacing="3">
<tr>
<td align="center">
<a class="nav" href="listmounts.xsl">List MountPoints</a> |
<a class="nav" href="moveclients.xsl">Move Listeners</a> |
<a class="nav" href="stats.xsl">Stats</a> |
<a class="nav" href="/status.xsl">Status Page</a>
</td></tr>
</table>
</center>
<table border="0" width="90%%">
<tr>
<td width="50"></td>
<td>
<h2>List Connected Listeners</h2>
<body bgcolor="#000" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<div class="main">
<div class="roundcont">
<div class="roundtop">
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<xsl:for-each select="source">
<h3>
<xsl:choose>
<xsl:when test="authenticator">
<a href="/auth.xsl"><img border="0" src="/images/key.png"/></a> Authentication Required
</xsl:when>
<xsl:otherwise>
<a href="{@mount}.m3u"><img border="0" src="/images/tunein.png"/></a> Mount Point
</xsl:otherwise>
</xsl:choose>
<xsl:if test="server_name"><xsl:value-of select="server_name" /> </xsl:if>
(<xsl:value-of select="@mount" />)</h3>
(<xsl:value-of select="@mount" />)
<xsl:if test="authenticator"><a href="manageauth.xsl?mount={@mount}"><img border="0" src="/images/key.png"/></a> </xsl:if>
</h3>
<table border="0" cellpadding="1" cellspacing="5" bgcolor="444444">
<tr>
<td align="center">
<a class="nav2" href="listclients.xsl?mount={@mount}">Show Listeners</a> |
<a class="nav2" href="listclients.xsl?mount={@mount}">List Clients</a> |
<a class="nav2" href="moveclients.xsl?mount={@mount}">Move Listeners</a> |
<a class="nav2" href="updatemetadata.xsl?mount={@mount}">Update Metadata</a> |
<a class="nav2" href="killsource.xsl?mount={@mount}">Kill Source</a>
</td></tr>
</table>
<br></br>
<table cellpadding="2" cellspacing="4" border="0" >
<tr>
<td ><b>IP</b></td>
<td ><b>Connected For</b></td>
<td ><b>User Agent</b></td>
<td ></td>
</tr>
<br />
<table cellpadding="5" border="1" bordercolor="#C0C0C0" >
<thead>
<td ><center><b>IP</b></center></td>
<td ><center><b>Connected (seconds)</b></center></td>
<td ><center><b>Lag (bytes)</b></center></td>
<td ><center><b>User Agent</b></center></td>
<td ><center><b>Action</b></center></td>
</thead>
<tbody>
<xsl:variable name = "themount" ><xsl:value-of select="@mount" /></xsl:variable>
<xsl:for-each select="listener">
<tr>
<td><xsl:value-of select="IP" /><xsl:if test="username"> (<xsl:value-of select="username" />)</xsl:if></td>
<td><xsl:value-of select="Connected" /> seconds</td>
<td><xsl:value-of select="UserAgent" /></td>
<td><a class="nav2" href="killclient.xsl?mount={$themount}&amp;id={ID}">kill</a></td>
<td align="center"><xsl:value-of select="ip" /><xsl:if test="username"> (<xsl:value-of select="username" />)</xsl:if></td>
<td align="center"><xsl:value-of select="connected" /></td>
<td align="center"><xsl:value-of select="lag" /></td>
<td align="center"><xsl:value-of select="useragent" /></td>
<td align="center"><a href="killclient.xsl?mount={$themount}&amp;id={@id}">Kick</a></td>
</tr>
</xsl:for-each>
</tbody>
</table>
<br></br>
<br></br>
<br />
<br />
</xsl:for-each>
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;
</div>
<div class="roundbottom">
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<br></br><br></br>
</td>
<td width="50"></td>
</tr>
</table>
<div class="poster">
<img align="left" src="/icecast.png" />Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</div>
</body>
</html>
</xsl:template>
......
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="html" indent="yes" />
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/icestats" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body bgcolor="black">
<center>
<table border="0" cellpadding="1" cellspacing="3">
<tr>
<td align="center">
<a class="nav" href="listmounts.xsl">List MountPoints</a> |
<a class="nav" href="moveclients.xsl">Move Listeners</a> |
<a class="nav" href="stats.xsl">Stats</a> |
<a class="nav" href="/status.xsl">Status Page</a>
</td></tr>
</table>
</center>
<table border="0" width="90%%">
<tr>
<td width="50"></td>
<td>
<h2>List Mountpoints</h2>
<body>
<div class="main">
<div class="roundcont">
<div class="roundtop">
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<xsl:for-each select="source">
<h3>
<xsl:choose>
<xsl:when test="authenticator">
<a href="/auth.xsl"><img border="0" src="/images/key.png"/></a> Authentication Required
</xsl:when>
<xsl:otherwise>
<a href="{@mount}.m3u"><img border="0" src="/images/tunein.png"/></a> Mount Point
</xsl:otherwise>
</xsl:choose>
<xsl:if test="server_name"><xsl:value-of select="server_name" /> </xsl:if>
(<xsl:value-of select="@mount" />)
<xsl:if test="authenticator"> <a href="manageauth.xsl?mount={@mount}"><img border="0" src="/key.gif"/></a> </xsl:if>
<xsl:if test="authenticator"> <a href="manageauth.xsl?mount={@mount}"><img border="0" src="/images/key.png"/></a> </xsl:if>
</h3>
<table border="0" cellpadding="1" cellspacing="5" bgcolor="444444">
<tr>
<td align="center">
<a class="nav2" href="listclients.xsl?mount={@mount}">Show Listeners</a> |
<a class="nav2" href="listclients.xsl?mount={@mount}">List Clients</a> |
<a class="nav2" href="moveclients.xsl?mount={@mount}">Move Listeners</a> |
<a class="nav2" href="updatemetadata.xsl?mount={@mount}">Update Metadata</a> |
<a class="nav2" href="killsource.xsl?mount={@mount}">Kill Source</a>
<xsl:if test="authenticator"> | <a class="nav2" href="manageauth.xsl?mount={@mount}">Manage Authentication</a></xsl:if>
</td></tr>
</table>
<br></br>
<br />
<p><xsl:value-of select="listeners" /> Listener(s)</p>
<br></br>
</xsl:for-each>
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;
</div>
<div class="roundbottom">
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</div>
<br></br><br></br>
</td>
<td width="50"></td>
</tr>
</table>
<div class="poster">
<img align="left" src="/icecast.png" />Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</body>
</html>
</xsl:template>
......
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/icestats" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body>
<div class="main">
<div class="roundcont">
<div class="roundtop">
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<h3>Access log</h3>
<iframe frameborder="0" width="100%" height="400" src="showlog.xsl?log=accesslog">
no frame support however contents can be found <a href="showlog.xsl?log=accesslog">here</a>
</iframe>
</div>
<div class="roundbottom">
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<br />
<br />
<div class="roundcont">
<div class="roundtop">
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<h3>Error log</h3>
<iframe frameborder="0" width="100%" height="400" padding="5" src="showlog.xsl?log=errorlog">
no frame support however contents can be found <a href="showlog.xsl?log=errorlog">here</a>
</iframe>
</div>
<div class="roundbottom">
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<br />
<br />
<div class="roundcont">
<div class="roundtop">
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<h3>Playlist log</h3>
<iframe frameborder="0" width="100%" height="300" src="showlog.xsl?log=playlistlog">
no frame support however contents can be found <a href="showlog.xsl?log=playlistlog">here</a>
</iframe>
</div>
<div class="roundbottom">
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<br />
<br />
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="html" indent="yes" />
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/icestats" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body bgcolor="black">
<center>
<table border="0" cellpadding="1" cellspacing="3">
<tr>
<td align="center">
<a class="nav" href="listmounts.xsl">List MountPoints</a> |
<a class="nav" href="moveclients.xsl">Move Listeners</a> |
<a class="nav" href="stats.xsl">Stats</a> |
<a class="nav" href="/status.xsl">Status Page</a>
</td></tr>
</table>
</center>
<table border="0" width="90%%">
<tr>
<td width="50"></td>
<td>
<h2>Show defined users</h2>
<body bgcolor="#000" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<div class="main">
<div class="roundcont">
<div class="roundtop">
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<xsl:for-each select="iceresponse">
......@@ -38,8 +28,9 @@
<table border="0" cellpadding="1" cellspacing="5" bgcolor="444444">
<tr>
<td align="center">
<a class="nav2" href="listclients.xsl?mount={@mount}">Show Listeners</a> |
<a class="nav2" href="listclients.xsl?mount={@mount}">List Clients</a> |
<a class="nav2" href="moveclients.xsl?mount={@mount}">Move Listeners</a> |
<a class="nav2" href="updatemetadata.xsl?mount={@mount}">Update Metadata</a> |
<a class="nav2" href="killsource.xsl?mount={@mount}">Kill Source</a>
</td></tr>
</table>
......@@ -48,19 +39,24 @@
<table cellpadding="2" cellspacing="4" border="0" >
<tr>
<td ><b>User Id</b></td>
<td ><b>Password</b></td>
<td ></td>
</tr>
<xsl:variable name = "themount" ><xsl:value-of select="@mount" /></xsl:variable>
<xsl:for-each select="User">
<tr>
<td><xsl:value-of select="username" /></td>
<td><xsl:value-of select="password" /></td>
<td><a class="nav2" href="manageauth.xsl?mount={$themount}&amp;username={username}&amp;action=delete">delete</a></td>
</tr>
</xsl:for-each>
</table>
<br/>
<table cellpadding="2" cellspacing="4" border="0" >
<tr>
<td ><b>User Id</b></td>
<td ><input type="text" name="username" /></td>
</tr>
<tr>
<td ><b>Password</b></td>
<td ><input type="text" name="password" /></td>
</tr>
<tr>
......@@ -70,21 +66,17 @@
<input type="hidden" name="mount" value="{@mount}"/>
<input type="hidden" name="action" value="add"/>
</form>
<br></br>
<br></br>
<br />
<br />
</xsl:for-each>
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;
</div>
<div class="roundbottom">
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<br></br><br></br>
</td>
<td width="50"></td>
</tr>
</table>
<div class="poster">
<img align="left" src="/icecast.png" />Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</div>
</body>
</html>
</xsl:template>
......
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/icerelaystats" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body>
<div class="main">
<div class="roundcont">
<div class="roundtop">
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<xsl:for-each select="relay">
<h3>
<xsl:value-of select="localmount" />
<xsl:choose>
<xsl:when test = "enable!='0'">
(<a href="managerelays.xsl?relay={localmount}&amp;enable=0">click to disable</a>)
</xsl:when>
<xsl:otherwise>
(<a href="managerelays.xsl?relay={localmount}&amp;enable=1">click to enable</a>)
</xsl:otherwise>
</xsl:choose>
</h3>
<table border="0" cellpadding="4">
<xsl:for-each select="master">
<tr><td>Master</td> <td class="streamdata"> <xsl:value-of select="server" /></td>
<td class="streamdata"> <xsl:value-of select="port" /></td>
<td class="streamdata"> <xsl:value-of select="mount" /></td></tr>
</xsl:for-each>
<tr> <td>on demand</td> <td class="streamdata"> <xsl:value-of select="on_demand" /></td> </tr>
<tr> <td>slave relay</td> <td class="streamdata"> <xsl:value-of select="from_master" /></td> </tr>
</table>
<br />
<br></br>
</xsl:for-each>
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;
</div>
<div class="roundbottom">
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="html" indent="yes" />
<xsl:template match = "/icestats" >
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/icestats" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body bgcolor="black">
<center>
<table border="0" cellpadding="1" cellspacing="3">
<tr>
<td align="center">
<a class="nav" href="listmounts.xsl">List MountPoints</a> |
<a class="nav" href="moveclients.xsl">Move Listeners</a> |
<a class="nav" href="stats.xsl">Stats</a> |
<a class="nav" href="/status.xsl">Status Page</a>
</td></tr>
</table>
</center>
<table border="0" width="90%%">
<tr>
<td width="50"></td>
<td>
<body bgcolor="#000" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<div class="main">
<xsl:variable name = "currentmount" ><xsl:value-of select="current_source" /></xsl:variable>
<h2>Move Clients from (<xsl:value-of select="current_source" />)</h2>
<div class="roundcont">
<div class="roundtop">
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<h3>Move to which mountpoint ?</h3>
<xsl:for-each select="source">
<table border="0" cellpadding="1" cellspacing="5" >
<table border="0" cellpadding="6" cellspacing="5" >
<tr>
<td>Move from (<xsl:copy-of select="$currentmount" />) to (<xsl:value-of select="@mount" />)</td>
<td><xsl:value-of select="listeners" /> Listeners</td>
<td><a class="nav2" href="moveclients.xsl?mount={$currentmount}&amp;destination={@mount}">Move Clients</a></td>
</tr>
</table>
<br></br>
<br></br>
<br />
<br />
</xsl:for-each>
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;
</div>
<div class="roundbottom">
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</div>
<br></br><br></br>
</td>
<td width="50"></td>
</tr>
</table>
<div class="poster">
<img align="left" src="/icecast.png" />Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</body>
</html>
......
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="html" indent="yes" />
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/iceresponse" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body bgcolor="black">
<center>
<table border="0" cellpadding="1" cellspacing="3">
<tr>
<td align="center">
<a class="nav" href="listmounts.xsl">List MountPoints</a> |
<a class="nav" href="moveclients.xsl">Move Listeners</a> |
<a class="nav" href="stats.xsl">Stats</a> |
<a class="nav" href="/status.xsl">Status Page</a>
</td></tr>
</table>
</center>
<table border="0" width="90%%">
<tr>
<td width="50"></td>
<td>
<h2>Icecast Server Response</h2>
<body>
<div class="main">
<div class="roundcont">
<div class="roundtop">
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<h3>Response</h3>
......@@ -33,20 +23,15 @@
Message : <xsl:value-of select="message" /><br></br>
Return Code: <xsl:value-of select="return" /><br></br>
</xsl:for-each>
<br></br>
<br></br>
<br />
<br />
</div>
<div class="roundbottom">
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</div>
<br></br><br></br>
</td>
<td width="50"></td>
</tr>
</table>
<div class="poster">
<img align="left" src="/icecast.png" />Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</body>
</html>
......
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/icestats" >
<html>
<head>
<title>Icecast log files</title>
</head>
<body style="color: white; font-size: 90%">
<table>
<tr><td><pre>
<xsl:for-each select="/icestats"> <xsl:for-each select="log"> <xsl:value-of select="." /> </xsl:for-each></xsl:for-each>
</pre></td></tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="html" indent="yes" />
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/icestats" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body bgcolor="black">
<center>
<table border="0" cellpadding="1" cellspacing="3">
<tr>
<td align="center">
<a class="nav" href="listmounts.xsl">List Mountpoints</a> |
<a class="nav" href="moveclients.xsl">Move Listeners</a> |
<a class="nav" href="stats.xsl">Stats</a> |
<a class="nav" href="/status.xsl">Status Page</a>
</td></tr>
</table>
</center>
<table border="0" width="90%%">
<tr>
<td width="50"></td>
<td>
<h2>Icecast Status Page</h2>
<body bgcolor="#000" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<div class="main">
<br />
<!--global server stats-->
<div class="roundcont">
<div class="roundtop">
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<h3>Global Server Stats</h3>
......@@ -43,58 +36,68 @@
</table>
</div>
<div class="roundbottom">
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<br></br>
<br></br>
<br />
<br />
<!--end global server stats-->
<!--mount point stats-->
<xsl:for-each select="source">
<div class="roundcont">
<div class="roundtop">
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<xsl:for-each select="source">
<xsl:if test = "listeners!=''">
<h3>
<xsl:if test="server_name"><xsl:value-of select="server_name" /> </xsl:if>
(<xsl:value-of select="@mount" />)
<xsl:if test="authenticator"> <a href="manageauth.xsl?mount={@mount}"><img border="0" src="/key.gif"/></a> </xsl:if>
<xsl:choose>
<xsl:when test="authenticator">
<a href="/auth.xsl"><img border="0" src="/images/key.png"/></a> Authentication Required
</xsl:when>
<xsl:otherwise>
<a href="{@mount}.m3u"><img border="0" src="/images/tunein.png"/></a>
</xsl:otherwise>
</xsl:choose>
Mount Point : (<xsl:value-of select="@mount" />)
</h3>
<table border="0" cellpadding="1" cellspacing="5" bgcolor="444444">
<tr>
<td align="center">
<a class="nav2" href="listclients.xsl?mount={@mount}">List Clients</a> |
<a class="nav2" href="listclients.xsl?mount={@mount}">List Clients</a> |
<a class="nav2" href="moveclients.xsl?mount={@mount}">Move MountPoints</a> |
<a class="nav2" href="updatemetadata.xsl?mount={@mount}">Update Metadata</a> |
<a class="nav2" href="killsource.xsl?mount={@mount}">Kill Source</a>
<xsl:if test="authenticator"> | <a class="nav2" href="manageauth.xsl?mount={@mount}">Manage Authentication</a></xsl:if>
</td></tr>
</table>
<br></br>
<br />
<table cellpadding="5" cellspacing="0" border="0">
<xsl:for-each select="*">
<xsl:choose>
<xsl:when test="name()='listener'"></xsl:when>
<xsl:otherwise>
<tr>
<td width="130"><xsl:value-of select="name()" /></td>
<td class="streamdata"><xsl:value-of select="." /></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
<br></br>
<br></br>
</xsl:if>
</xsl:for-each>
</div>
<div class="roundbottom">
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<br></br><br></br>
</td>
<td width="50"></td>
</tr>
</table>
<div class="poster">
<img align="left" src="/icecast.png" />Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
<br />
<br />
</xsl:for-each>
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;
<!--end mount point stats-->
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</div>
</body>
</html>
</xsl:template>
......
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
<xsl:template match = "/icestats" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="/style.css" />
</head>
<body bhcolor="#000" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<div class="main">
<div class="roundcont">
<div class="roundtop">
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" />
</div>
<div class="newscontent">
<xsl:for-each select="source">
<h3>
<xsl:if test="server_name"><xsl:value-of select="server_name" /> </xsl:if>
(<xsl:value-of select="@mount" />)</h3>
<form method="GET" action="/admin/metadata.xsl">
<table border="0" cellpadding="4">
<tr><td>Metadata : <input type="text" name="song"/></td></tr>
<tr><td><input type="Submit" value="Update"/></td></tr>
</table>
<input type="hidden" name="mount" value="{@mount}"/>
<input type="hidden" name="mode" value="updinfo"/>
<input type="hidden" name="charset" value="UTF-8"/>
</form>
<br />
<br />
</xsl:for-each>
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;
</div>
<div class="roundbottom">
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" />
</div>
</div>
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<!--
XSPF xslt stylesheet for Icecast 2.3.1 and above
Copyright (C) 2007 Thomas B. Ruecker, tbr@ruecker-itk.de
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
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
You should have received a copy of the GNU General Public License
along with this program; if not, write to the
Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-->
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" media-type="application/xspf+xml"
method="xml" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<title><xsl:value-of select="server" /></title>
<creator><xsl:value-of select="server" /></creator>
<trackList >
<!-- end of "header" -->
<xsl:for-each select="source">
<!-- do we need to do something about streams that need auth?-->
<track>
<location><xsl:value-of select="listenurl" /></location>
<xsl:if test="artist"><creator><xsl:value-of select="artist" /></creator></xsl:if>
<title><xsl:value-of select="title" /></title>
<!-- The <xsl:text>\n</xsl:text> elements in the following part are used
to enforce linebreaks this format seems to be expected by clients -->
<annotation>
<xsl:if test="server_name">Stream Title: <xsl:value-of select="server_name" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="server_description">Stream Description: <xsl:value-of select="server_description" /></xsl:if>
Content Type:<xsl:value-of select="server_type" /><xsl:text>
</xsl:text>
<xsl:if test="bitrate">Bitrate: <xsl:value-of select="bitrate" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="quality">Quality: <xsl:value-of select="quality" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="video_quality">Video Quality: <xsl:value-of select="video_quality" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="frame_size">Framesize: <xsl:value-of select="frame_size" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="frame_rate">Framerate: <xsl:value-of select="frame_rate" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="listeners">Current Listeners: <xsl:value-of select="listeners" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="listener_peak">Peak Listeners: <xsl:value-of select="listener_peak" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="genre">Stream Genre: <xsl:value-of select="genre" /></xsl:if>
</annotation>
<xsl:if test="server_url"><info><xsl:value-of select="server_url" /></info></xsl:if>
</track>
</xsl:for-each>
</trackList>
</playlist>
</xsl:template>
</xsl:stylesheet>
Makefile
Makefile.in
......@@ -2,11 +2,11 @@
AUTOMAKE_OPTIONS = foreign
EXTRA_DIST = icecast.xml.in
DISTCLEANFILES = icecast.xml.dist
EXTRA_DIST = icecast.xml.in icecast_minimal.xml.in icecast_shoutcast_compat.xml.in icecast_auth.php
DISTCLEANFILES = icecast.xml.dist icecast_minimal.xml.dist icecast_shoutcast_compat.xml.dist
docdir = $(datadir)/$(PACKAGE)/doc
doc_DATA = icecast.xml.dist
doc_DATA = icecast.xml.dist icecast_minimal.xml.dist icecast_shoutcast_compat.xml.dist
install-data-hook:
$(mkinstalldirs) $(DESTDIR)$(sysconfdir)
......@@ -20,6 +20,12 @@ edit = sed -e 's,@pkgdatadir\@,$(pkgdatadir),g' \
icecast.xml.dist: $(srcdir)/icecast.xml.in
$(edit) $(srcdir)/icecast.xml.in > icecast.xml.dist
icecast_minimal.xml.dist: $(srcdir)/icecast_minimal.xml.in
$(edit) $(srcdir)/icecast_minimal.xml.in > icecast_minimal.xml.dist
icecast_shoutcast_compat.xml.dist: $(srcdir)/icecast_shoutcast_compat.xml.in
$(edit) $(srcdir)/icecast_shoutcast_compat.xml.in > icecast_shoutcast_compat.xml.dist
debug:
$(MAKE) all CFLAGS="@DEBUG@"
......
<icecast>
<location>UK</location>
<admin>webmaster@localhost</admin>
<limits>
<clients>100</clients>
<sources>2</sources>
<threadpool>5</threadpool>
<queue-size>102400</queue-size>
<queue-size>524288</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<!-- If enabled, this will provide a burst of data when a client
first connects, thereby significantly reducing the startup
time for listeners that do substantial buffering. However,
it also significantly increases latency, so it's disabled
by default -->
<burst-on-connect>0</burst-on-connect>
<!-- same as burst-on-connect, but this allows for being more
specific on how much to burst. Most people won't need to
change from the default 64k. Applies to all mountpoints -->
<burst-size>65535</burst-size>
<!--
<max-bandwidth>100M</max-bandwidth>
-->
</limits>
<authentication>
......@@ -31,10 +34,6 @@
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://www.oddsock.org/cgi-bin/yp-cgi</yp-url>
</directory>
-->
......@@ -43,58 +42,147 @@
listings. -->
<hostname>localhost</hostname>
<!-- You can use these two if you only want a single listener -->
<!-- port to use when talking to YP etc -->
<!--<port>8000</port> -->
<!--<bind-address>127.0.0.1</bind-address>-->
<!-- You may have multiple <listener> elements -->
<listen-socket>
<port>8000</port>
<!-- <bind-address>127.0.0.1</bind-address> -->
<!-- use <shoutcast-mount> in here to implicitly define port n+1 -->
</listen-socket>
<!--
<listen-socket>
<port>8001</port>
<ssl>1</ssl>
</listen-socket>
-->
<!--<master-server>127.0.0.1</master-server>-->
<!--<master-server-port>8001</master-server-port>-->
<!--<master-update-interval>120</master-update-interval>-->
<!--<master-username>hackme</master-username>-->
<!--<master-password>hackme</master-password>-->
<!-- issue above authentication for relays in slave setup -->
<!--<master-relay-auth>1</master-relay-auth>-->
<!-- setting this makes all relays on-demand unless overridden, this is
useful for master relays which do not have <relay> definitions here.
The default is 0 -->
<!--<relays-on-demand>1</relays-on-demand>-->
<!-- Request the master server to redirect new listeners to this slave
the details passed are based on <hostname> and <port> -->
<!--<master-redirect>1</master-redirect>-->
<!-- The maximum nuber of slaves that can register for new listener redirection. -->
<!--<max-redirect-slaves>10</max-redirect-slaves>-->
<!-- Relays. State connection information, and by default
request inline metadata for mp3 streams if available.
An on-demand relay will only retrieve the stream if
there are listeners connected -->
<!--
<relay>
<server>127.0.0.1</server>
<port>8001</port>
<mount>/example.ogg</mount>
<local-mount>/different.ogg</local-mount>
<on-demand>1</on-demand>
<retry-delay>30</retry-delay>
<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>
-->
<!-- Allow multiple master servers to be specified, tries each one in turn.
<relay>
<local-mount>/stream.mp3</local-mount>
<master>
<server>a.b.c.d</server>
<port>8000</port>
<mount>/a</mount>
</master>
<master>
<server>a.b.c.d</server>
<port>80</port>
<mount>/</mount>
</master>
</relay>
-->
<!-- Only define a <mount> section if you want to use advanced options,
like alternative usernames or passwords
With a master/slave setup you need to define a mount in the master
or else the server will assume that the stream is not to be made
available to the slave.
<mount>
<mount-name>/example-complex.ogg</mount-name>
<mount-name>/*.ogg</mount-name>
<username>othersource</username>
<password>hackmemore</password>
<max-listeners>1</max-listeners>
<max-bandwidth>1000k</max-bandwidth>
<file-seekable>0</file-seekable>
<dump-file>/tmp/dump-example1.ogg</dump-file>
<burst-size>65536</burst-size>
<fallback-mount>/example2.ogg</fallback-mount>
<fallback-override>1</fallback-override>
<fallback-when-full>1</fallback-when-full>
<intro>/path/to/stream-intro.ogg</intro>
<max-listener-duration>3600</max-listener-duration>
<hidden>1</hidden>
<authentication type="htpasswd">
<option name="filename" value="myauth"/>
<option name="allow_duplicate_users" value="0"/>
</authentication>
<on-connect>/home/icecast/bin/stream-start</on-connect>
<on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
<file-seekable>0</file-seekable>
</mount>
-->
<!-- other auth possibilities include running a command
to do the auth, mount, user and pass are passed via
stdin to the program
<mount>
....
<authentication type="command">
<option name="filename" value="auth_verify"/>
</authentication>
or
for url auth, the add url needs to return a "icecast-auth-user: 1" http
header for a user to authenicate. Both urls are sent params via POST,
add is sent id, mount, user, pass, ip, useragent
remove is passed id, mount, user, pass, duration
<authentication type="url">
<option name="username" value="admin"/>
<option name="password" value="hackme"/>
<option name="handlers" value="3" />
<option name="stream_auth" value="http://myauthserver.com/scripts/auth_mount.php"/>
<option name="mount_add" value="http://myauthserver.com/scripts/add_mount.php"/>
<option name="mount_remove" value="http://myauthserver.com/scripts/del_mount.php"/>
<option name="listener_add" value="http://myauthserver.com/scripts/add_listener.php"/>
<option name="listener_remove" value="http://myauthserver.com/scripts/del_listener.php"/>
</authentication>
</mount -->
<fileserve>1</fileserve>
<!-- set the mountpoint for a shoutcast source to use, the default if not
specified is /stream but you can change it here if an alternative is
wanted or an extension is required
<shoutcast-mount>/live.nsv</shoutcast-mount>
-->
<paths>
<!-- basedir is only used if chroot is enabled -->
<!-- basedir is only used if chroot is enabled -->
<basedir>@pkgdatadir@</basedir>
<!-- Note that if <chroot> is turned on below, these paths must both
......@@ -103,6 +191,13 @@
<webroot>@pkgdatadir@/web</webroot>
<adminroot>@pkgdatadir@/admin</adminroot>
<!-- <pidfile>@pkgdatadir@/icecast.pid</pidfile> -->
<!-- <ssl-certificate>@pkgdatadir@/icecast.pem</ssl-certificate> -->
<!-- <deny-ip>/path/to/file-with-IPs</deny-ip> -->
<!-- <allow-ip>/path/to/file-with-IPs</allow-ip> -->
<!-- <deny-agents>/path/to/file-with-useragents</deny-agents> -->
<!-- location of mime types files used for file serving -->
<!-- <mime-types>/etc/mime.types</mime-types> -->
<!-- Aliases: treat requests for 'source' path as being for 'dest' path
May be made specific to a port or bound address using the "port"
......@@ -115,13 +210,22 @@
this example will redirect all requests for http://server:port/ to
the status page
-->
<alias source="/" dest="/status.xsl"/>
<alias source="/" dest="/index.html"/>
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>4</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
<!-- <accesslog_ip>0<accesslog_ip> -->
<!-- <playlistlog>playlist.log</playlistlog> -->
<loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
<logsize>10000</logsize> <!-- Max size of a logfile -->
<!-- If logarchive is enabled (1), then when logsize is reached
the logfile will be moved to [error|access|playlist].log.DATESTAMP,
otherwise it will be moved to [error|access|playlist].log.old.
Default is non-archive mode (i.e. overwrite)
-->
<!-- <logarchive>1</logarchive> -->
</logging>
<security>
......