<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.xiph.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Phschafft</id>
	<title>XiphWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.xiph.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Phschafft"/>
	<link rel="alternate" type="text/html" href="https://wiki.xiph.org/Special:Contributions/Phschafft"/>
	<updated>2026-04-20T02:33:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16847</id>
		<title>Icecast Server/Listen Sockets</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16847"/>
		<updated>2026-01-20T00:31:37Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Sub-tags */ Fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listen Sockets =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast supports to listen on multiple sockets. Each socket is configured via a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt;. Each listen socket supports a number of options.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt; tag is used to configure listen sockets. Options are defined via sub-tags.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || no || id || &#039;&#039;none&#039;&#039; || Identifier for the listen socket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;on-behalf-of&amp;lt;/code&amp;gt; || no || URI || &#039;&#039;none&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || no || socket type || &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; || Type of the listen socket. One of &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sub-tags ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;port&amp;lt;/code&amp;gt; || no || port number || &amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt; || The port number to listen on (0-65535, but in most cases 1025-49151)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tls&amp;lt;/code&amp;gt; || no || [[Icecast_Server/known_https_restrictions#Icecast2_2.5.x_(branch_&amp;quot;master&amp;quot;)|TLS mode]] || &amp;lt;code&amp;gt;disabled&amp;lt;/code&amp;gt; || The TLS mode to be used for this listen socket.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bind-address&amp;lt;/code&amp;gt; || no || FQDN || &#039;&#039;any&#039;&#039; || The hostname used to listen on. If the hostname resolves to multiple addresses, the system defaults will be used to find the most suitable address. If mapping of legacy IP is supported via IPv6 sockets IPv6 addresses are preferred.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;client-address&amp;lt;/code&amp;gt; || no || FQDN || &#039;&#039;none&#039;&#039; || The outbound address used by this listen socket. This is specifically used by &amp;lt;code&amp;gt;type=&amp;quot;virtual&amp;quot;&amp;lt;/code&amp;gt; listen sockets.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;so-sndbuf&amp;lt;/code&amp;gt; || no || positive integer || &#039;&#039;system default&#039;&#039; || The send buffer to be used with client connections on this listen socket. It is not recommended to alter this value.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;listen-backlog&amp;lt;/code&amp;gt; || no || positive integer || &#039;&#039;Icecast default&#039;&#039; || The listen backlog to use for the listen socket. On very busy servers with a lot clients connecting at the same time it might be useful to increase this value slightly (e.g. to 15). A very high value suggests misconfiguration or system overload.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;authentication&amp;lt;/code&amp;gt; || no || [[Icecast_Server/2.5_Authentication|Authentication block]] || &#039;&#039;none&#039;&#039; || Additional authentication configuration specific to this listen socket. This is generally not needed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http-headers&amp;lt;/code&amp;gt; || no || [[Icecast_Server/Custom_HTTP_Headers|HTTP headers block]] || &#039;&#039;none&#039;&#039; || Additional HTTP headers specific to this listen socket. This is generally not needed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;shoutcast-compat&amp;lt;/code&amp;gt; || no || boolean || &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; || Whether this listen socket should accept shoutcast legacy clients. This value should be kept at it&#039;s default even for most shoutcast legacy enabled setups. See also &amp;lt;code&amp;gt;shoutcast-mount&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;shoutcast-mount&amp;lt;/code&amp;gt; || no || mount point || &#039;&#039;none&#039;&#039; || The mount point to use for shoutcast legacy clients. This will create another listen socket with the correct values as per requirements of shoutcast. This is mostly for software from the 90s.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trusted-proxy&amp;lt;/code&amp;gt; || no || URI || &#039;&#039;none&#039;&#039; || The URI of the id of any listen sockets (likely &amp;lt;code&amp;gt;type=&amp;quot;virtual&amp;quot;&amp;lt;/code&amp;gt;) that terminate the client&#039;s connection (e.g. reverse proxies). Setting this allows those proxies to act on behalf of the client.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16846</id>
		<title>Icecast Server/2.5 Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16846"/>
		<updated>2026-01-19T23:29:47Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Sources list */ Added list of messages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Maintenance =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast versions 2.5.x report a list of &amp;quot;Maintenance&amp;quot; items in the dashboard within the admin interface. Those messages are meant to provide help to keep a deployment in best shape.&lt;br /&gt;
&lt;br /&gt;
The Following levels are defined:&lt;br /&gt;
=== Info ===&lt;br /&gt;
Info level messages are just there to aid e.g. in case of a problem. No active action is required.&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
Warnings should be considered thoroughly and the problems generally should be resolved in a timely manner. It is possible that the operation is affected by the problems reported with warnings.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
Errors record actual problems and should be taken care of as soon as possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dashboard ==&lt;br /&gt;
&lt;br /&gt;
The following messages can be found on the global dashboard.&lt;br /&gt;
&lt;br /&gt;
=== Info ===&lt;br /&gt;
&lt;br /&gt;
==== Core files are disabled. / Core files are enabled. ====&lt;br /&gt;
This informs whether or not core files are enabled. Core files are a classic mean of debugging offered by some operating systems. Support may ask for this value.&lt;br /&gt;
&lt;br /&gt;
==== IPv4-mapped IPv6 is available on this system. ====&lt;br /&gt;
The operation system supports legacy IP via current IP sockets. This means that only an IPv6 socket needs to be configured to also handle legacy IP.&lt;br /&gt;
&lt;br /&gt;
This information may be hidden if Icecast seems to be configured correctly to avoid spamming the section.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured and active. ====&lt;br /&gt;
chroot was configured and is active. See your operation system&#039;s documentation on the details of chroot.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured and active. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured and was successful.&lt;br /&gt;
&lt;br /&gt;
==== Currently no sources are connected to this server. ====&lt;br /&gt;
There are currently no sources connected. The server is in idle state.&lt;br /&gt;
&lt;br /&gt;
==== More than 75% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
The server reached at least 75% of it&#039;s configured client limit. If that is a reason to take action depends on the current relative load (base load, peak hours, ...) of the server and the type of listeners.&lt;br /&gt;
&lt;br /&gt;
==== Environment is noisy. ====&lt;br /&gt;
The user environment contains entries that should not be present in a daemon environment. This is a indication for the server being started as a user process instead of as a daemon. This should not be seen in production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
&lt;br /&gt;
==== Developer logging is active. This mode is not for production. ====&lt;br /&gt;
Icecast is build with developer logging active. This should never be seen in production. If seen without an Icecast developer asked for it it should be disabled. To disable this Icecast needs to be recompiled.&lt;br /&gt;
&lt;br /&gt;
==== Hostname is not set to anything useful in &amp;lt;hostname&amp;gt;. ====&lt;br /&gt;
The hostname tag is not set correctly in the Icecast configuration. Some features such as directory support may be disabled. Playlist generation may not work correctly. There is generally more details in the error log. See https://icecast.org/faq/#faqentry-what-should-i-set-hostname-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No useful location is given in &amp;lt;location&amp;gt;. ====&lt;br /&gt;
The location tag is not set to anything useful in the configuration. See https://icecast.org/faq/#faqentry-what-should-i-set-location-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No admin contact given in &amp;lt;admin&amp;gt;. YP directory support is disabled. ====&lt;br /&gt;
No valid admin contact details are given. Some features such as directory support may be disabled. See https://icecast.org/faq/#faqentry-what-should-i-set-admin-to for details.&lt;br /&gt;
&lt;br /&gt;
==== Legacy sources are connected. See mount list for details. ====&lt;br /&gt;
Sources using legacy features or protocols are connected. This for example includes ICY sources. The list of sources should be checked for possibility of upgrading those sources.&lt;br /&gt;
&lt;br /&gt;
==== More than 90% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
More than 90% of the server&#039;s configured client limit is connected. This might be a sign that the limit should be lifted higher. However this might also be normal (for example in peak hours or when the number of listeners is very stable and the limit is set close to that).&lt;br /&gt;
&lt;br /&gt;
==== No secure password hash support detected. ====&lt;br /&gt;
No secure password hashing scheme was detected. Icecast will fall back to legacy support. It is best to contact the support with the full details from the admin&#039;s version page.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
==== Global client, and source limit is bigger than suitable for current open file limit. ====&lt;br /&gt;
Icecast is configured in a way allowing for more connections than the operating system permits. This may result in strange behaviour when the operating system&#039;s limit is reached.&lt;br /&gt;
&lt;br /&gt;
Usually this is due to Icecast being set to some aggressively high client limit. However it can also be due to a low limit enforced by the operating system. In general the limit of the operating system must be higher than the one set by Icecast for Icecast to actually handle the number of clients.&lt;br /&gt;
&lt;br /&gt;
==== IPv6 not enabled. ====&lt;br /&gt;
Icecast is configured with only legacy IP enabled. The current IP version (IPv6) needs to be enabled.&lt;br /&gt;
&lt;br /&gt;
==== No PRNG seed configured. PRNG is insecure. ====&lt;br /&gt;
No configuration for the PRNG is given. The generator may return weak values. libigloo defaults are used. See libigloo&#039;s documentation for details.&lt;br /&gt;
&lt;br /&gt;
==== Unknown tags are used in the config file. See the error.log for details. ====&lt;br /&gt;
Unknown tags are found in the configuration file. Those are invalid and future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
Unknown tags are often a result of typos.&lt;br /&gt;
&lt;br /&gt;
==== Obsolete tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Obsolete tags are found in the configuration file. Those should be updated or removed accordingly. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== Invalid tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Invalid tags (for example tags with invalid values) are found in the configuration file. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== The configuration did not validate. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
The configuration file is not valid. It may contain logical errors such as invalid combinations of values. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== File permissions are wrong. See the error.log for details and update your configuration accordingly. Future versions of Icecast may reject affected files. ====&lt;br /&gt;
Some of the files used by Icecast (such as the configuration or logfiles) have wrong permissions. Please check the permissions and correct them accordingly. The error log will contain more information on which files are the problem.&lt;br /&gt;
&lt;br /&gt;
==== Potentially unsafe file permissions. See the error.log for details and update your configuration accordingly. Future versions of Icecast may reject affected files. ====&lt;br /&gt;
Some of the files used by Icecast seem to have unsafe permissions. This may result in leakage of credentials, secret keys, or similar data. It is strongly recommended to check the files reported in the error log and change credentials and secret keys accordingly.&lt;br /&gt;
Future versions of Icecast may reject those files, including rejecting to start at all or only starting in a limited fashion if unresolved.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but failed. ====&lt;br /&gt;
chroot was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but not supported by operating system. ====&lt;br /&gt;
chroot was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but failed. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but not supported by operating system. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources list ==&lt;br /&gt;
=== Info ===&lt;br /&gt;
&lt;br /&gt;
==== Legacy HTTP/1.0 listener ====&lt;br /&gt;
One or more legacy listeners has accessed the stream.&lt;br /&gt;
The client should upgrade.&lt;br /&gt;
No action is required on Icecast&#039;s side.&lt;br /&gt;
&lt;br /&gt;
==== Listener without usable Host:-header ====&lt;br /&gt;
One or more listeners connected without sending a usable `Host:`-header.&lt;br /&gt;
Icecast may not provide the best service to such clients as the value needs to be guessed.&lt;br /&gt;
This is a problem more common with ancient clients.&lt;br /&gt;
No action is required on Icecast&#039;s side.&lt;br /&gt;
&lt;br /&gt;
==== No content language set ====&lt;br /&gt;
The source did not set a language for the stream.&lt;br /&gt;
The source client&#039;s configuration should be checked and updated accordantly.&lt;br /&gt;
No action is required on Icecast&#039;s side.&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
&lt;br /&gt;
==== Legacy or unsupported streaming format is used. ====&lt;br /&gt;
The stream is sent in an legacy or an unsupported format.&lt;br /&gt;
Icecast falls back to a generic handler which might or might not work.&lt;br /&gt;
No formal support is provided for such streams.&lt;br /&gt;
&lt;br /&gt;
It is best to only stream in fully supported formats.&lt;br /&gt;
The format can be selected in most source clients.&lt;br /&gt;
&lt;br /&gt;
No action is required on Icecast&#039;s side.&lt;br /&gt;
&lt;br /&gt;
==== Character set is not UTF-8 ====&lt;br /&gt;
The character set of the stream is not UTF-8.&lt;br /&gt;
This can be a problem with legacy streams (ICY).&lt;br /&gt;
This can result in metadata not being shown correctly.&lt;br /&gt;
&lt;br /&gt;
It is recommended to consider setting the stream&#039;s character set to UTF-8.&lt;br /&gt;
However, this can also upset legacy clients.&lt;br /&gt;
Caution is advised.&lt;br /&gt;
&lt;br /&gt;
==== The stream did not mature yet. ====&lt;br /&gt;
The stream is still very new.&lt;br /&gt;
This message will resolve itself after a few seconds on a healthy stream.&lt;br /&gt;
If the message seems to be persistent or is often reported over a span of several minutes there is a problem with the source client&#039;s connection or the data the source client sends.&lt;br /&gt;
&lt;br /&gt;
If unresolved for several minutes, the source client&#039;s connection should be checked.&lt;br /&gt;
If the source client&#039;s connection is fine, the source client seems to not work properly.&lt;br /&gt;
&lt;br /&gt;
No action is required on Icecast&#039;s side.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
==== No data has yet been received. ====&lt;br /&gt;
This message is reported when no data has yet been received by Icecast from the source client.&lt;br /&gt;
If this message persists for several seconds, the source client is most likely not working properly.&lt;br /&gt;
&lt;br /&gt;
It is possible but highly unlikely, that this is caused by a bad network connection.&lt;br /&gt;
If so, the connection is likely not suitable for a source client at all (independent on the source&#039;s settings such as bitrate).&lt;br /&gt;
&lt;br /&gt;
No action is required on Icecast&#039;s side.&lt;br /&gt;
&lt;br /&gt;
==== Legacy metadata on non-legacy source received. This is likely a bug in the source client. ====&lt;br /&gt;
A legacy metadata update request was sent on a non-legacy source.&lt;br /&gt;
This is most likely a bug in the source client.&lt;br /&gt;
It is also possible that other components try to update the metadata in a way unsuitable for the stream.&lt;br /&gt;
&lt;br /&gt;
Icecast may reject such requests for security reasons.&lt;br /&gt;
Metadata might not work correctly on such streams.&lt;br /&gt;
&lt;br /&gt;
It is best to report this to the source client&#039;s vendor.&lt;br /&gt;
No action is required on Icecast&#039;s side.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16845</id>
		<title>Icecast Server/2.5 Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16845"/>
		<updated>2026-01-19T23:06:15Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Added section stub for Sources list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Maintenance =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast versions 2.5.x report a list of &amp;quot;Maintenance&amp;quot; items in the dashboard within the admin interface. Those messages are meant to provide help to keep a deployment in best shape.&lt;br /&gt;
&lt;br /&gt;
The Following levels are defined:&lt;br /&gt;
=== Info ===&lt;br /&gt;
Info level messages are just there to aid e.g. in case of a problem. No active action is required.&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
Warnings should be considered thoroughly and the problems generally should be resolved in a timely manner. It is possible that the operation is affected by the problems reported with warnings.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
Errors record actual problems and should be taken care of as soon as possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dashboard ==&lt;br /&gt;
&lt;br /&gt;
The following messages can be found on the global dashboard.&lt;br /&gt;
&lt;br /&gt;
=== Info ===&lt;br /&gt;
&lt;br /&gt;
==== Core files are disabled. / Core files are enabled. ====&lt;br /&gt;
This informs whether or not core files are enabled. Core files are a classic mean of debugging offered by some operating systems. Support may ask for this value.&lt;br /&gt;
&lt;br /&gt;
==== IPv4-mapped IPv6 is available on this system. ====&lt;br /&gt;
The operation system supports legacy IP via current IP sockets. This means that only an IPv6 socket needs to be configured to also handle legacy IP.&lt;br /&gt;
&lt;br /&gt;
This information may be hidden if Icecast seems to be configured correctly to avoid spamming the section.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured and active. ====&lt;br /&gt;
chroot was configured and is active. See your operation system&#039;s documentation on the details of chroot.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured and active. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured and was successful.&lt;br /&gt;
&lt;br /&gt;
==== Currently no sources are connected to this server. ====&lt;br /&gt;
There are currently no sources connected. The server is in idle state.&lt;br /&gt;
&lt;br /&gt;
==== More than 75% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
The server reached at least 75% of it&#039;s configured client limit. If that is a reason to take action depends on the current relative load (base load, peak hours, ...) of the server and the type of listeners.&lt;br /&gt;
&lt;br /&gt;
==== Environment is noisy. ====&lt;br /&gt;
The user environment contains entries that should not be present in a daemon environment. This is a indication for the server being started as a user process instead of as a daemon. This should not be seen in production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
&lt;br /&gt;
==== Developer logging is active. This mode is not for production. ====&lt;br /&gt;
Icecast is build with developer logging active. This should never be seen in production. If seen without an Icecast developer asked for it it should be disabled. To disable this Icecast needs to be recompiled.&lt;br /&gt;
&lt;br /&gt;
==== Hostname is not set to anything useful in &amp;lt;hostname&amp;gt;. ====&lt;br /&gt;
The hostname tag is not set correctly in the Icecast configuration. Some features such as directory support may be disabled. Playlist generation may not work correctly. There is generally more details in the error log. See https://icecast.org/faq/#faqentry-what-should-i-set-hostname-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No useful location is given in &amp;lt;location&amp;gt;. ====&lt;br /&gt;
The location tag is not set to anything useful in the configuration. See https://icecast.org/faq/#faqentry-what-should-i-set-location-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No admin contact given in &amp;lt;admin&amp;gt;. YP directory support is disabled. ====&lt;br /&gt;
No valid admin contact details are given. Some features such as directory support may be disabled. See https://icecast.org/faq/#faqentry-what-should-i-set-admin-to for details.&lt;br /&gt;
&lt;br /&gt;
==== Legacy sources are connected. See mount list for details. ====&lt;br /&gt;
Sources using legacy features or protocols are connected. This for example includes ICY sources. The list of sources should be checked for possibility of upgrading those sources.&lt;br /&gt;
&lt;br /&gt;
==== More than 90% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
More than 90% of the server&#039;s configured client limit is connected. This might be a sign that the limit should be lifted higher. However this might also be normal (for example in peak hours or when the number of listeners is very stable and the limit is set close to that).&lt;br /&gt;
&lt;br /&gt;
==== No secure password hash support detected. ====&lt;br /&gt;
No secure password hashing scheme was detected. Icecast will fall back to legacy support. It is best to contact the support with the full details from the admin&#039;s version page.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
==== Global client, and source limit is bigger than suitable for current open file limit. ====&lt;br /&gt;
Icecast is configured in a way allowing for more connections than the operating system permits. This may result in strange behaviour when the operating system&#039;s limit is reached.&lt;br /&gt;
&lt;br /&gt;
Usually this is due to Icecast being set to some aggressively high client limit. However it can also be due to a low limit enforced by the operating system. In general the limit of the operating system must be higher than the one set by Icecast for Icecast to actually handle the number of clients.&lt;br /&gt;
&lt;br /&gt;
==== IPv6 not enabled. ====&lt;br /&gt;
Icecast is configured with only legacy IP enabled. The current IP version (IPv6) needs to be enabled.&lt;br /&gt;
&lt;br /&gt;
==== No PRNG seed configured. PRNG is insecure. ====&lt;br /&gt;
No configuration for the PRNG is given. The generator may return weak values. libigloo defaults are used. See libigloo&#039;s documentation for details.&lt;br /&gt;
&lt;br /&gt;
==== Unknown tags are used in the config file. See the error.log for details. ====&lt;br /&gt;
Unknown tags are found in the configuration file. Those are invalid and future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
Unknown tags are often a result of typos.&lt;br /&gt;
&lt;br /&gt;
==== Obsolete tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Obsolete tags are found in the configuration file. Those should be updated or removed accordingly. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== Invalid tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Invalid tags (for example tags with invalid values) are found in the configuration file. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== The configuration did not validate. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
The configuration file is not valid. It may contain logical errors such as invalid combinations of values. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== File permissions are wrong. See the error.log for details and update your configuration accordingly. Future versions of Icecast may reject affected files. ====&lt;br /&gt;
Some of the files used by Icecast (such as the configuration or logfiles) have wrong permissions. Please check the permissions and correct them accordingly. The error log will contain more information on which files are the problem.&lt;br /&gt;
&lt;br /&gt;
==== Potentially unsafe file permissions. See the error.log for details and update your configuration accordingly. Future versions of Icecast may reject affected files. ====&lt;br /&gt;
Some of the files used by Icecast seem to have unsafe permissions. This may result in leakage of credentials, secret keys, or similar data. It is strongly recommended to check the files reported in the error log and change credentials and secret keys accordingly.&lt;br /&gt;
Future versions of Icecast may reject those files, including rejecting to start at all or only starting in a limited fashion if unresolved.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but failed. ====&lt;br /&gt;
chroot was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but not supported by operating system. ====&lt;br /&gt;
chroot was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but failed. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but not supported by operating system. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources list ==&lt;br /&gt;
=== Info ===&lt;br /&gt;
=== Warning ===&lt;br /&gt;
=== Error ===&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16844</id>
		<title>Icecast Server/2.5 Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16844"/>
		<updated>2026-01-19T22:59:14Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* List */ Renamed section to Dashboard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Maintenance =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast versions 2.5.x report a list of &amp;quot;Maintenance&amp;quot; items in the dashboard within the admin interface. Those messages are meant to provide help to keep a deployment in best shape.&lt;br /&gt;
&lt;br /&gt;
== Dashboard ==&lt;br /&gt;
&lt;br /&gt;
The following messages can be found on the global dashboard.&lt;br /&gt;
&lt;br /&gt;
=== Info ===&lt;br /&gt;
Info level messages are just there to aid e.g. in case of a problem. No active action is required.&lt;br /&gt;
&lt;br /&gt;
==== Core files are disabled. / Core files are enabled. ====&lt;br /&gt;
This informs whether or not core files are enabled. Core files are a classic mean of debugging offered by some operating systems. Support may ask for this value.&lt;br /&gt;
&lt;br /&gt;
==== IPv4-mapped IPv6 is available on this system. ====&lt;br /&gt;
The operation system supports legacy IP via current IP sockets. This means that only an IPv6 socket needs to be configured to also handle legacy IP.&lt;br /&gt;
&lt;br /&gt;
This information may be hidden if Icecast seems to be configured correctly to avoid spamming the section.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured and active. ====&lt;br /&gt;
chroot was configured and is active. See your operation system&#039;s documentation on the details of chroot.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured and active. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured and was successful.&lt;br /&gt;
&lt;br /&gt;
==== Currently no sources are connected to this server. ====&lt;br /&gt;
There are currently no sources connected. The server is in idle state.&lt;br /&gt;
&lt;br /&gt;
==== More than 75% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
The server reached at least 75% of it&#039;s configured client limit. If that is a reason to take action depends on the current relative load (base load, peak hours, ...) of the server and the type of listeners.&lt;br /&gt;
&lt;br /&gt;
==== Environment is noisy. ====&lt;br /&gt;
The user environment contains entries that should not be present in a daemon environment. This is a indication for the server being started as a user process instead of as a daemon. This should not be seen in production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
Warnings should be considered thoroughly and the problems generally should be resolved in a timely manner. It is possible that the operation is affected by the problems reported with warnings.&lt;br /&gt;
&lt;br /&gt;
==== Developer logging is active. This mode is not for production. ====&lt;br /&gt;
Icecast is build with developer logging active. This should never be seen in production. If seen without an Icecast developer asked for it it should be disabled. To disable this Icecast needs to be recompiled.&lt;br /&gt;
&lt;br /&gt;
==== Hostname is not set to anything useful in &amp;lt;hostname&amp;gt;. ====&lt;br /&gt;
The hostname tag is not set correctly in the Icecast configuration. Some features such as directory support may be disabled. Playlist generation may not work correctly. There is generally more details in the error log. See https://icecast.org/faq/#faqentry-what-should-i-set-hostname-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No useful location is given in &amp;lt;location&amp;gt;. ====&lt;br /&gt;
The location tag is not set to anything useful in the configuration. See https://icecast.org/faq/#faqentry-what-should-i-set-location-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No admin contact given in &amp;lt;admin&amp;gt;. YP directory support is disabled. ====&lt;br /&gt;
No valid admin contact details are given. Some features such as directory support may be disabled. See https://icecast.org/faq/#faqentry-what-should-i-set-admin-to for details.&lt;br /&gt;
&lt;br /&gt;
==== Legacy sources are connected. See mount list for details. ====&lt;br /&gt;
Sources using legacy features or protocols are connected. This for example includes ICY sources. The list of sources should be checked for possibility of upgrading those sources.&lt;br /&gt;
&lt;br /&gt;
==== More than 90% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
More than 90% of the server&#039;s configured client limit is connected. This might be a sign that the limit should be lifted higher. However this might also be normal (for example in peak hours or when the number of listeners is very stable and the limit is set close to that).&lt;br /&gt;
&lt;br /&gt;
==== No secure password hash support detected. ====&lt;br /&gt;
No secure password hashing scheme was detected. Icecast will fall back to legacy support. It is best to contact the support with the full details from the admin&#039;s version page.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
Errors record actual problems and should be taken care of as soon as possible.&lt;br /&gt;
&lt;br /&gt;
==== Global client, and source limit is bigger than suitable for current open file limit. ====&lt;br /&gt;
Icecast is configured in a way allowing for more connections than the operating system permits. This may result in strange behaviour when the operating system&#039;s limit is reached.&lt;br /&gt;
&lt;br /&gt;
Usually this is due to Icecast being set to some aggressively high client limit. However it can also be due to a low limit enforced by the operating system. In general the limit of the operating system must be higher than the one set by Icecast for Icecast to actually handle the number of clients.&lt;br /&gt;
&lt;br /&gt;
==== IPv6 not enabled. ====&lt;br /&gt;
Icecast is configured with only legacy IP enabled. The current IP version (IPv6) needs to be enabled.&lt;br /&gt;
&lt;br /&gt;
==== No PRNG seed configured. PRNG is insecure. ====&lt;br /&gt;
No configuration for the PRNG is given. The generator may return weak values. libigloo defaults are used. See libigloo&#039;s documentation for details.&lt;br /&gt;
&lt;br /&gt;
==== Unknown tags are used in the config file. See the error.log for details. ====&lt;br /&gt;
Unknown tags are found in the configuration file. Those are invalid and future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
Unknown tags are often a result of typos.&lt;br /&gt;
&lt;br /&gt;
==== Obsolete tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Obsolete tags are found in the configuration file. Those should be updated or removed accordingly. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== Invalid tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Invalid tags (for example tags with invalid values) are found in the configuration file. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== The configuration did not validate. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
The configuration file is not valid. It may contain logical errors such as invalid combinations of values. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== File permissions are wrong. See the error.log for details and update your configuration accordingly. Future versions of Icecast may reject affected files. ====&lt;br /&gt;
Some of the files used by Icecast (such as the configuration or logfiles) have wrong permissions. Please check the permissions and correct them accordingly. The error log will contain more information on which files are the problem.&lt;br /&gt;
&lt;br /&gt;
==== Potentially unsafe file permissions. See the error.log for details and update your configuration accordingly. Future versions of Icecast may reject affected files. ====&lt;br /&gt;
Some of the files used by Icecast seem to have unsafe permissions. This may result in leakage of credentials, secret keys, or similar data. It is strongly recommended to check the files reported in the error log and change credentials and secret keys accordingly.&lt;br /&gt;
Future versions of Icecast may reject those files, including rejecting to start at all or only starting in a limited fashion if unresolved.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but failed. ====&lt;br /&gt;
chroot was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but not supported by operating system. ====&lt;br /&gt;
chroot was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but failed. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but not supported by operating system. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16843</id>
		<title>Icecast Server/2.5 Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16843"/>
		<updated>2026-01-19T22:57:17Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Error */ Added new errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Maintenance =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast versions 2.5.x report a list of &amp;quot;Maintenance&amp;quot; items in the dashboard within the admin interface. Those messages are meant to provide help to keep a deployment in best shape.&lt;br /&gt;
&lt;br /&gt;
== List ==&lt;br /&gt;
=== Info ===&lt;br /&gt;
Info level messages are just there to aid e.g. in case of a problem. No active action is required.&lt;br /&gt;
&lt;br /&gt;
==== Core files are disabled. / Core files are enabled. ====&lt;br /&gt;
This informs whether or not core files are enabled. Core files are a classic mean of debugging offered by some operating systems. Support may ask for this value.&lt;br /&gt;
&lt;br /&gt;
==== IPv4-mapped IPv6 is available on this system. ====&lt;br /&gt;
The operation system supports legacy IP via current IP sockets. This means that only an IPv6 socket needs to be configured to also handle legacy IP.&lt;br /&gt;
&lt;br /&gt;
This information may be hidden if Icecast seems to be configured correctly to avoid spamming the section.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured and active. ====&lt;br /&gt;
chroot was configured and is active. See your operation system&#039;s documentation on the details of chroot.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured and active. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured and was successful.&lt;br /&gt;
&lt;br /&gt;
==== Currently no sources are connected to this server. ====&lt;br /&gt;
There are currently no sources connected. The server is in idle state.&lt;br /&gt;
&lt;br /&gt;
==== More than 75% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
The server reached at least 75% of it&#039;s configured client limit. If that is a reason to take action depends on the current relative load (base load, peak hours, ...) of the server and the type of listeners.&lt;br /&gt;
&lt;br /&gt;
==== Environment is noisy. ====&lt;br /&gt;
The user environment contains entries that should not be present in a daemon environment. This is a indication for the server being started as a user process instead of as a daemon. This should not be seen in production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
Warnings should be considered thoroughly and the problems generally should be resolved in a timely manner. It is possible that the operation is affected by the problems reported with warnings.&lt;br /&gt;
&lt;br /&gt;
==== Developer logging is active. This mode is not for production. ====&lt;br /&gt;
Icecast is build with developer logging active. This should never be seen in production. If seen without an Icecast developer asked for it it should be disabled. To disable this Icecast needs to be recompiled.&lt;br /&gt;
&lt;br /&gt;
==== Hostname is not set to anything useful in &amp;lt;hostname&amp;gt;. ====&lt;br /&gt;
The hostname tag is not set correctly in the Icecast configuration. Some features such as directory support may be disabled. Playlist generation may not work correctly. There is generally more details in the error log. See https://icecast.org/faq/#faqentry-what-should-i-set-hostname-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No useful location is given in &amp;lt;location&amp;gt;. ====&lt;br /&gt;
The location tag is not set to anything useful in the configuration. See https://icecast.org/faq/#faqentry-what-should-i-set-location-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No admin contact given in &amp;lt;admin&amp;gt;. YP directory support is disabled. ====&lt;br /&gt;
No valid admin contact details are given. Some features such as directory support may be disabled. See https://icecast.org/faq/#faqentry-what-should-i-set-admin-to for details.&lt;br /&gt;
&lt;br /&gt;
==== Legacy sources are connected. See mount list for details. ====&lt;br /&gt;
Sources using legacy features or protocols are connected. This for example includes ICY sources. The list of sources should be checked for possibility of upgrading those sources.&lt;br /&gt;
&lt;br /&gt;
==== More than 90% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
More than 90% of the server&#039;s configured client limit is connected. This might be a sign that the limit should be lifted higher. However this might also be normal (for example in peak hours or when the number of listeners is very stable and the limit is set close to that).&lt;br /&gt;
&lt;br /&gt;
==== No secure password hash support detected. ====&lt;br /&gt;
No secure password hashing scheme was detected. Icecast will fall back to legacy support. It is best to contact the support with the full details from the admin&#039;s version page.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
Errors record actual problems and should be taken care of as soon as possible.&lt;br /&gt;
&lt;br /&gt;
==== Global client, and source limit is bigger than suitable for current open file limit. ====&lt;br /&gt;
Icecast is configured in a way allowing for more connections than the operating system permits. This may result in strange behaviour when the operating system&#039;s limit is reached.&lt;br /&gt;
&lt;br /&gt;
Usually this is due to Icecast being set to some aggressively high client limit. However it can also be due to a low limit enforced by the operating system. In general the limit of the operating system must be higher than the one set by Icecast for Icecast to actually handle the number of clients.&lt;br /&gt;
&lt;br /&gt;
==== IPv6 not enabled. ====&lt;br /&gt;
Icecast is configured with only legacy IP enabled. The current IP version (IPv6) needs to be enabled.&lt;br /&gt;
&lt;br /&gt;
==== No PRNG seed configured. PRNG is insecure. ====&lt;br /&gt;
No configuration for the PRNG is given. The generator may return weak values. libigloo defaults are used. See libigloo&#039;s documentation for details.&lt;br /&gt;
&lt;br /&gt;
==== Unknown tags are used in the config file. See the error.log for details. ====&lt;br /&gt;
Unknown tags are found in the configuration file. Those are invalid and future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
Unknown tags are often a result of typos.&lt;br /&gt;
&lt;br /&gt;
==== Obsolete tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Obsolete tags are found in the configuration file. Those should be updated or removed accordingly. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== Invalid tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Invalid tags (for example tags with invalid values) are found in the configuration file. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== The configuration did not validate. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
The configuration file is not valid. It may contain logical errors such as invalid combinations of values. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== File permissions are wrong. See the error.log for details and update your configuration accordingly. Future versions of Icecast may reject affected files. ====&lt;br /&gt;
Some of the files used by Icecast (such as the configuration or logfiles) have wrong permissions. Please check the permissions and correct them accordingly. The error log will contain more information on which files are the problem.&lt;br /&gt;
&lt;br /&gt;
==== Potentially unsafe file permissions. See the error.log for details and update your configuration accordingly. Future versions of Icecast may reject affected files. ====&lt;br /&gt;
Some of the files used by Icecast seem to have unsafe permissions. This may result in leakage of credentials, secret keys, or similar data. It is strongly recommended to check the files reported in the error log and change credentials and secret keys accordingly.&lt;br /&gt;
Future versions of Icecast may reject those files, including rejecting to start at all or only starting in a limited fashion if unresolved.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but failed. ====&lt;br /&gt;
chroot was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but not supported by operating system. ====&lt;br /&gt;
chroot was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but failed. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but not supported by operating system. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16842</id>
		<title>Icecast Server/2.5 Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16842"/>
		<updated>2026-01-19T22:28:08Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Warning */ Removed duplicate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Maintenance =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast versions 2.5.x report a list of &amp;quot;Maintenance&amp;quot; items in the dashboard within the admin interface. Those messages are meant to provide help to keep a deployment in best shape.&lt;br /&gt;
&lt;br /&gt;
== List ==&lt;br /&gt;
=== Info ===&lt;br /&gt;
Info level messages are just there to aid e.g. in case of a problem. No active action is required.&lt;br /&gt;
&lt;br /&gt;
==== Core files are disabled. / Core files are enabled. ====&lt;br /&gt;
This informs whether or not core files are enabled. Core files are a classic mean of debugging offered by some operating systems. Support may ask for this value.&lt;br /&gt;
&lt;br /&gt;
==== IPv4-mapped IPv6 is available on this system. ====&lt;br /&gt;
The operation system supports legacy IP via current IP sockets. This means that only an IPv6 socket needs to be configured to also handle legacy IP.&lt;br /&gt;
&lt;br /&gt;
This information may be hidden if Icecast seems to be configured correctly to avoid spamming the section.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured and active. ====&lt;br /&gt;
chroot was configured and is active. See your operation system&#039;s documentation on the details of chroot.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured and active. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured and was successful.&lt;br /&gt;
&lt;br /&gt;
==== Currently no sources are connected to this server. ====&lt;br /&gt;
There are currently no sources connected. The server is in idle state.&lt;br /&gt;
&lt;br /&gt;
==== More than 75% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
The server reached at least 75% of it&#039;s configured client limit. If that is a reason to take action depends on the current relative load (base load, peak hours, ...) of the server and the type of listeners.&lt;br /&gt;
&lt;br /&gt;
==== Environment is noisy. ====&lt;br /&gt;
The user environment contains entries that should not be present in a daemon environment. This is a indication for the server being started as a user process instead of as a daemon. This should not be seen in production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
Warnings should be considered thoroughly and the problems generally should be resolved in a timely manner. It is possible that the operation is affected by the problems reported with warnings.&lt;br /&gt;
&lt;br /&gt;
==== Developer logging is active. This mode is not for production. ====&lt;br /&gt;
Icecast is build with developer logging active. This should never be seen in production. If seen without an Icecast developer asked for it it should be disabled. To disable this Icecast needs to be recompiled.&lt;br /&gt;
&lt;br /&gt;
==== Hostname is not set to anything useful in &amp;lt;hostname&amp;gt;. ====&lt;br /&gt;
The hostname tag is not set correctly in the Icecast configuration. Some features such as directory support may be disabled. Playlist generation may not work correctly. There is generally more details in the error log. See https://icecast.org/faq/#faqentry-what-should-i-set-hostname-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No useful location is given in &amp;lt;location&amp;gt;. ====&lt;br /&gt;
The location tag is not set to anything useful in the configuration. See https://icecast.org/faq/#faqentry-what-should-i-set-location-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No admin contact given in &amp;lt;admin&amp;gt;. YP directory support is disabled. ====&lt;br /&gt;
No valid admin contact details are given. Some features such as directory support may be disabled. See https://icecast.org/faq/#faqentry-what-should-i-set-admin-to for details.&lt;br /&gt;
&lt;br /&gt;
==== Legacy sources are connected. See mount list for details. ====&lt;br /&gt;
Sources using legacy features or protocols are connected. This for example includes ICY sources. The list of sources should be checked for possibility of upgrading those sources.&lt;br /&gt;
&lt;br /&gt;
==== More than 90% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
More than 90% of the server&#039;s configured client limit is connected. This might be a sign that the limit should be lifted higher. However this might also be normal (for example in peak hours or when the number of listeners is very stable and the limit is set close to that).&lt;br /&gt;
&lt;br /&gt;
==== No secure password hash support detected. ====&lt;br /&gt;
No secure password hashing scheme was detected. Icecast will fall back to legacy support. It is best to contact the support with the full details from the admin&#039;s version page.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
Errors record actual problems and should be taken care of as soon as possible.&lt;br /&gt;
&lt;br /&gt;
==== Global client, and source limit is bigger than suitable for current open file limit. ====&lt;br /&gt;
Icecast is configured in a way allowing for more connections than the operating system permits. This may result in strange behaviour when the operating system&#039;s limit is reached.&lt;br /&gt;
&lt;br /&gt;
Usually this is due to Icecast being set to some aggressively high client limit. However it can also be due to a low limit enforced by the operating system. In general the limit of the operating system must be higher than the one set by Icecast for Icecast to actually handle the number of clients.&lt;br /&gt;
&lt;br /&gt;
==== IPv6 not enabled. ====&lt;br /&gt;
Icecast is configured with only legacy IP enabled. The current IP version (IPv6) needs to be enabled.&lt;br /&gt;
&lt;br /&gt;
==== No PRNG seed configured. PRNG is insecure. ====&lt;br /&gt;
No configuration for the PRNG is given. The generator may return weak values. libigloo defaults are used. See libigloo&#039;s documentation for details.&lt;br /&gt;
&lt;br /&gt;
==== Unknown tags are used in the config file. See the error.log for details. ====&lt;br /&gt;
Unknown tags are found in the configuration file. Those are invalid and future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
Unknown tags are often a result of typos.&lt;br /&gt;
&lt;br /&gt;
==== Obsolete tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Obsolete tags are found in the configuration file. Those should be updated or removed accordingly. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== Invalid tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Invalid tags (for example tags with invalid values) are found in the configuration file. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== The configuration did not validate. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
The configuration file is not valid. It may contain logical errors such as invalid combinations of values. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but failed. ====&lt;br /&gt;
chroot was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but not supported by operating system. ====&lt;br /&gt;
chroot was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but failed. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but not supported by operating system. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16837</id>
		<title>Icecast Server/Listen Sockets</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16837"/>
		<updated>2026-01-13T19:13:06Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Feature: Added 2.5.0 specific entries for reverse proxies&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listen Sockets =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast supports to listen on multiple sockets. Each socket is configured via a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt;. Each listen socket supports a number of options.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt; tag is used to configure listen sockets. Options are defined via sub-tags.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || no || id || &#039;&#039;none&#039;&#039; || Identifier for the listen socket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;on-behalf-of&amp;lt;/code&amp;gt; || no || URI || &#039;&#039;none&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || no || socket type || &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; || Type of the listen socket. One of &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sub-tags ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;port&amp;lt;/code&amp;gt; || no || port number || &amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt; || The port number to listen on (0-65535, but in most cases 1025-49151)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tls&amp;lt;/code&amp;gt; || no || [[Icecast_Server/known_https_restrictions#Icecast2_2.5.x_(branch_&amp;quot;master&amp;quot;)|TLS mode]] || &amp;lt;code&amp;gt;disabled&amp;lt;/code&amp;gt; || The TLS mode to be used for this listen socket.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bind-address&amp;lt;/code&amp;gt; || no || FQDN || &#039;&#039;any&#039;&#039; || The hostname used to listen on. If the hostname resolves to multiple addresses, the system defaults will be used to find the most suitable address. If mapping of legacy IP is supported via IPv6 sockets IPv6 addresses are preferred.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;client-address&amp;lt;/code&amp;gt; || no || FQDN || &#039;&#039;none&#039;&#039; || The outbound address used by this listen socket. This is specifically used by &amp;lt;code&amp;gt;type=&amp;quot;virtual&amp;quot;&amp;lt;/code&amp;gt; listen sockets.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;so-sndbuf&amp;lt;/code&amp;gt; || no || positive integer || &#039;&#039;system default&#039;&#039; || The send buffer to be used with client connections on this listen socket. It is not recommended to alter this value.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;listen-backlog&amp;lt;/code&amp;gt; || no || positive integer || &#039;&#039;Icecast default&#039;&#039; || The listen backlog to use for the listen socket. On very busy servers with a lot clients connecting at the same time it might be useful to increase this value slightly (e.g. to 15). A very high value suggests misconfiguration or system overload.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;authentication&amp;lt;/code&amp;gt; || no || [[Icecast_Server/2.5_Authentication|Authentication block]] || &#039;&#039;none&#039;&#039; || Additional authentication configuration specific to this listen socket. This is generally not needed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http-headers&amp;lt;/code&amp;gt; || no || [[Icecast_Server/Custom_HTTP_Headers|HTTP headers block]] || &#039;&#039;none&#039;&#039; || Additional HTTP headers specific to this listen socket. This is generally not needed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;shoutcast-compat&amp;lt;/code&amp;gt; || no || boolean || &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; || Whether this listen socket should accept shoutcast legacy clients. This value should be kept at it&#039;s default even for most shoutcast legacy enabled setups. See also &amp;lt;code&amp;gt;shoutcast-mount&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;shoutcast-mount&amp;lt;/code&amp;gt; || no || mount point || &#039;&#039;none&#039;&#039; || The mount point to use for shoutcast legacy clients. This will create another listen socket with the correct values as per requirements of shoutcast. This is mostly for software from the 90s.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trusted-proxy&amp;lt;/code&amp;gt; || no || FQDN || &#039;&#039;none&#039;&#039; || The URI of the id of any listen sockets (likely &amp;lt;code&amp;gt;type=&amp;quot;virtual&amp;quot;&amp;lt;/code&amp;gt;) that terminate the client&#039;s connection (e.g. reverse proxies). Setting this allows those proxies to act on behalf of the client.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16835</id>
		<title>Icecast Server/Listen Sockets</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16835"/>
		<updated>2025-12-29T19:29:46Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Sub-tags */ Documented all sub-tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listen Sockets =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast supports to listen on multiple sockets. Each socket is configured via a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt;. Each listen socket supports a number of options.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt; tag is used to configure listen sockets. Options are defined via sub-tags.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || no || id || &#039;&#039;none&#039;&#039; || Identifier for the listen socket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;on-behalf-of&amp;lt;/code&amp;gt; || no || URI || &#039;&#039;none&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || no || socket type || &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; || Type of the listen socket. One of &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sub-tags ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;port&amp;lt;/code&amp;gt; || no || port number || &amp;lt;code&amp;gt;8000&amp;lt;/code&amp;gt; || The port number to listen on (0-65535, but in most cases 1025-49151)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tls&amp;lt;/code&amp;gt; || no || [[Icecast_Server/known_https_restrictions#Icecast2_2.5.x_(branch_&amp;quot;master&amp;quot;)|TLS mode]] || &amp;lt;code&amp;gt;disabled&amp;lt;/code&amp;gt; || The TLS mode to be used for this listen socket.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bind-address&amp;lt;/code&amp;gt; || no || FQDN || &#039;&#039;any&#039;&#039; || The hostname used to listen on. If the hostname resolves to multiple addresses, the system defaults will be used to find the most suitable address. If mapping of legacy IP is supported via IPv6 sockets IPv6 addresses are preferred.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;so-sndbuf&amp;lt;/code&amp;gt; || no || positive integer || &#039;&#039;system default&#039;&#039; || The send buffer to be used with client connections on this listen socket. It is not recommended to alter this value.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;listen-backlog&amp;lt;/code&amp;gt; || no || positive integer || &#039;&#039;Icecast default&#039;&#039; || The listen backlog to use for the listen socket. On very busy servers with a lot clients connecting at the same time it might be useful to increase this value slightly (e.g. to 15). A very high value suggests misconfiguration or system overload.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;authentication&amp;lt;/code&amp;gt; || no || [[Icecast_Server/2.5_Authentication|Authentication block]] || &#039;&#039;none&#039;&#039; || Additional authentication configuration specific to this listen socket. This is generally not needed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http-headers&amp;lt;/code&amp;gt; || no || [[Icecast_Server/Custom_HTTP_Headers|HTTP headers block]] || &#039;&#039;none&#039;&#039; || Additional HTTP headers specific to this listen socket. This is generally not needed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;shoutcast-compat&amp;lt;/code&amp;gt; || no || boolean || &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; || Whether this listen socket should accept shoutcast legacy clients. This value should be kept at it&#039;s default even for most shoutcast legacy enabled setups. See also &amp;lt;code&amp;gt;shoutcast-mount&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;shoutcast-mount&amp;lt;/code&amp;gt; || no || mount point || &#039;&#039;none&#039;&#039; || The mount point to use for shoutcast legacy clients. This will create another listen socket with the correct values as per requirements of shoutcast. This is mostly for software from the 90s.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16834</id>
		<title>Icecast Server/Listen Sockets</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16834"/>
		<updated>2025-12-29T18:53:08Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Configuration */ Added list of all things on configuration, still needs descriptions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listen Sockets =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast supports to listen on multiple sockets. Each socket is configured via a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt;. Each listen socket supports a number of options.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt; tag is used to configure listen sockets. Options are defined via sub-tags.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || no || id || &#039;&#039;none&#039;&#039; || Identifier for the listen socket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;on-behalf-of&amp;lt;/code&amp;gt; || no || URI || &#039;&#039;none&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || no || socket type || &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt; || Type of the listen socket. One of &amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;virtual&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sub-tags ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;port&amp;lt;/code&amp;gt; || no || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tls&amp;lt;/code&amp;gt; || no || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bind-address&amp;lt;/code&amp;gt; || no || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;so-sndbuf&amp;lt;/code&amp;gt; || no || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;listen-backlog&amp;lt;/code&amp;gt; || no || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;authentication&amp;lt;/code&amp;gt; || no || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;http-headers&amp;lt;/code&amp;gt; || no || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;shoutcast-compat&amp;lt;/code&amp;gt; || no || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;shoutcast-mount&amp;lt;/code&amp;gt; || no || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039; || &#039;&#039;TODO&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16833</id>
		<title>Icecast Server/Listen Sockets</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Listen_Sockets&amp;diff=16833"/>
		<updated>2025-12-29T18:22:16Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Added initial stub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Listen Sockets =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast supports to listen on multiple sockets. Each socket is configured via a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt;. Each listen socket supports a number of options.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt; tag is used to configure listen sockets. Options are defined via sub-tags.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16817</id>
		<title>Icecast Server/2.5 Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16817"/>
		<updated>2023-11-20T12:07:15Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Updates and more items&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Maintenance =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast versions 2.5.x report a list of &amp;quot;Maintenance&amp;quot; items in the dashboard within the admin interface. Those messages are meant to provide help to keep a deployment in best shape.&lt;br /&gt;
&lt;br /&gt;
== List ==&lt;br /&gt;
=== Info ===&lt;br /&gt;
Info level messages are just there to aid e.g. in case of a problem. No active action is required.&lt;br /&gt;
&lt;br /&gt;
==== Core files are disabled. / Core files are enabled. ====&lt;br /&gt;
This informs whether or not core files are enabled. Core files are a classic mean of debugging offered by some operating systems. Support may ask for this value.&lt;br /&gt;
&lt;br /&gt;
==== IPv4-mapped IPv6 is available on this system. ====&lt;br /&gt;
The operation system supports legacy IP via current IP sockets. This means that only an IPv6 socket needs to be configured to also handle legacy IP.&lt;br /&gt;
&lt;br /&gt;
This information may be hidden if Icecast seems to be configured correctly to avoid spamming the section.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured and active. ====&lt;br /&gt;
chroot was configured and is active. See your operation system&#039;s documentation on the details of chroot.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured and active. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured and was successful.&lt;br /&gt;
&lt;br /&gt;
==== Currently no sources are connected to this server. ====&lt;br /&gt;
There are currently no sources connected. The server is in idle state.&lt;br /&gt;
&lt;br /&gt;
==== More than 75% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
The server reached at least 75% of it&#039;s configured client limit. If that is a reason to take action depends on the current relative load (base load, peak hours, ...) of the server and the type of listeners.&lt;br /&gt;
&lt;br /&gt;
==== Environment is noisy. ====&lt;br /&gt;
The user environment contains entries that should not be present in a daemon environment. This is a indication for the server being started as a user process instead of as a daemon. This should not be seen in production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
Warnings should be considered thoroughly and the problems generally should be resolved in a timely manner. It is possible that the operation is affected by the problems reported with warnings.&lt;br /&gt;
&lt;br /&gt;
==== Developer logging is active. This mode is not for production. ====&lt;br /&gt;
Icecast is build with developer logging active. This should never be seen in production. If seen without an Icecast developer asked for it it should be disabled. To disable this Icecast needs to be recompiled.&lt;br /&gt;
&lt;br /&gt;
==== Hostname is not set to anything useful in &amp;lt;hostname&amp;gt;. ====&lt;br /&gt;
The hostname tag is not set correctly in the Icecast configuration. Some features such as directory support may be disabled. Playlist generation may not work correctly. There is generally more details in the error log. See https://icecast.org/faq/#faqentry-what-should-i-set-hostname-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No useful location is given in &amp;lt;location&amp;gt;. ====&lt;br /&gt;
The location tag is not set to anything useful in the configuration. See https://icecast.org/faq/#faqentry-what-should-i-set-location-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No useful location is given in &amp;lt;location&amp;gt;. ====&lt;br /&gt;
No useful location is given in the configuration. See https://icecast.org/faq/#faqentry-what-should-i-set-location-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No admin contact given in &amp;lt;admin&amp;gt;. YP directory support is disabled. ====&lt;br /&gt;
No valid admin contact details are given. Some features such as directory support may be disabled. See https://icecast.org/faq/#faqentry-what-should-i-set-admin-to for details.&lt;br /&gt;
&lt;br /&gt;
==== Legacy sources are connected. See mount list for details. ====&lt;br /&gt;
Sources using legacy features or protocols are connected. This for example includes ICY sources. The list of sources should be checked for possibility of upgrading those sources.&lt;br /&gt;
&lt;br /&gt;
==== More than 90% of the server&#039;s configured maximum clients are connected ====&lt;br /&gt;
More than 90% of the server&#039;s configured client limit is connected. This might be a sign that the limit should be lifted higher. However this might also be normal (for example in peak hours or when the number of listeners is very stable and the limit is set close to that).&lt;br /&gt;
&lt;br /&gt;
==== No secure password hash support detected. ====&lt;br /&gt;
No secure password hashing scheme was detected. Icecast will fall back to legacy support. It is best to contact the support with the full details from the admin&#039;s version page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
Errors record actual problems and should be taken care of as soon as possible.&lt;br /&gt;
&lt;br /&gt;
==== Global client, and source limit is bigger than suitable for current open file limit. ====&lt;br /&gt;
Icecast is configured in a way allowing for more connections than the operating system permits. This may result in strange behaviour when the operating system&#039;s limit is reached.&lt;br /&gt;
&lt;br /&gt;
Usually this is due to Icecast being set to some aggressively high client limit. However it can also be due to a low limit enforced by the operating system. In general the limit of the operating system must be higher than the one set by Icecast for Icecast to actually handle the number of clients.&lt;br /&gt;
&lt;br /&gt;
==== IPv6 not enabled. ====&lt;br /&gt;
Icecast is configured with only legacy IP enabled. The current IP version (IPv6) needs to be enabled.&lt;br /&gt;
&lt;br /&gt;
==== No PRNG seed configured. PRNG is insecure. ====&lt;br /&gt;
No configuration for the PRNG is given. The generator may return weak values. libigloo defaults are used. See libigloo&#039;s documentation for details.&lt;br /&gt;
&lt;br /&gt;
==== Unknown tags are used in the config file. See the error.log for details. ====&lt;br /&gt;
Unknown tags are found in the configuration file. Those are invalid and future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
Unknown tags are often a result of typos.&lt;br /&gt;
&lt;br /&gt;
==== Obsolete tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Obsolete tags are found in the configuration file. Those should be updated or removed accordingly. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== Invalid tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Invalid tags (for example tags with invalid values) are found in the configuration file. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== The configuration did not validate. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
The configuration file is not valid. It may contain logical errors such as invalid combinations of values. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but failed. ====&lt;br /&gt;
chroot was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but not supported by operating system. ====&lt;br /&gt;
chroot was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but failed. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but not supported by operating system. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16816</id>
		<title>Icecast Server/2.5 Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16816"/>
		<updated>2023-11-20T11:57:29Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Updates and more items&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Maintenance =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast versions 2.5.x report a list of &amp;quot;Maintenance&amp;quot; items in the dashboard within the admin interface. Those messages are meant to provide help to keep a deployment in best shape.&lt;br /&gt;
&lt;br /&gt;
== List ==&lt;br /&gt;
=== Info ===&lt;br /&gt;
Info level messages are just there to aid e.g. in case of a problem. No active action is required.&lt;br /&gt;
&lt;br /&gt;
==== Core files are disabled. / Core files are enabled. ====&lt;br /&gt;
This informs whether or not core files are enabled. Core files are a classic mean of debugging offered by some operating systems. Support may ask for this value.&lt;br /&gt;
&lt;br /&gt;
==== IPv4-mapped IPv6 is available on this system. ====&lt;br /&gt;
The operation system supports legacy IP via current IP sockets. This means that only an IPv6 socket needs to be configured to also handle legacy IP.&lt;br /&gt;
&lt;br /&gt;
This information may be hidden if Icecast seems to be configured correctly to avoid spamming the section.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured and active. ====&lt;br /&gt;
chroot was configured and is active. See your operation system&#039;s documentation on the details of chroot.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured and active. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured and was successful.&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
Warnings should be considered thoroughly and the problems generally should be resolved in a timely manner. It is possible that the operation is affected by the problems reported with warnings.&lt;br /&gt;
&lt;br /&gt;
==== Developer logging is active. This mode is not for production. ====&lt;br /&gt;
Icecast is build with developer logging active. This should never be seen in production. If seen without an Icecast developer asked for it it should be disabled. To disable this Icecast needs to be recompiled.&lt;br /&gt;
&lt;br /&gt;
==== Hostname is not set to anything useful in &amp;lt;hostname&amp;gt;. ====&lt;br /&gt;
The hostname tag is not set correctly in the Icecast configuration. Some features such as directory support may be disabled. Playlist generation may not work correctly. There is generally more details in the error log. See https://icecast.org/faq/#faqentry-what-should-i-set-hostname-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No useful location is given in &amp;lt;location&amp;gt;. ====&lt;br /&gt;
The location tag is not set to anything useful in the configuration. See https://icecast.org/faq/#faqentry-what-should-i-set-location-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No useful location is given in &amp;lt;location&amp;gt;. ====&lt;br /&gt;
No useful location is given in the configuration. See https://icecast.org/faq/#faqentry-what-should-i-set-location-to for details.&lt;br /&gt;
&lt;br /&gt;
==== No admin contact given in &amp;lt;admin&amp;gt;. YP directory support is disabled. ====&lt;br /&gt;
No valid admin contact details are given. Some features such as directory support may be disabled. See https://icecast.org/faq/#faqentry-what-should-i-set-admin-to for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
Errors record actual problems and should be taken care of as soon as possible.&lt;br /&gt;
&lt;br /&gt;
==== Global client, and source limit is bigger than suitable for current open file limit. ====&lt;br /&gt;
Icecast is configured in a way allowing for more connections than the operating system permits. This may result in strange behaviour when the operating system&#039;s limit is reached.&lt;br /&gt;
&lt;br /&gt;
Usually this is due to Icecast being set to some aggressively high client limit. However it can also be due to a low limit enforced by the operating system. In general the limit of the operating system must be higher than the one set by Icecast for Icecast to actually handle the number of clients.&lt;br /&gt;
&lt;br /&gt;
==== IPv6 not enabled. ====&lt;br /&gt;
Icecast is configured with only legacy IP enabled. The current IP version (IPv6) needs to be enabled.&lt;br /&gt;
&lt;br /&gt;
==== No PRNG seed configured. PRNG is insecure. ====&lt;br /&gt;
No configuration for the PRNG is given. The generator may return weak values. libigloo defaults are used. See libigloo&#039;s documentation for details.&lt;br /&gt;
&lt;br /&gt;
==== Unknown tags are used in the config file. See the error.log for details. ====&lt;br /&gt;
Unknown tags are found in the configuration file. Those are invalid and future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
Unknown tags are often a result of typos.&lt;br /&gt;
&lt;br /&gt;
==== Obsolete tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Obsolete tags are found in the configuration file. Those should be updated or removed accordingly. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== Invalid tags are used in the config file. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
Invalid tags (for example tags with invalid values) are found in the configuration file. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== The configuration did not validate. See the error.log for details and update your configuration accordingly. ====&lt;br /&gt;
The configuration file is not valid. It may contain logical errors such as invalid combinations of values. Those must be corrected. Future versions of Icecast may not load with them present. See the error log for details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but failed. ====&lt;br /&gt;
chroot was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== chroot configured but not supported by operating system. ====&lt;br /&gt;
chroot was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but failed. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but failed. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;br /&gt;
&lt;br /&gt;
==== Change of UID/GID configured but not supported by operating system. ====&lt;br /&gt;
Changing of the user ID and/or group ID was configured but is not supported by the operating system. This is a security problem and requires immediate handling. See the error log and your operation system&#039;s documentation for more details.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16815</id>
		<title>Icecast Server/2.5 Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Maintenance&amp;diff=16815"/>
		<updated>2023-11-20T11:13:11Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Initial stub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Maintenance =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast versions 2.5.x report a list of &amp;quot;Maintenance&amp;quot; items in the dashboard within the admin interface. Those messages are meant to provide help to keep a deployment in best shape.&lt;br /&gt;
&lt;br /&gt;
== List ==&lt;br /&gt;
=== Info ===&lt;br /&gt;
Info level messages are just there to aid e.g. in case of a problem. No active action is required.&lt;br /&gt;
&lt;br /&gt;
==== Core files are disabled. / Core files are enabled. ====&lt;br /&gt;
This informs whether or not core files are enabled. Core files are a classic mean of debugging offered by some operating systems. Support may ask for this value.&lt;br /&gt;
&lt;br /&gt;
==== IPv4-mapped IPv6 is available on this system. ====&lt;br /&gt;
The operation system supports legacy IP via current IP sockets. This means that only an IPv6 socket needs to be configured to also handle legacy IP.&lt;br /&gt;
&lt;br /&gt;
This information may be hidden if Icecast seems to be configured correctly to avoid spamming the section.&lt;br /&gt;
&lt;br /&gt;
=== Warning ===&lt;br /&gt;
&lt;br /&gt;
==== Developer logging is active. This mode is not for production. ====&lt;br /&gt;
Icecast is build with developer logging active. This should never be seen in production. If seen without an Icecast developer asked for it it should be disabled. To disable this Icecast needs to be recompiled.&lt;br /&gt;
&lt;br /&gt;
=== Hostname is not set to anything useful in &amp;lt;hostname&amp;gt;. ===&lt;br /&gt;
The hostname tag is not set correctly in the Icecast configuration. Some features such as directory support may be disabled. There is generally more details in the error log.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
Errors record actual problems and should be taken care of as soon as possible.&lt;br /&gt;
&lt;br /&gt;
==== Global client, and source limit is bigger than suitable for current open file limit. ====&lt;br /&gt;
Icecast is configured in a way allowing for more connections than the operating system permits. This may result in strange behaviour when the operating system&#039;s limit is reached.&lt;br /&gt;
&lt;br /&gt;
Usually this is due to Icecast being set to some aggressively high client limit. However it can also be due to a low limit enforced by the operating system. In general the limit of the operating system must be higher than the one set by Icecast for Icecast to actually handle the number of clients.&lt;br /&gt;
&lt;br /&gt;
==== IPv6 not enabled. ====&lt;br /&gt;
Icecast is configured with only legacy IP enabled. The current IP version (IPv6) needs to be enabled.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16814</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16814"/>
		<updated>2023-07-29T09:15:03Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* exec */ Added environment variable list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; has no properties itself.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt; may contain &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt;s with backend specific options. It will also use the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || yes || Backend name || &#039;&#039;none&#039;&#039; || The name of the backend to use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt; || yes || list of event names || &#039;&#039;none&#039;&#039; || A comma separated list of event names to deliver to this backend. The list may include &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; as wildcard after the first dash. Also entries can be prefixed using &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; to negatively match them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&#039;&#039;&lt;br /&gt;
| &amp;lt;code&amp;gt;source-listener-attach&amp;lt;/code&amp;gt; || Source || Emitted when a listener has been attached to a source. &#039;&#039;&#039;Note:&#039;&#039;&#039; experimental.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-listeners-changed&amp;lt;/code&amp;gt; || Source || Emitted when the number of listeners changed. &#039;&#039;&#039;Note:&#039;&#039;&#039; experimental.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-listeners-is-zero&amp;lt;/code&amp;gt; || Source || Same as &amp;lt;code&amp;gt;source-listeners-changed&amp;lt;/code&amp;gt; but only emitted when the listener count is now zero. &#039;&#039;&#039;Note:&#039;&#039;&#039; experimental.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. &#039;&#039;&#039;Note:&#039;&#039;&#039; At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
=== &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The exec backend is used to start local executables. As this comes with many per-operating system and deployment specific restrictions it is generally best avoided. The &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend is often a better alternative.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;executable&amp;lt;/code&amp;gt; || Yes || path || &#039;&#039;none&#039;&#039; || Full path to the executable to be started&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;default_arguments&amp;lt;/code&amp;gt; || no || enum || &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; || Style of default arguments to be passed. One of: &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;no_defaults&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uri&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uri_and_trigger&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In addition options with no &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; but &amp;lt;code&amp;gt;type=&amp;quot;argument&amp;quot;&amp;lt;/code&amp;gt; can be added. The values of those options are passed to the executable as arguments after the options passed as per &amp;lt;code&amp;gt;default_arguments&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Styles of default arguments ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Style !! Arguments || Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; || - || Currently same as &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;no_defaults&amp;lt;/code&amp;gt; || &#039;&#039;none&#039;&#039; || No arguments are passed. Data is still accessible via environment.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uri&amp;lt;/code&amp;gt; || mount point || Only the mount point is passed as argument.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uri_and_trigger&amp;lt;/code&amp;gt; || mount point, trigger || The mount point followed by the name of the event that is delivered is passed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt; || [mount point] || Only the mount point is passed. If the mount point is not set for this event the argument is skipped.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Environment ====&lt;br /&gt;
Icecast will set the following environment:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Variable !! Status !! Availability !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ICECAST_VERSION&amp;lt;/code&amp;gt; || stable || always || Version string of Icecast&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ICECAST_HOSTNAME&amp;lt;/code&amp;gt; || stable || always || Hostname of Icecast as given in the config&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ICECAST_ADMIN&amp;lt;/code&amp;gt; || stable || always || Admin context of Icecast as given in the config&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ICECAST_LOGDIR&amp;lt;/code&amp;gt; || stable || always || Log directory of Icecast as given in the config&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EVENT_TRIGGER&amp;lt;/code&amp;gt; || stable || always || The trigger for this event&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;EVENT_URI&amp;lt;/code&amp;gt; || stable || sometimes || URI (absolute or relative to this instance) the event happened on&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SOURCE_ACTION&amp;lt;/code&amp;gt; || deprecated || always || Old name for &amp;lt;code&amp;gt;EVENT_TRIGGER&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SOURCE_MEDIA_TYPE&amp;lt;/code&amp;gt; || stable || sometimes || The Media-Type of the stream the source provides&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SOURCE_INSTANCE&amp;lt;/code&amp;gt; || stable || sometimes || The instance of the source (UUID)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SOURCE_MOUNTPOINT&amp;lt;/code&amp;gt; || stable || sometimes || The mount point of the source&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SOURCE_PUBLIC&amp;lt;/code&amp;gt; || stable || sometimes || Whether or not the mount is configured as public (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SROUCE_HIDDEN&amp;lt;/code&amp;gt; || stable || sometimes || Whether or not the mount is configured as hidden (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CLIENT_IP&amp;lt;/code&amp;gt; || stable || sometimes || The IP-Address of the client that caused the event&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CLIENT_ROLE&amp;lt;/code&amp;gt; || stable || sometimes || The role of the client that caused the event&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CLIENT_USERNAME&amp;lt;/code&amp;gt; || stable || sometimes || The username of the client that caused the event&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CLIENT_USERAGENT&amp;lt;/code&amp;gt; || stable || sometimes || The user agent string of the client that caused the event&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CLIENT_ID&amp;lt;/code&amp;gt; || stable || sometimes || The ID of the client that caused the event (integer)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CLIENT_CONNECTION_TIME&amp;lt;/code&amp;gt; || experimental || sometimes ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CLIENT_ADMIN_COMMAND&amp;lt;/code&amp;gt; || experimental || sometimes || ID of the admin command the client accesses as causing the event&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MOUNT_NAME&amp;lt;/code&amp;gt; || stable || sometimes || The name of the mount as per config&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MOUNT_DESCRIPTION&amp;lt;/code&amp;gt; || stable || sometimes || The description of the mount as per config&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MOUNT_URL&amp;lt;/code&amp;gt; || stable || sometimes || The URL (website) of the mount as per config&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MOUNT_GENRE&amp;lt;/code&amp;gt; || stable || sometimes || The genre of the mount as per config&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DUMPFILE_FILENAME&amp;lt;/code&amp;gt; || stable || sometimes || The filename used by Icecast to operate on a dump file (relative to Icecast&#039;s cwd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; backend writes events into the standard &amp;lt;code&amp;gt;error.log&amp;lt;/code&amp;gt;. The main use for this is to debug and check configuration.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;Event&amp;lt;/code&amp;gt; || A prefix to be used in the logfile. Can be used to easily grep(1) for the lines.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt; || no || log level || &amp;lt;code&amp;gt;information&amp;lt;/code&amp;gt; || The level at which to log the events.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend is used to deliver the event to some backend server (normally via HTTP). It is very similar to the auth subsystem&#039;s &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || no || username || &#039;&#039;none&#039;&#039; || Username used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || no || password || &#039;&#039;none&#039;&#039; || Password used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Yes || URL || &#039;&#039;none&#039;&#039; || URL used to deliver the events to&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; || no || string || &#039;&#039;name of the event&#039;&#039; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests. When no value is given the name of the event is used.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt; || no || boolean || &#039;&#039;true&#039;&#039; || Whether or not the new style is used for the parameters.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16813</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16813"/>
		<updated>2023-04-18T12:20:55Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* List of events */ Fix: Corrected markup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; has no properties itself.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt; may contain &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt;s with backend specific options. It will also use the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || yes || Backend name || &#039;&#039;none&#039;&#039; || The name of the backend to use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt; || yes || list of event names || &#039;&#039;none&#039;&#039; || A comma separated list of event names to deliver to this backend. The list may include &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; as wildcard after the first dash. Also entries can be prefixed using &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; to negatively match them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&#039;&#039;&lt;br /&gt;
| &amp;lt;code&amp;gt;source-listener-attach&amp;lt;/code&amp;gt; || Source || Emitted when a listener has been attached to a source. &#039;&#039;&#039;Note:&#039;&#039;&#039; experimental.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-listeners-changed&amp;lt;/code&amp;gt; || Source || Emitted when the number of listeners changed. &#039;&#039;&#039;Note:&#039;&#039;&#039; experimental.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-listeners-is-zero&amp;lt;/code&amp;gt; || Source || Same as &amp;lt;code&amp;gt;source-listeners-changed&amp;lt;/code&amp;gt; but only emitted when the listener count is now zero. &#039;&#039;&#039;Note:&#039;&#039;&#039; experimental.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. &#039;&#039;&#039;Note:&#039;&#039;&#039; At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
=== &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The exec backend is used to start local executables. As this comes with many per-operating system and deployment specific restrictions it is generally best avoided. The &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend is often a better alternative.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;executable&amp;lt;/code&amp;gt; || Yes || path || &#039;&#039;none&#039;&#039; || Full path to the executable to be started&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;default_arguments&amp;lt;/code&amp;gt; || no || enum || &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; || Style of default arguments to be passed. One of: &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;no_defaults&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uri&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uri_and_trigger&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In addition options with no &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; but &amp;lt;code&amp;gt;type=&amp;quot;argument&amp;quot;&amp;lt;/code&amp;gt; can be added. The values of those options are passed to the executable as arguments after the options passed as per &amp;lt;code&amp;gt;default_arguments&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Styles of default arguments ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Style !! Arguments || Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; || - || Currently same as &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;no_defaults&amp;lt;/code&amp;gt; || &#039;&#039;none&#039;&#039; || No arguments are passed. Data is still accessible via environment.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uri&amp;lt;/code&amp;gt; || mount point || Only the mount point is passed as argument.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uri_and_trigger&amp;lt;/code&amp;gt; || mount point, trigger || The mount point followed by the name of the event that is delivered is passed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt; || [mount point] || Only the mount point is passed. If the mount point is not set for this event the argument is skipped.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; backend writes events into the standard &amp;lt;code&amp;gt;error.log&amp;lt;/code&amp;gt;. The main use for this is to debug and check configuration.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;Event&amp;lt;/code&amp;gt; || A prefix to be used in the logfile. Can be used to easily grep(1) for the lines.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt; || no || log level || &amp;lt;code&amp;gt;information&amp;lt;/code&amp;gt; || The level at which to log the events.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend is used to deliver the event to some backend server (normally via HTTP). It is very similar to the auth subsystem&#039;s &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || no || username || &#039;&#039;none&#039;&#039; || Username used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || no || password || &#039;&#039;none&#039;&#039; || Password used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Yes || URL || &#039;&#039;none&#039;&#039; || URL used to deliver the events to&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; || no || string || &#039;&#039;name of the event&#039;&#039; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests. When no value is given the name of the event is used.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt; || no || boolean || &#039;&#039;true&#039;&#039; || Whether or not the new style is used for the parameters.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16812</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16812"/>
		<updated>2023-04-18T12:20:03Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* List of events */ Update: Added experimental events&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; has no properties itself.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt; may contain &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt;s with backend specific options. It will also use the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || yes || Backend name || &#039;&#039;none&#039;&#039; || The name of the backend to use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt; || yes || list of event names || &#039;&#039;none&#039;&#039; || A comma separated list of event names to deliver to this backend. The list may include &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; as wildcard after the first dash. Also entries can be prefixed using &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; to negatively match them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-listener-attach&amp;lt;/code&amp;gt; || Source || Emitted when a listener has been attached to a source. **Note:** experimental.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-listeners-changed&amp;lt;/code&amp;gt; || Source || Emitted when the number of listeners changed. **Note:** experimental.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-listeners-is-zero&amp;lt;/code&amp;gt; || Source || Same as &amp;lt;code&amp;gt;source-listeners-changed&amp;lt;/code&amp;gt; but only emitted when the listener count is now zero. **Note:** experimental.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
=== &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The exec backend is used to start local executables. As this comes with many per-operating system and deployment specific restrictions it is generally best avoided. The &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend is often a better alternative.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;executable&amp;lt;/code&amp;gt; || Yes || path || &#039;&#039;none&#039;&#039; || Full path to the executable to be started&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;default_arguments&amp;lt;/code&amp;gt; || no || enum || &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; || Style of default arguments to be passed. One of: &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;no_defaults&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uri&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uri_and_trigger&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In addition options with no &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; but &amp;lt;code&amp;gt;type=&amp;quot;argument&amp;quot;&amp;lt;/code&amp;gt; can be added. The values of those options are passed to the executable as arguments after the options passed as per &amp;lt;code&amp;gt;default_arguments&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Styles of default arguments ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Style !! Arguments || Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; || - || Currently same as &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;no_defaults&amp;lt;/code&amp;gt; || &#039;&#039;none&#039;&#039; || No arguments are passed. Data is still accessible via environment.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uri&amp;lt;/code&amp;gt; || mount point || Only the mount point is passed as argument.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uri_and_trigger&amp;lt;/code&amp;gt; || mount point, trigger || The mount point followed by the name of the event that is delivered is passed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt; || [mount point] || Only the mount point is passed. If the mount point is not set for this event the argument is skipped.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; backend writes events into the standard &amp;lt;code&amp;gt;error.log&amp;lt;/code&amp;gt;. The main use for this is to debug and check configuration.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;Event&amp;lt;/code&amp;gt; || A prefix to be used in the logfile. Can be used to easily grep(1) for the lines.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt; || no || log level || &amp;lt;code&amp;gt;information&amp;lt;/code&amp;gt; || The level at which to log the events.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend is used to deliver the event to some backend server (normally via HTTP). It is very similar to the auth subsystem&#039;s &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || no || username || &#039;&#039;none&#039;&#039; || Username used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || no || password || &#039;&#039;none&#039;&#039; || Password used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Yes || URL || &#039;&#039;none&#039;&#039; || URL used to deliver the events to&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; || no || string || &#039;&#039;name of the event&#039;&#039; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests. When no value is given the name of the event is used.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt; || no || boolean || &#039;&#039;true&#039;&#039; || Whether or not the new style is used for the parameters.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16811</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16811"/>
		<updated>2023-04-18T10:17:50Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* exec */ Feature: Added infos on the exec event backend&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; has no properties itself.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt; may contain &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt;s with backend specific options. It will also use the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || yes || Backend name || &#039;&#039;none&#039;&#039; || The name of the backend to use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt; || yes || list of event names || &#039;&#039;none&#039;&#039; || A comma separated list of event names to deliver to this backend. The list may include &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; as wildcard after the first dash. Also entries can be prefixed using &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; to negatively match them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
=== &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The exec backend is used to start local executables. As this comes with many per-operating system and deployment specific restrictions it is generally best avoided. The &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend is often a better alternative.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;executable&amp;lt;/code&amp;gt; || Yes || path || &#039;&#039;none&#039;&#039; || Full path to the executable to be started&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;default_arguments&amp;lt;/code&amp;gt; || no || enum || &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; || Style of default arguments to be passed. One of: &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;no_defaults&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uri&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uri_and_trigger&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In addition options with no &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; but &amp;lt;code&amp;gt;type=&amp;quot;argument&amp;quot;&amp;lt;/code&amp;gt; can be added. The values of those options are passed to the executable as arguments after the options passed as per &amp;lt;code&amp;gt;default_arguments&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Styles of default arguments ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Style !! Arguments || Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; || - || Currently same as &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;no_defaults&amp;lt;/code&amp;gt; || &#039;&#039;none&#039;&#039; || No arguments are passed. Data is still accessible via environment.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uri&amp;lt;/code&amp;gt; || mount point || Only the mount point is passed as argument.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uri_and_trigger&amp;lt;/code&amp;gt; || mount point, trigger || The mount point followed by the name of the event that is delivered is passed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt; || [mount point] || Only the mount point is passed. If the mount point is not set for this event the argument is skipped.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; backend writes events into the standard &amp;lt;code&amp;gt;error.log&amp;lt;/code&amp;gt;. The main use for this is to debug and check configuration.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;Event&amp;lt;/code&amp;gt; || A prefix to be used in the logfile. Can be used to easily grep(1) for the lines.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt; || no || log level || &amp;lt;code&amp;gt;information&amp;lt;/code&amp;gt; || The level at which to log the events.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend is used to deliver the event to some backend server (normally via HTTP). It is very similar to the auth subsystem&#039;s &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || no || username || &#039;&#039;none&#039;&#039; || Username used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || no || password || &#039;&#039;none&#039;&#039; || Password used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Yes || URL || &#039;&#039;none&#039;&#039; || URL used to deliver the events to&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; || no || string || &#039;&#039;name of the event&#039;&#039; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests. When no value is given the name of the event is used.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt; || no || boolean || &#039;&#039;true&#039;&#039; || Whether or not the new style is used for the parameters.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16810</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16810"/>
		<updated>2023-04-18T10:01:32Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* url */ Feature: Added infos on the url backend&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; has no properties itself.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt; may contain &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt;s with backend specific options. It will also use the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || yes || Backend name || &#039;&#039;none&#039;&#039; || The name of the backend to use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt; || yes || list of event names || &#039;&#039;none&#039;&#039; || A comma separated list of event names to deliver to this backend. The list may include &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; as wildcard after the first dash. Also entries can be prefixed using &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; to negatively match them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
=== &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; ===&lt;br /&gt;
TODO.&lt;br /&gt;
=== &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; backend writes events into the standard &amp;lt;code&amp;gt;error.log&amp;lt;/code&amp;gt;. The main use for this is to debug and check configuration.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;Event&amp;lt;/code&amp;gt; || A prefix to be used in the logfile. Can be used to easily grep(1) for the lines.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt; || no || log level || &amp;lt;code&amp;gt;information&amp;lt;/code&amp;gt; || The level at which to log the events.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend is used to deliver the event to some backend server (normally via HTTP). It is very similar to the auth subsystem&#039;s &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || no || username || &#039;&#039;none&#039;&#039; || Username used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || no || password || &#039;&#039;none&#039;&#039; || Password used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Yes || URL || &#039;&#039;none&#039;&#039; || URL used to deliver the events to&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; || no || string || &#039;&#039;name of the event&#039;&#039; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests. When no value is given the name of the event is used.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy&amp;lt;/code&amp;gt; || no || boolean || &#039;&#039;true&#039;&#039; || Whether or not the new style is used for the parameters.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16809</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16809"/>
		<updated>2023-04-18T09:55:09Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* log */ Feature: Description of the log backend&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; has no properties itself.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt; may contain &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt;s with backend specific options. It will also use the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || yes || Backend name || &#039;&#039;none&#039;&#039; || The name of the backend to use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt; || yes || list of event names || &#039;&#039;none&#039;&#039; || A comma separated list of event names to deliver to this backend. The list may include &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; as wildcard after the first dash. Also entries can be prefixed using &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; to negatively match them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
=== &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; ===&lt;br /&gt;
TODO.&lt;br /&gt;
=== &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; backend writes events into the standard &amp;lt;code&amp;gt;error.log&amp;lt;/code&amp;gt;. The main use for this is to debug and check configuration.&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;Event&amp;lt;/code&amp;gt; || A prefix to be used in the logfile. Can be used to easily grep(1) for the lines.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level&amp;lt;/code&amp;gt; || no || log level || &amp;lt;code&amp;gt;information&amp;lt;/code&amp;gt; || The level at which to log the events.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
TODO.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16808</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16808"/>
		<updated>2023-04-18T09:34:56Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Update: Added basic list of backends&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; has no properties itself.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt; may contain &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt;s with backend specific options. It will also use the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || yes || Backend name || &#039;&#039;none&#039;&#039; || The name of the backend to use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt; || yes || list of event names || &#039;&#039;none&#039;&#039; || A comma separated list of event names to deliver to this backend. The list may include &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; as wildcard after the first dash. Also entries can be prefixed using &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; to negatively match them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
=== &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; ===&lt;br /&gt;
TODO.&lt;br /&gt;
=== &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; ===&lt;br /&gt;
TODO.&lt;br /&gt;
=== &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
TODO.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16807</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16807"/>
		<updated>2023-04-18T09:31:59Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Configuration */ Update: Added note on wildcards and negative matches&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; has no properties itself.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt; may contain &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt;s with backend specific options. It will also use the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || yes || Backend name || &#039;&#039;none&#039;&#039; || The name of the backend to use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt; || yes || list of event names || &#039;&#039;none&#039;&#039; || A comma separated list of event names to deliver to this backend. The list may include &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; as wildcard after the first dash. Also entries can be prefixed using &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; to negatively match them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16806</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16806"/>
		<updated>2023-04-18T09:17:23Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Configuration */ Update: Added options&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; has no properties itself.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt; may contain &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt;s with backend specific options. It will also use the following properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || yes || Backend name || &#039;&#039;none&#039;&#039; || The name of the backend to use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trigger&amp;lt;/code&amp;gt; || yes || list of event names || &#039;&#039;none&#039;&#039; || A comma separated list of event names to deliver to this backend.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16805</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16805"/>
		<updated>2023-04-18T09:11:34Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Feature: Added stub on event related tags.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Event subsystem backends are configured via &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event /&amp;gt;&amp;lt;/code&amp;gt;s inside of a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;event-bindings /&amp;gt;&amp;lt;/code&amp;gt; can be used inside:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16804</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16804"/>
		<updated>2023-04-18T08:58:09Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Overview */ Added info on order vs. causality&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases. Events in the event subsystem are inherently delivered asynchronously. Therefore they may arrive at some handler in any order. However information regarding their causality is preserved via their data.&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16803</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16803"/>
		<updated>2023-04-18T08:56:06Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Update: Added basic list of events&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases.&lt;br /&gt;
&lt;br /&gt;
== List of events ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! event !! Context !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-start&amp;lt;/code&amp;gt;  || Global || Emitted when Icecast has been started up initially.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-stop&amp;lt;/code&amp;gt;   || Global || Emitted as part of Icecast&#039;s shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-active&amp;lt;/code&amp;gt; || Global || Emitted when Icecast is active (has sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;icecast-idle&amp;lt;/code&amp;gt;   || Global || Emitted when Icecast is in idle (no sources connected).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-connect&amp;lt;/code&amp;gt; || Source || Emitted when a source enters running state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-disconnect&amp;lt;/code&amp;gt; || Source || Emitted when a source is shut down.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;source-flags-changed&amp;lt;/code&amp;gt; || Source || Emitted when a source experiences changes of it&#039;s flags. This might be for internal and external reasons.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format-metadata-changed&amp;lt;/code&amp;gt; || Source || Emitted whenever the metadata on the format level changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile was just opened. At the time this is emitted any operations on the dumpfile as per the operating systems specification on open files are allowed. This usually includes renaming the file and moving it between directories on the same volume.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-closed&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile is closed. **Note:** At this point Icecast knows hardly anything about the dumpfile anymore. So not all information is available to handlers of this event. Any operation should be done via &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt; whenever possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dumpfile-error&amp;lt;/code&amp;gt; || Source || Emitted when a dumpfile cannot be opened for any reason. See also &amp;lt;code&amp;gt;dumpfile-opened&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16802</id>
		<title>Icecast Server/Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Events&amp;diff=16802"/>
		<updated>2023-04-18T08:41:11Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Initial stub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Events =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features an event subsystem. This subsystem is used to deliver information on certain events that happen within the server to backends. In it&#039;s nature it is very similar to the auth subsystem. However in contrast to the auth subsystem it cannot modify the server state in any way. This makes it much more performant at the cost of slightly less usecases.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=User:Phschafft&amp;diff=16801</id>
		<title>User:Phschafft</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=User:Phschafft&amp;diff=16801"/>
		<updated>2023-04-18T08:37:48Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Little updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Name &amp;amp; Species ===&lt;br /&gt;
phschafft (even if the wiki uses &#039;Phschafft&#039;), a lion, speaking natively German and some English.&lt;br /&gt;
&lt;br /&gt;
=== Xiph Projects ===&lt;br /&gt;
* [[Icecast]]&lt;br /&gt;
* [[Vorbis-tools]]&lt;br /&gt;
&lt;br /&gt;
=== Contact ===&lt;br /&gt;
I&#039;m reached best via IRC (&#039;&#039;phschafft&#039;&#039; @ &#039;&#039;IRC @ PH2&#039;&#039;, and &#039;&#039;OFTC&#039;&#039;) or by E-Mail. For contact details see my homepage.&lt;br /&gt;
&lt;br /&gt;
=== Websites ===&lt;br /&gt;
* [https://lion.leolix.org/ Personal Homepage]&lt;br /&gt;
* [https://www.loewenfelsen.net/ Company Homepage]&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16800</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16800"/>
		<updated>2023-03-11T16:16:41Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Overview */ Update: Linked docu on headers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;role&#039;&#039; may have any combination of the [[#Common properties|common properties]] set. In addition it may contain different types of sub-tags:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sub tag !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt; || Options passed to the used [[#Backends|backend]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;http-headers /&amp;gt;&amp;lt;/code&amp;gt; || [[Icecast Server/Custom HTTP Headers|Standard HTTP headers block]]. Is used if the &#039;&#039;role&#039;&#039; matches.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;acl /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common properties ==&lt;br /&gt;
All roles support the following common properties. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to match all &#039;&#039;web/&#039;&#039; domain clients (default). See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to not match all &#039;&#039;web/&#039;&#039; domain clients. See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is allowed to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to allow all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is denied to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to deny all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matching ==&lt;br /&gt;
Matching is performed before the backend is asked to check a specific client. While matching a client is checked to have certain features (e.g. to use a specific HTTP method). If it does, the backend is consulted. If not a &#039;&#039;no-match&#039;&#039; is returned and the next role is tried.&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend matches all client requests. It is used to implement catch all rules. This is most prominently used at the end of an &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;authentication /&amp;gt;&amp;lt;/code&amp;gt; block to stop processing and applying defaults. [[#Matching|Matching]] still applies.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
This backend takes no options.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend is used to match a client by username and check for a static provided password. This is the 2.5.x variant of defining e.g. global admin accounts and similar.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || Yes || username || &#039;&#039;none&#039;&#039; || Username of the user.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || Yes || encoded password || &#039;&#039;none&#039;&#039; || Password of the user. The encoding depends on the &amp;lt;code&amp;gt;hashed&amp;lt;/code&amp;gt; option.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hashed&amp;lt;/code&amp;gt; || no || boolean || no || Whether or not the password is hashed. If not hashed it is given in plain. If hashed it uses the same format as the &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; uses in it&#039;s database.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; || no || alter action || &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || Alter &#039;&#039;action&#039;&#039; used on positive match. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;argument&amp;lt;/code&amp;gt; || no || alter argument || &#039;&#039;none&#039;&#039; || Alter &#039;&#039;argument&#039;&#039; used on positive match. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Do not use. This backend is used internally as part of the ICY emulation. ICY emulation by itself is deprecated.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
Takes same options as &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; but no &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The URL backend is used to query a backend server (normally via HTTP or HTTPS) about the status of the used credentials.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || no || username || &#039;&#039;none&#039;&#039; || Username used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || no || password || &#039;&#039;none&#039;&#039; || Password used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;headers&amp;lt;/code&amp;gt; || no || list of tokens || &#039;&#039;none&#039;&#039; || List of headers to be added to the backend request.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_prefix&amp;lt;/code&amp;gt; || no || string || empty string || Prefix used for extra headers when send to the backend. Should not be empty when &amp;lt;code&amp;gt;headers&amp;lt;/code&amp;gt; is set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;client_add&amp;lt;/code&amp;gt; || no || URL || &#039;&#039;none&#039;&#039; || URL used to query when a client connects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;client_remove&amp;lt;/code&amp;gt; || no || URL || &#039;&#039;none&#039;&#039; || URL used to query when a client disconnects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action_add&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;listener_add&amp;lt;/code&amp;gt; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests when clients connect.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action_remove&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;listener_remove&amp;lt;/code&amp;gt; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests when clients disconnect.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;auth_header&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;icecast-auth-user: 1\r\n&amp;lt;/code&amp;gt; || Legacy. Use &amp;lt;code&amp;gt;header_auth&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timelimit_header&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;icecast-auth-timelimit:&amp;lt;/code&amp;gt; || Legacy. Use &amp;lt;code&amp;gt;header_timelimit&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_auth&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-result&amp;lt;/code&amp;gt; || Header used to transport the backends result for the given credentials. Might be one of &amp;lt;code&amp;gt;ok&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;failed&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;no match&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_timelimit&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-timelimit&amp;lt;/code&amp;gt; || Header used to transport how long a client may stay connected. In seconds. If the header is absent the client is allowed to stay connected indefinitely.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_message&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-message&amp;lt;/code&amp;gt; || Header used to transport a message that is logged when login failed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_alter_action&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-alter-action&amp;lt;/code&amp;gt; ||  Alter &#039;&#039;action&#039;&#039; used. When no such header is returned no client altering will be performed. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_alter_argument&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-alter-argument&amp;lt;/code&amp;gt; || Alter &#039;&#039;argument&#039;&#039; used. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
Note: If &amp;lt;code&amp;gt;client_add&amp;lt;/code&amp;gt; nor &amp;lt;code&amp;gt;client_remove&amp;lt;/code&amp;gt; is given this backend is useless.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The htpasswd backend compares the user and password against a flat file database. This is syntactically compatible with most &amp;quot;.htpasswd&amp;quot; implementations. However supported algorithms might differ. Therefore management of those files is best done via Icecast admin interface and/or API.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;filename&amp;lt;/code&amp;gt; || Yes || filename || &#039;&#039;none&#039;&#039; || Filename to the database to use. The database contains sensitive data and access to it should be restricted. Write access for Icecast is only required if the database should be updated by Icecast itself (e.g. via the admin interface).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The authentication enforcement backend will reject any client that does not pass credentials. The only use of this is to be placed in front of a mandatory &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend. This allows the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend to skip negotiation requests and therefor reduce the load on the backend.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
This backend takes no options.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Custom_HTTP_Headers&amp;diff=16799</id>
		<title>Icecast Server/Custom HTTP Headers</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Custom_HTTP_Headers&amp;diff=16799"/>
		<updated>2023-03-11T16:15:27Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Feature: Documented headers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Custom HTTP Headers =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast allows to set custom HTTP headers. This is done via a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;http-headers /&amp;gt;&amp;lt;/code&amp;gt; section. Each such section contains zero or more &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;header /&amp;gt;&amp;lt;/code&amp;gt; tags. Such sections are permitted within the following tags:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;icecast /&amp;gt;&amp;lt;/code&amp;gt; (global headers)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;listen-socket /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;mount /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;role /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;acl /&amp;gt;&amp;lt;/code&amp;gt; (Experimental! Do not use!)&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
Each &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;header /&amp;gt;&amp;lt;/code&amp;gt; may have the following XML properties:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || no || enum || &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || The type of the header. &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;cors&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || Yes || token || &#039;&#039;none&#039;&#039; || The name of the header to add. Note that this field is case insensitive. The case of the sent header my be different from what is configured here.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; || depends on &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || depends on &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || &#039;&#039;none&#039;&#039; || The value of the header to add. the meaning depends on it&#039;s &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; || no || HTTP status code || &#039;&#039;any&#039;&#039; || Limit this header to the responses that return the given status code.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
There are different types of headers. The type generally controls how the header is generated.&lt;br /&gt;
&lt;br /&gt;
=== Type &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This is used to generate a static header. The &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is sent as-is to the client.&lt;br /&gt;
&lt;br /&gt;
=== Type &amp;lt;code&amp;gt;cors&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The CORS type is used to generate a CORS (cross-origin resource sharing) header. The &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is the name of the header. If a &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is given, that value overrides the auto generated value (if any).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Header !! Value required !! Type !! Default !! Description&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;Access-Control-Allow-Origin&amp;lt;/code&amp;gt; || no || origin || The request origin on success, &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; otherwise || Sets the allowed origin. Should be &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for manual configuration or left unset.&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;Access-Control-Allow-Credentials&amp;lt;/code&amp;gt; || Yes¹ || boolean || &#039;&#039;none&#039;&#039;¹ || Whether or not clients are allowed to send credentials to the mount point.&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;Access-Control-Expose-Headers&amp;lt;/code&amp;gt; || no || token list || &amp;lt;code&amp;gt;content-range, icy-br, icy-description, icy-genre, icy-name, icy-pub, icy-url&amp;lt;/code&amp;gt;¹ || List of extra headers a client may have access to. &lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;Access-Control-Max-Age&amp;lt;/code&amp;gt; || no || time interval || &amp;lt;code&amp;gt;300&amp;lt;/code&amp;gt; (5 minutes) || Time in seconds on how long CORS related information may be cached.&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;Access-Control-Allow-Methods&amp;lt;/code&amp;gt; || no || list of HTTP methods || Same as &amp;lt;code&amp;gt;Allow&amp;lt;/code&amp;gt; list on success, none otherwise || The list of allowed HTTP methods. If no &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is given this equals to all allowed methods for the given mount point.&lt;br /&gt;
|-&lt;br /&gt;
|| &amp;lt;code&amp;gt;Access-Control-Allow-Headers&amp;lt;/code&amp;gt; || no || token list || &amp;lt;code&amp;gt;range, if-range&amp;lt;/code&amp;gt;¹ ||The extra headers a client my send during actual requests.&lt;br /&gt;
|}&lt;br /&gt;
¹ The default is subject to updates in order to represent the current state of development.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Custom_HTTP_Headers&amp;diff=16798</id>
		<title>Icecast Server/Custom HTTP Headers</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Custom_HTTP_Headers&amp;diff=16798"/>
		<updated>2023-03-11T15:45:17Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Initial stub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Custom HTTP Headers =&lt;br /&gt;
&amp;lt;div class=&amp;quot;boilerplate metadata&amp;quot; style=&amp;quot;background-color: #fee; margin: 0 1em; padding: 0 10px; border: 1px solid #aaa;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Icecast 2.5.x page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This page discusses the topic in context of Icecast 2.5.x. The situation for 2.4.x might be different.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Icecast allows to set custom HTTP headers. This is done via a &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;http-headers /&amp;gt;&amp;lt;/code&amp;gt; section.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16797</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16797"/>
		<updated>2023-03-11T15:34:31Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Options */ Update: Completed list of options.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;role&#039;&#039; may have any combination of the [[#Common properties|common properties]] set. In addition it may contain different types of sub-tags:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sub tag !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt; || Options passed to the used [[#Backends|backend]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;http-headers /&amp;gt;&amp;lt;/code&amp;gt; || Standard HTTP headers block. Is used if the &#039;&#039;role&#039;&#039; matches.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;acl /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common properties ==&lt;br /&gt;
All roles support the following common properties. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to match all &#039;&#039;web/&#039;&#039; domain clients (default). See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to not match all &#039;&#039;web/&#039;&#039; domain clients. See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is allowed to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to allow all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is denied to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to deny all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matching ==&lt;br /&gt;
Matching is performed before the backend is asked to check a specific client. While matching a client is checked to have certain features (e.g. to use a specific HTTP method). If it does, the backend is consulted. If not a &#039;&#039;no-match&#039;&#039; is returned and the next role is tried.&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend matches all client requests. It is used to implement catch all rules. This is most prominently used at the end of an &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;authentication /&amp;gt;&amp;lt;/code&amp;gt; block to stop processing and applying defaults. [[#Matching|Matching]] still applies.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
This backend takes no options.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend is used to match a client by username and check for a static provided password. This is the 2.5.x variant of defining e.g. global admin accounts and similar.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || Yes || username || &#039;&#039;none&#039;&#039; || Username of the user.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || Yes || encoded password || &#039;&#039;none&#039;&#039; || Password of the user. The encoding depends on the &amp;lt;code&amp;gt;hashed&amp;lt;/code&amp;gt; option.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hashed&amp;lt;/code&amp;gt; || no || boolean || no || Whether or not the password is hashed. If not hashed it is given in plain. If hashed it uses the same format as the &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; uses in it&#039;s database.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; || no || alter action || &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || Alter &#039;&#039;action&#039;&#039; used on positive match. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;argument&amp;lt;/code&amp;gt; || no || alter argument || &#039;&#039;none&#039;&#039; || Alter &#039;&#039;argument&#039;&#039; used on positive match. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Do not use. This backend is used internally as part of the ICY emulation. ICY emulation by itself is deprecated.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
Takes same options as &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; but no &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The URL backend is used to query a backend server (normally via HTTP or HTTPS) about the status of the used credentials.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || no || username || &#039;&#039;none&#039;&#039; || Username used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || no || password || &#039;&#039;none&#039;&#039; || Password used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;headers&amp;lt;/code&amp;gt; || no || list of tokens || &#039;&#039;none&#039;&#039; || List of headers to be added to the backend request.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_prefix&amp;lt;/code&amp;gt; || no || string || empty string || Prefix used for extra headers when send to the backend. Should not be empty when &amp;lt;code&amp;gt;headers&amp;lt;/code&amp;gt; is set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;client_add&amp;lt;/code&amp;gt; || no || URL || &#039;&#039;none&#039;&#039; || URL used to query when a client connects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;client_remove&amp;lt;/code&amp;gt; || no || URL || &#039;&#039;none&#039;&#039; || URL used to query when a client disconnects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action_add&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;listener_add&amp;lt;/code&amp;gt; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests when clients connect.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action_remove&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;listener_remove&amp;lt;/code&amp;gt; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests when clients disconnect.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;auth_header&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;icecast-auth-user: 1\r\n&amp;lt;/code&amp;gt; || Legacy. Use &amp;lt;code&amp;gt;header_auth&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timelimit_header&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;icecast-auth-timelimit:&amp;lt;/code&amp;gt; || Legacy. Use &amp;lt;code&amp;gt;header_timelimit&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_auth&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-result&amp;lt;/code&amp;gt; || Header used to transport the backends result for the given credentials. Might be one of &amp;lt;code&amp;gt;ok&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;failed&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;no match&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_timelimit&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-timelimit&amp;lt;/code&amp;gt; || Header used to transport how long a client may stay connected. In seconds. If the header is absent the client is allowed to stay connected indefinitely.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_message&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-message&amp;lt;/code&amp;gt; || Header used to transport a message that is logged when login failed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_alter_action&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-alter-action&amp;lt;/code&amp;gt; ||  Alter &#039;&#039;action&#039;&#039; used. When no such header is returned no client altering will be performed. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_alter_argument&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-alter-argument&amp;lt;/code&amp;gt; || Alter &#039;&#039;argument&#039;&#039; used. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
Note: If &amp;lt;code&amp;gt;client_add&amp;lt;/code&amp;gt; nor &amp;lt;code&amp;gt;client_remove&amp;lt;/code&amp;gt; is given this backend is useless.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The htpasswd backend compares the user and password against a flat file database. This is syntactically compatible with most &amp;quot;.htpasswd&amp;quot; implementations. However supported algorithms might differ. Therefore management of those files is best done via Icecast admin interface and/or API.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;filename&amp;lt;/code&amp;gt; || Yes || filename || &#039;&#039;none&#039;&#039; || Filename to the database to use. The database contains sensitive data and access to it should be restricted. Write access for Icecast is only required if the database should be updated by Icecast itself (e.g. via the admin interface).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The authentication enforcement backend will reject any client that does not pass credentials. The only use of this is to be placed in front of a mandatory &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend. This allows the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend to skip negotiation requests and therefor reduce the load on the backend.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
This backend takes no options.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16796</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16796"/>
		<updated>2023-03-11T14:00:51Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Backends */ Feature: Wrote on backend options&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;role&#039;&#039; may have any combination of the [[#Common properties|common properties]] set. In addition it may contain different types of sub-tags:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sub tag !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt; || Options passed to the used [[#Backends|backend]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;http-headers /&amp;gt;&amp;lt;/code&amp;gt; || Standard HTTP headers block. Is used if the &#039;&#039;role&#039;&#039; matches.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;acl /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common properties ==&lt;br /&gt;
All roles support the following common properties. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to match all &#039;&#039;web/&#039;&#039; domain clients (default). See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to not match all &#039;&#039;web/&#039;&#039; domain clients. See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is allowed to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to allow all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is denied to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to deny all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matching ==&lt;br /&gt;
Matching is performed before the backend is asked to check a specific client. While matching a client is checked to have certain features (e.g. to use a specific HTTP method). If it does, the backend is consulted. If not a &#039;&#039;no-match&#039;&#039; is returned and the next role is tried.&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend matches all client requests. It is used to implement catch all rules. This is most prominently used at the end of an &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;authentication /&amp;gt;&amp;lt;/code&amp;gt; block to stop processing and applying defaults. [[#Matching|Matching]] still applies.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
This backend takes no options.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend is used to match a client by username and check for a static provided password. This is the 2.5.x variant of defining e.g. global admin accounts and similar.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || Yes || username || &#039;&#039;none&#039;&#039; || Username of the user.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || Yes || encoded password || &#039;&#039;none&#039;&#039; || Password of the user. The encoding depends on the &amp;lt;code&amp;gt;hashed&amp;lt;/code&amp;gt; option.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hashed&amp;lt;/code&amp;gt; || no || boolean || no || Whether or not the password is hashed. If not hashed it is given in plain. If hashed it uses the same format as the &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; uses in it&#039;s database.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; || no || alter action || &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || Alter &#039;&#039;action&#039;&#039; used on positive match. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;argument&amp;lt;/code&amp;gt; || no || alter argument || &#039;&#039;none&#039;&#039; || Alter &#039;&#039;argument&#039;&#039; used on positive match. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Do not use. This backend is used internally as part of the ICY emulation. ICY emulation by itself is deprecated.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
Takes same options as &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; but no &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The URL backend is used to query a backend server (normally via HTTP or HTTPS) about the status of the used credentials.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; || no || username || &#039;&#039;none&#039;&#039; || Username used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || no || password || &#039;&#039;none&#039;&#039; || Password used to login to the backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;headers&amp;lt;/code&amp;gt; || no || list of tokens || &#039;&#039;none&#039;&#039; || List of headers to be added to the backend request.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_prefix&amp;lt;/code&amp;gt; || no || string || empty string || Prefix used for extra headers when send to the backend. Should not be empty when &amp;lt;code&amp;gt;headers&amp;lt;/code&amp;gt; is set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;client_add&amp;lt;/code&amp;gt; || no || URL || &#039;&#039;none&#039;&#039; || URL used to query when a client connects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;client_remove&amp;lt;/code&amp;gt; || no || URL || &#039;&#039;none&#039;&#039; || URL used to query when a client disconnects.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action_add&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;listener_add&amp;lt;/code&amp;gt; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests when clients connect.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;action_remove&amp;lt;/code&amp;gt; || no || string || &amp;lt;code&amp;gt;listener_remove&amp;lt;/code&amp;gt; || Value for the &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;-parameter sent as part of backend requests when clients disconnect.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;auth_header&amp;lt;/code&amp;gt; || no || ? || ? || Legacy. Use &amp;lt;code&amp;gt;header_auth&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timelimit_header&amp;lt;/code&amp;gt; || no || ? || ? || Legacy. Use &amp;lt;code&amp;gt;header_timelimit&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_auth&amp;lt;/code&amp;gt; || ? || token || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_timelimit&amp;lt;/code&amp;gt; || ? || token || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_message&amp;lt;/code&amp;gt; || ? || token || ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_alter_action&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-alter-action&amp;lt;/code&amp;gt; ||  Alter &#039;&#039;action&#039;&#039; used. When no such header is returned no client altering will be performed. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;header_alter_argument&amp;lt;/code&amp;gt; || no || token || &amp;lt;code&amp;gt;x-icecast-auth-alter-argument&amp;lt;/code&amp;gt; || Alter &#039;&#039;argument&#039;&#039; used. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
Note: If &amp;lt;code&amp;gt;client_add&amp;lt;/code&amp;gt; nor &amp;lt;code&amp;gt;client_remove&amp;lt;/code&amp;gt; is given this backend is useless.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The htpasswd backend compares the user and password against a flat file database. This is syntactically compatible with most &amp;quot;.htpasswd&amp;quot; implementations. However supported algorithms might differ. Therefore management of those files is best done via Icecast admin interface and/or API.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Required || Type || Default || Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;filename&amp;lt;/code&amp;gt; || Yes || filename || &#039;&#039;none&#039;&#039; || Filename to the database to use. The database contains sensitive data and access to it should be restricted. Write access for Icecast is only required if the database should be updated by Icecast itself (e.g. via the admin interface).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The authentication enforcement backend will reject any client that does not pass credentials. The only use of this is to be placed in front of a mandatory &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend. This allows the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend to skip negotiation requests and therefor reduce the load on the backend.&lt;br /&gt;
&lt;br /&gt;
==== Options ====&lt;br /&gt;
This backend takes no options.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16795</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16795"/>
		<updated>2023-03-11T13:26:55Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Backends */ Feature: Basic infos on each backend&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;role&#039;&#039; may have any combination of the [[#Common properties|common properties]] set. In addition it may contain different types of sub-tags:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sub tag !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt; || Options passed to the used [[#Backends|backend]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;http-headers /&amp;gt;&amp;lt;/code&amp;gt; || Standard HTTP headers block. Is used if the &#039;&#039;role&#039;&#039; matches.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;acl /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common properties ==&lt;br /&gt;
All roles support the following common properties. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to match all &#039;&#039;web/&#039;&#039; domain clients (default). See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to not match all &#039;&#039;web/&#039;&#039; domain clients. See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is allowed to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to allow all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is denied to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to deny all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matching ==&lt;br /&gt;
Matching is performed before the backend is asked to check a specific client. While matching a client is checked to have certain features (e.g. to use a specific HTTP method). If it does, the backend is consulted. If not a &#039;&#039;no-match&#039;&#039; is returned and the next role is tried.&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend matches all client requests. It is used to implement catch all rules. This is most prominently used at the end of an &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;authentication /&amp;gt;&amp;lt;/code&amp;gt; block to stop processing and applying defaults. [[#Matching|Matching]] still applies.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; ===&lt;br /&gt;
This backend is used to match a client by username and check for a static provided password. This is the 2.5.x variant of defining e.g. global admin accounts and similar.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Do not use. This backend is used internally as part of the ICY emulation. ICY emulation by itself is deprecated.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The URL backend is used to query a backend server (normally via HTTP or HTTPS) about the status of the used credentials.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The htpasswd backend compares the user and password against a flat file database. This is syntactically compatible with most &amp;quot;.htpasswd&amp;quot; implementations. However supported algorithms might differ. Therefore management of those files is best done via Icecast admin interface and/or API.&lt;br /&gt;
&lt;br /&gt;
=== Backend &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; ===&lt;br /&gt;
The authentication enforcement backend will reject any client that does not pass credentials. The only use of this is to be placed in front of a mandatory &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend. This allows the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend to skip negotiation requests and therefor reduce the load on the backend.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16794</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16794"/>
		<updated>2023-03-11T13:16:21Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Update: Moved backends block to the end of the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;role&#039;&#039; may have any combination of the [[#Common properties|common properties]] set. In addition it may contain different types of sub-tags:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sub tag !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt; || Options passed to the used [[#Backends|backend]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;http-headers /&amp;gt;&amp;lt;/code&amp;gt; || Standard HTTP headers block. Is used if the &#039;&#039;role&#039;&#039; matches.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;acl /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common properties ==&lt;br /&gt;
All roles support the following common properties. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to match all &#039;&#039;web/&#039;&#039; domain clients (default). See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to not match all &#039;&#039;web/&#039;&#039; domain clients. See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is allowed to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to allow all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is denied to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to deny all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matching ==&lt;br /&gt;
Matching is performed before the backend is asked to check a specific client. While matching a client is checked to have certain features (e.g. to use a specific HTTP method). If it does, the backend is consulted. If not a &#039;&#039;no-match&#039;&#039; is returned and the next role is tried.&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16793</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16793"/>
		<updated>2023-03-11T13:15:21Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Overview */ Feature: Added infos on what sub tags might be used&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;role&#039;&#039; may have any combination of the [[#Common properties|common properties]] set. In addition it may contain different types of sub-tags:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Sub tag !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;option /&amp;gt;&amp;lt;/code&amp;gt; || Options passed to the used [[#Backends|backend]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;http-headers /&amp;gt;&amp;lt;/code&amp;gt; || Standard HTTP headers block. Is used if the &#039;&#039;role&#039;&#039; matches.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;acl /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-failed-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-action /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;&amp;lt;nowiki /&amp;gt;on-deny-argument /&amp;gt;&amp;lt;/code&amp;gt; || Experimental. Do not use. See [[#Client altering|altering]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common properties ==&lt;br /&gt;
All roles support the following common properties. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to match all &#039;&#039;web/&#039;&#039; domain clients (default). See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to not match all &#039;&#039;web/&#039;&#039; domain clients. See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is allowed to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to allow all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is denied to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to deny all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matching ==&lt;br /&gt;
Matching is performed before the backend is asked to check a specific client. While matching a client is checked to have certain features (e.g. to use a specific HTTP method). If it does, the backend is consulted. If not a &#039;&#039;no-match&#039;&#039; is returned and the next role is tried.&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16792</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16792"/>
		<updated>2023-03-11T13:06:58Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Common options */ Update: Renamed to Common properties to avoid confusion with &amp;lt;option /&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common properties ==&lt;br /&gt;
All roles support the following common properties. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to match all &#039;&#039;web/&#039;&#039; domain clients (default). See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to not match all &#039;&#039;web/&#039;&#039; domain clients. See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is allowed to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to allow all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is denied to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to deny all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matching ==&lt;br /&gt;
Matching is performed before the backend is asked to check a specific client. While matching a client is checked to have certain features (e.g. to use a specific HTTP method). If it does, the backend is consulted. If not a &#039;&#039;no-match&#039;&#039; is returned and the next role is tried.&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16791</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16791"/>
		<updated>2023-03-11T13:03:58Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Common options */ Update: Updated list some more&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common options ==&lt;br /&gt;
All roles support the following common options. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to match all &#039;&#039;web/&#039;&#039; domain clients (default). See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || May be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to not match all &#039;&#039;web/&#039;&#039; domain clients. See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is allowed to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to allow all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || List of &#039;&#039;actions&#039;&#039; the backend is denied to use. Or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to deny all. See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matching ==&lt;br /&gt;
Matching is performed before the backend is asked to check a specific client. While matching a client is checked to have certain features (e.g. to use a specific HTTP method). If it does, the backend is consulted. If not a &#039;&#039;no-match&#039;&#039; is returned and the next role is tried.&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16790</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16790"/>
		<updated>2023-03-11T12:53:46Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Feature: Added stub about matching&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common options ==&lt;br /&gt;
All roles support the following common options. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See [[#Matching|matching]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matching ==&lt;br /&gt;
Matching is performed before the backend is asked to check a specific client. While matching a client is checked to have certain features (e.g. to use a specific HTTP method). If it does, the backend is consulted. If not a &#039;&#039;no-match&#039;&#039; is returned and the next role is tried.&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16789</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16789"/>
		<updated>2023-03-11T12:49:32Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Client altering */ Feature: Added list of actions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common options ==&lt;br /&gt;
All roles support the following common options. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource. Each &#039;&#039;action&#039;&#039; may take an &#039;&#039;argument&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The following actions are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Action !! Argument type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt; || none || Do not alter the client at all. This is the default.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rewrite&amp;lt;/code&amp;gt; || a valid URL || Reroute the client to a different mount point. This may skip additional authentication or lead to unexpected results. It is recommended to use &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; when possible.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt; || a valid URL || Generic redirect. Redirects the client by sending a (HTTP) redirect. On success the client will come back on the corresponding new mount point. This can also be used to redirect a client to a different server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_see_other&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a &amp;quot;See other&amp;quot; status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_temporary&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a temporary redirect status. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;redirect_permanent&amp;lt;/code&amp;gt; || a valid URL || Redirects the client with a permanent redirect status. In addition to redirecting the client for this request it asks the client to follow the same redirect again for any future request. Otherwise same as &amp;lt;code&amp;gt;redirect&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;send_error&amp;lt;/code&amp;gt; || a valid and known UUID || Sends the client one of the stock error messages.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16788</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16788"/>
		<updated>2023-03-11T12:40:45Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Feature: Added stub about client altering.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common options ==&lt;br /&gt;
All roles support the following common options. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || See [[#Client altering|altering]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Client altering ==&lt;br /&gt;
Client altering is a way of altering the request or client state of a client. This is most commonly used to redirect the client to another resource.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16787</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16787"/>
		<updated>2023-03-11T12:36:37Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Common options */ Feature: Finished documenting allow-/deny-* properties&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common options ==&lt;br /&gt;
All roles support the following common options. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || See altering.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || See altering.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || List of allowed HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || List of denied HTTP methods commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || List of allowed admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || List of denied admin commands. Can be set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; to set the policy to deny.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16786</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16786"/>
		<updated>2023-03-11T12:33:55Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Backends */ Update: Updated formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;anonymous&amp;lt;/code&amp;gt; || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;static&amp;lt;/code&amp;gt; || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;legacy-password&amp;lt;/code&amp;gt; || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;htpasswd&amp;lt;/code&amp;gt; || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;enforce-auth&amp;lt;/code&amp;gt; || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common options ==&lt;br /&gt;
All roles support the following common options. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || See altering.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || See altering.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16785</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16785"/>
		<updated>2023-03-11T12:33:13Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Common options */ Update: Updated table and added some basic infos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| anonymous || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| static || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| legacy-password || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| url || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| htpasswd || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| enforce-auth || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common options ==&lt;br /&gt;
All roles support the following common options. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;management-url&amp;lt;/code&amp;gt; || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; backend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;method&amp;lt;/code&amp;gt; || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-method&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-web&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-admin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;match-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nomatch-origin&amp;lt;/code&amp;gt; || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-alter&amp;lt;/code&amp;gt; || See altering.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;may-not-alter&amp;lt;/code&amp;gt; || See altering.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-method&amp;lt;/code&amp;gt; || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-method&amp;lt;/code&amp;gt; || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-admin&amp;lt;/code&amp;gt; || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-admin&amp;lt;/code&amp;gt; || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; allows access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;deny-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to forbid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-web&amp;lt;/code&amp;gt; || When set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; denies access to the &#039;&#039;web/&#039;&#039; domain. Use &amp;lt;code&amp;gt;allow-web=&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; to allow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;allow-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;allow-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deny-all&amp;lt;/code&amp;gt; || Same as setting all other &amp;lt;code&amp;gt;deny-&amp;lt;/code&amp;gt;* keys to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connections-per-user&amp;lt;/code&amp;gt; || Maximum number of connections per user or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;connection-duration&amp;lt;/code&amp;gt; || Maximum time a connection is allowed to continue in seconds or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for unlimited. This might not be supported for connections other than listeners.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16784</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16784"/>
		<updated>2023-03-11T12:03:35Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Feature: Added list on common role properties&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| anonymous || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| static || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| legacy-password || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| url || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| htpasswd || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| enforce-auth || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Common options ==&lt;br /&gt;
All roles support the following common options. They are passed as XML properties on the role&#039;s tag.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Description&lt;br /&gt;
|-&lt;br /&gt;
| type || The name of one of the backends.&lt;br /&gt;
|-&lt;br /&gt;
| name || The name of this role. This is used e.g. in the log files.&lt;br /&gt;
|-&lt;br /&gt;
| management-url || A fully qualified URL to a place an admin can manage this specific backend. This is most useful for backends that interact with a backend server such as the &#039;&#039;url&#039;&#039; backend.&lt;br /&gt;
|-&lt;br /&gt;
| method || Obsolete. Use &#039;&#039;match-method&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| match-method || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| nomatch-method || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| match-web || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| nomatch-web || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| match-admin || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| nomatch-admin || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| match-origin || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| nomatch-origin || See matching.&lt;br /&gt;
|-&lt;br /&gt;
| may-alter || See altering.&lt;br /&gt;
|-&lt;br /&gt;
| may-not-alter || See altering.&lt;br /&gt;
|-&lt;br /&gt;
| allow-method || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| deny-method || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| allow-admin || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| deny-admin || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| allow-web || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| deny-web || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| allow-all || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| deny-all || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| connections-per-user || See restricting.&lt;br /&gt;
|-&lt;br /&gt;
| connection-duration || See restricting.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16783</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16783"/>
		<updated>2023-03-11T11:46:14Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Feature: Added list of current auth backends&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;br /&gt;
Note: More steps may be added in later versions.&lt;br /&gt;
&lt;br /&gt;
== Backends ==&lt;br /&gt;
The following backends are defined:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Backend !! Description&lt;br /&gt;
|-&lt;br /&gt;
| anonymous || This backend matches all clients. Might be renamed in future versions.&lt;br /&gt;
|-&lt;br /&gt;
| static || This backend matches one username and checks against a password.&lt;br /&gt;
|-&lt;br /&gt;
| legacy-password || Special backend used for ICY sources.&lt;br /&gt;
|-&lt;br /&gt;
| url || Forwards the request to a backend server (normally via HTTP or HTTPS).&lt;br /&gt;
|-&lt;br /&gt;
| htpasswd || Uses a file based database of users and passwords.&lt;br /&gt;
|-&lt;br /&gt;
| enforce-auth || Rejects any clients that does not provide credentials. Returns no-match for any client that does.&lt;br /&gt;
|}&lt;br /&gt;
Note: More backends may be added in later versions.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16782</id>
		<title>Icecast Server/2.5 Authentication</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/2.5_Authentication&amp;diff=16782"/>
		<updated>2023-03-11T11:38:12Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Initial stub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Icecast 2.5.x Authentication =&lt;br /&gt;
== Overview ==&lt;br /&gt;
Icecast 2.5.x features a new authentication system. This system comes with many improvements and more flexibility. All versions of the Icecast 2.5.x series can read both 2.4.x and 2.5.x style configuration. This includes mixed configuration.&lt;br /&gt;
&lt;br /&gt;
While Icecast 2.4.x used a set of global users and one per-mount authentication backend Icecast 2.5.x features a authentication process that allows a request to pass a number of backends before being matched. This improvements allows more complex setups. For example It is now possible to define common backends and exceptions for specific users on a per-mount point basis. Each such a step where a client is checked using a backend is called a &#039;&#039;role&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For reach client the &#039;&#039;roles&#039;&#039; for each of those elements are tried in order:&lt;br /&gt;
# Per listen socket &#039;&#039;roles&#039;&#039; (effective listen sockets)&lt;br /&gt;
# Per type normal mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Per type default mount point &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Global &#039;&#039;roles&#039;&#039;&lt;br /&gt;
# Client is rejected.&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Git_workflow&amp;diff=16773</id>
		<title>Icecast Server/Git workflow</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Git_workflow&amp;diff=16773"/>
		<updated>2021-04-12T22:23:37Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Update: And changed the info URLs as well&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Icecast project recently migrated from Subversion to Git, this page outlines how to get started with it!&lt;br /&gt;
&lt;br /&gt;
== Repositories ==&lt;br /&gt;
&lt;br /&gt;
The repositories are at [https://git.xiph.org git.xiph.org] and are mirrored to [https://github.com/xiph GitHub]. All repository names start with &amp;quot;icecast-&amp;quot; for clarity.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Anonymous access URL&lt;br /&gt;
!SSH URL (only project members)&lt;br /&gt;
!Comments&lt;br /&gt;
|-&lt;br /&gt;
|[https://gitlab.xiph.org/xiph/icecast-server Icecast server]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-server.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-server.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://gitlab.xiph.org/xiph/icecast-ices IceS]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-ices.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-ices.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://gitlab.xiph.org/xiph/icecast-libshout libshout]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-libshout.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-libshout.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://gitlab.xiph.org/xiph/icecast-directory Icecast directory]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-directory.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-directory.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|As seen running on http://dir.xiph.org - soon™&lt;br /&gt;
|-&lt;br /&gt;
|[https://gitlab.xiph.org/xiph/icecast-common Icecast shared code]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-common.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-common.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|No need to check out separately, see below.&lt;br /&gt;
|-&lt;br /&gt;
|[https://gitlab.xiph.org/xiph/icecast-m4 Icecast shared autofoo]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-m4.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-m4.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|No need to check out separately, see below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The repositories were migrated with their full history, but for reference the old subversion repository structure remains [https://trac.xiph.org/browser/icecast/ browseable] and all subprojects can be checked out below &amp;lt;nowiki&amp;gt;http://svn.xiph.org/icecast/trunk/&amp;lt;/nowiki&amp;gt;&amp;lt;projectname&amp;gt;. This might be useful in case of some branches (not all were migrated) and no longer maintained projects that were not migrated to Git.&lt;br /&gt;
&lt;br /&gt;
== Cloning the Repo ==&lt;br /&gt;
First you need to clone the Git repository, because we use submodules, these should also be cloned, do to this, run:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone --recursive https://gitlab.xiph.org/xiph/icecast-server.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your Git version (&amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt;) is lower than 1.6.5, do:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone https://gitlab.xiph.org/xiph/icecast-server.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd icecast-server&lt;br /&gt;
 git submodule update --init&lt;br /&gt;
&lt;br /&gt;
== Initializing the Submodules ==&lt;br /&gt;
The steps we did above, for cloning, initialized the Submodules, &amp;lt;i&amp;gt;but&amp;lt;/i&amp;gt; if you want to do any changes to them&lt;br /&gt;
and push them back to the remote repository, we need to set them to a specific branch, in this case, master.&lt;br /&gt;
&lt;br /&gt;
First of all, checkout the master branch, depending on your git version, your modules may be initialized in a detached HEAD state.&lt;br /&gt;
&lt;br /&gt;
  git submodule foreach git checkout master&lt;br /&gt;
&lt;br /&gt;
(If your git version does not support this, &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into each submodule and run &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Pushing changes to a remote Server ==&lt;br /&gt;
When you are done with some super cool new feature, or even while working on it, you may want to push your current state to the remote repository, so others can test it and give you&lt;br /&gt;
some Feedback!&lt;br /&gt;
For this example let&#039;s assume you&#039;ve built an ACL, therefore changed something in httpp.c which is in the common submodule and changed a lot of stuff in parent repository.&lt;br /&gt;
&lt;br /&gt;
First you need to commit the changed you made in the common submodule, so &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into it, and do&lt;br /&gt;
&lt;br /&gt;
 git status&lt;br /&gt;
&lt;br /&gt;
This will list you the changes you made, each change you want to have in the commit needs to be added, let&#039;s assume (which is the most common case) you want to commit all changes.&lt;br /&gt;
You could either do &amp;lt;code&amp;gt;git add .&amp;lt;/code&amp;gt; or even shorter:&lt;br /&gt;
&lt;br /&gt;
 git commit -a&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; option will add all changed or deleted files, but not add any untracked files.&lt;br /&gt;
&lt;br /&gt;
Now enter a meaningful commit message, the first line should be a rough summary, followed by two newlines and a more verbose description. Less is not more in this case, that’s what the summary is for.&lt;br /&gt;
&lt;br /&gt;
Ok now it&#039;s time to push the changes to the remote server, if this is the first time you do this, you might need to set the origin url, because it defaults to a http(s) one, so that people without ssh access can clone the repository and submodules too, but for cloning you want to use ssh. Let’s set the remote origin like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git remote set-url origin ssh://git@gitlab.xiph.org/xiph/icecast-common.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now push the changes to the remote location:&lt;br /&gt;
&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
This tells git to push your copy of the master branch to the remote location origin (that we’ve just set to the right url).&lt;br /&gt;
&lt;br /&gt;
Ok now that we cared about the submodule, let&#039;s &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; back into the parent repository, and commit the changes we made there:&lt;br /&gt;
&lt;br /&gt;
 git commit -a&lt;br /&gt;
&lt;br /&gt;
Now enter a meaningful commit message. (Yes, I sound like a broken record, but this is important)&lt;br /&gt;
&lt;br /&gt;
Push the stuff to the remote:&lt;br /&gt;
&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
(If you are on a different branch than master, you probably want to replace master with the branch you are on, obviously, or just do &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;NOTE&amp;lt;/b&amp;gt;: Even if you hadn&#039;t changed anything in the parent repository but just in the submodule repository, you would need to commit the change of the version of the submodule to the parent repository. If you just had updated the httpp.c you still would needed to do &amp;lt;code&amp;gt;git commit -a -m &amp;quot;Update commons to recent version for latest httpp changes&amp;quot;&amp;lt;/code&amp;gt;, and push it, to make the parent repository point to the right submodule version.&lt;br /&gt;
&lt;br /&gt;
== Updating the local repository ==&lt;br /&gt;
Let&#039;s say someone else committed something and pushed it, and you want to update your local copy to the one of the remote. Let&#039;s assume you have nothing changed, so you are just a bit behind in history, then it is a simple as:&lt;br /&gt;
&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
 git submodule update&lt;br /&gt;
&lt;br /&gt;
to make sure submodules are up to date too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If something changed, then git needs to reconcile the local changes and the remote changes. We prefer to avoid merge commits, unless there is a larger branch developed feature.&lt;br /&gt;
&lt;br /&gt;
This can be either accomplished by always running:&lt;br /&gt;
&lt;br /&gt;
 git pull --rebase&lt;br /&gt;
&lt;br /&gt;
Or by setting up git to do this automatically for you. The following passage is taken verbatim from [https://coderwall.com/p/tnoiug/rebase-by-default-when-doing-git-pull Marcin Kulik&#039;s blog post on the same topic]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In git &amp;gt;= 1.7.9:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 git config --global pull.rebase true&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In git &amp;lt; 1.7.9:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 git config --global branch.autosetuprebase always&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The latter has the effect of automatically adding branch.&amp;lt;name&amp;gt;.rebase true for each checked out local branch that is tracking an upstream branch to the repository config file.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that if you have both options set (not really recommended) then branch.&amp;lt;name&amp;gt;.rebase true that is automatically added for each branch takes precedence over global pull.rebase true.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category: Icecast]]&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Icecast_Server/Git_workflow&amp;diff=16772</id>
		<title>Icecast Server/Git workflow</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Icecast_Server/Git_workflow&amp;diff=16772"/>
		<updated>2021-04-12T22:16:27Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Update: Corrected URLs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Icecast project recently migrated from Subversion to Git, this page outlines how to get started with it!&lt;br /&gt;
&lt;br /&gt;
== Repositories ==&lt;br /&gt;
&lt;br /&gt;
The repositories are at [https://git.xiph.org git.xiph.org] and are mirrored to [https://github.com/xiph GitHub]. All repository names start with &amp;quot;icecast-&amp;quot; for clarity.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Anonymous access URL&lt;br /&gt;
!SSH URL (only project members)&lt;br /&gt;
!Comments&lt;br /&gt;
|-&lt;br /&gt;
|[https://git.xiph.org/?p=icecast-server.git Icecast server]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-server.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-server.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://git.xiph.org/?p=icecast-ices.git IceS]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-ices.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-ices.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://git.xiph.org/?p=icecast-libshout.git libshout]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-libshout.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-libshout.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[https://git.xiph.org/?p=icecast-directory.git Icecast directory]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-directory.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-directory.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|As seen running on http://dir.xiph.org - soon™&lt;br /&gt;
|-&lt;br /&gt;
|[https://git.xiph.org/?p=icecast-common.git Icecast shared code]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-common.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-common.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|No need to check out separately, see below.&lt;br /&gt;
|-&lt;br /&gt;
|[https://git.xiph.org/?p=icecast-m4.git Icecast shared autofoo]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://gitlab.xiph.org/xiph/icecast-m4.git&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;ssh://git@gitlab.xiph.org/xiph/icecast-m4.git&amp;lt;/code&amp;gt;&lt;br /&gt;
|No need to check out separately, see below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The repositories were migrated with their full history, but for reference the old subversion repository structure remains [https://trac.xiph.org/browser/icecast/ browseable] and all subprojects can be checked out below &amp;lt;nowiki&amp;gt;http://svn.xiph.org/icecast/trunk/&amp;lt;/nowiki&amp;gt;&amp;lt;projectname&amp;gt;. This might be useful in case of some branches (not all were migrated) and no longer maintained projects that were not migrated to Git.&lt;br /&gt;
&lt;br /&gt;
== Cloning the Repo ==&lt;br /&gt;
First you need to clone the Git repository, because we use submodules, these should also be cloned, do to this, run:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone --recursive https://gitlab.xiph.org/xiph/icecast-server.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your Git version (&amp;lt;code&amp;gt;git --version&amp;lt;/code&amp;gt;) is lower than 1.6.5, do:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone https://gitlab.xiph.org/xiph/icecast-server.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd icecast-server&lt;br /&gt;
 git submodule update --init&lt;br /&gt;
&lt;br /&gt;
== Initializing the Submodules ==&lt;br /&gt;
The steps we did above, for cloning, initialized the Submodules, &amp;lt;i&amp;gt;but&amp;lt;/i&amp;gt; if you want to do any changes to them&lt;br /&gt;
and push them back to the remote repository, we need to set them to a specific branch, in this case, master.&lt;br /&gt;
&lt;br /&gt;
First of all, checkout the master branch, depending on your git version, your modules may be initialized in a detached HEAD state.&lt;br /&gt;
&lt;br /&gt;
  git submodule foreach git checkout master&lt;br /&gt;
&lt;br /&gt;
(If your git version does not support this, &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into each submodule and run &amp;lt;code&amp;gt;git checkout master&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Pushing changes to a remote Server ==&lt;br /&gt;
When you are done with some super cool new feature, or even while working on it, you may want to push your current state to the remote repository, so others can test it and give you&lt;br /&gt;
some Feedback!&lt;br /&gt;
For this example let&#039;s assume you&#039;ve built an ACL, therefore changed something in httpp.c which is in the common submodule and changed a lot of stuff in parent repository.&lt;br /&gt;
&lt;br /&gt;
First you need to commit the changed you made in the common submodule, so &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into it, and do&lt;br /&gt;
&lt;br /&gt;
 git status&lt;br /&gt;
&lt;br /&gt;
This will list you the changes you made, each change you want to have in the commit needs to be added, let&#039;s assume (which is the most common case) you want to commit all changes.&lt;br /&gt;
You could either do &amp;lt;code&amp;gt;git add .&amp;lt;/code&amp;gt; or even shorter:&lt;br /&gt;
&lt;br /&gt;
 git commit -a&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; option will add all changed or deleted files, but not add any untracked files.&lt;br /&gt;
&lt;br /&gt;
Now enter a meaningful commit message, the first line should be a rough summary, followed by two newlines and a more verbose description. Less is not more in this case, that’s what the summary is for.&lt;br /&gt;
&lt;br /&gt;
Ok now it&#039;s time to push the changes to the remote server, if this is the first time you do this, you might need to set the origin url, because it defaults to a http(s) one, so that people without ssh access can clone the repository and submodules too, but for cloning you want to use ssh. Let’s set the remote origin like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git remote set-url origin ssh://git@gitlab.xiph.org/xiph/icecast-common.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now push the changes to the remote location:&lt;br /&gt;
&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
This tells git to push your copy of the master branch to the remote location origin (that we’ve just set to the right url).&lt;br /&gt;
&lt;br /&gt;
Ok now that we cared about the submodule, let&#039;s &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; back into the parent repository, and commit the changes we made there:&lt;br /&gt;
&lt;br /&gt;
 git commit -a&lt;br /&gt;
&lt;br /&gt;
Now enter a meaningful commit message. (Yes, I sound like a broken record, but this is important)&lt;br /&gt;
&lt;br /&gt;
Push the stuff to the remote:&lt;br /&gt;
&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
(If you are on a different branch than master, you probably want to replace master with the branch you are on, obviously, or just do &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;NOTE&amp;lt;/b&amp;gt;: Even if you hadn&#039;t changed anything in the parent repository but just in the submodule repository, you would need to commit the change of the version of the submodule to the parent repository. If you just had updated the httpp.c you still would needed to do &amp;lt;code&amp;gt;git commit -a -m &amp;quot;Update commons to recent version for latest httpp changes&amp;quot;&amp;lt;/code&amp;gt;, and push it, to make the parent repository point to the right submodule version.&lt;br /&gt;
&lt;br /&gt;
== Updating the local repository ==&lt;br /&gt;
Let&#039;s say someone else committed something and pushed it, and you want to update your local copy to the one of the remote. Let&#039;s assume you have nothing changed, so you are just a bit behind in history, then it is a simple as:&lt;br /&gt;
&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
 git submodule update&lt;br /&gt;
&lt;br /&gt;
to make sure submodules are up to date too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If something changed, then git needs to reconcile the local changes and the remote changes. We prefer to avoid merge commits, unless there is a larger branch developed feature.&lt;br /&gt;
&lt;br /&gt;
This can be either accomplished by always running:&lt;br /&gt;
&lt;br /&gt;
 git pull --rebase&lt;br /&gt;
&lt;br /&gt;
Or by setting up git to do this automatically for you. The following passage is taken verbatim from [https://coderwall.com/p/tnoiug/rebase-by-default-when-doing-git-pull Marcin Kulik&#039;s blog post on the same topic]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In git &amp;gt;= 1.7.9:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 git config --global pull.rebase true&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In git &amp;lt; 1.7.9:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 git config --global branch.autosetuprebase always&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The latter has the effect of automatically adding branch.&amp;lt;name&amp;gt;.rebase true for each checked out local branch that is tracking an upstream branch to the repository config file.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that if you have both options set (not really recommended) then branch.&amp;lt;name&amp;gt;.rebase true that is automatically added for each branch takes precedence over global pull.rebase true.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category: Icecast]]&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2021&amp;diff=16763</id>
		<title>Summer of Code 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2021&amp;diff=16763"/>
		<updated>2021-03-21T13:22:25Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: /* Solution / Task */ Fix: Corrected formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This year Xiph.org is focusing on the rav1e AV1 encoder for its GSoC participation. Both video and still images are currently hot topics, especially with the recent support of AVIF within browsers.&lt;br /&gt;
&lt;br /&gt;
Below you&#039;ll find the description for the following GSoC project ideas around the rav1e project.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about a particular idea, please get in touch with the people listed under &amp;quot;possible mentors&amp;quot;. While no guarantee, that the person will be the actual mentor for the task, they know it and will be happy to answer your questions. Please join #xiph in Freenode IRC for more. If you don&#039;t have IRC set up you can easily connect from your [http://webchat.freenode.net/?channels=%23xiph web browser].&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Detailed Project Descriptions ==&lt;br /&gt;
&lt;br /&gt;
These ideas were suggested by various members of the developer community as projects that would be beneficial and which we feel we can mentor. Students should feel free to select one of these, develop a variation, or propose their own ideas. Here, ideally.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Grain synthesis implementation inside of the rav1e encoder ===&lt;br /&gt;
&lt;br /&gt;
Grain synthesis is using the idea of modeling noise temporally and spatially using noise estimation.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Keeping high frequency detail and noise(dithering, camera noise, grain) using traditional encoder techniques is very expensive in terms of bitrate allocation, and some tools implemented to take care of that problem can create additional artifacts that are not pleasing to the general viewer experience, or are detrimental to the fidelity of the image.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
Implementing grain synthesis that models the noise parameters of a video, and applies the generated noise parameters during the decoding process, saving very high amounts of bitrates and providing a very high subjective visual fidelity and appeal.&lt;br /&gt;
&lt;br /&gt;
Making it faster than other forms of grain synthesis via smarter algorithms and using various forms of threading to speed up its application, such as tile threading and integration with rav1e-by-gop, making it possible to use as part of any encoding workflow. This will make sure adoption of the technique becomes as widespread as possible.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust and C, and must have a light background in general visual media encoding, such as video and image compression.&lt;br /&gt;
&lt;br /&gt;
Difficulty: Medium.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]] &amp;amp;&amp;amp; XX&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Adaptive quantization ===&lt;br /&gt;
&lt;br /&gt;
Adaptive quantization is the process of an algorithm trying to efficiently allocate bitrate among the various macroblocks found in a frame by varying the quantizer across each of them according to different visual targets.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Often times, an encoder does not know about the best way to allocate the bitrate budget across a frame, and may overspend a considerable amount of bitrate to regions that might not benefit from a low quantizer(low amounts of distortion, so less compression) while not giving enough bitrate to zones that might actually need it. This can even cause issues temporally, as bitrate allocation within a group of frames(GOPs) may be skewed towards more complex and high motion frames, while leaving other frames with barely any bitrate to work with, creating visual artifacts such as blocking and banding.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
Implementing 1-3 forms on adaptive quantization either based on variance, complexity and/or variance variance with a bias in low contrast frames in rav1e. This will make bitrate allocation more efficient, and avoid bitrate overspending in areas which either need the lower quantizer to avoid the presence of lower quality frames that might detract from the viewer experience, and make objective/subjective quality targets easier to achieved. The combination of powerful adaptive quantization and grain synthesis would allow for a higher subjective quality viewing experience at lower bitrates while potentially lowering computational complexity by a good margin.&lt;br /&gt;
&lt;br /&gt;
Making a smart adaptive AQ mode in which the encoder chooses which adaptive quantization algorithm to use depending on the scene featured in a GOP. Potentially difficult.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust and C, and having a background in general visual media encoding, such as video and image compression is recommended.&lt;br /&gt;
&lt;br /&gt;
Difficulty: Medium to high depending on which targets the student chooses to follow.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]] &amp;amp;&amp;amp; XX&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Integrate rav1e-by-gop into rav1e encoder ===&lt;br /&gt;
&lt;br /&gt;
rav1e-by-gop is an extended command line encoder that provides additional encoding strategies such as by-gop parallel encoding across multiple machines.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
rav1e-by-gop is currently a command line program, some users might want to enjoy on the extended features from other programs even if they do not always belong to an encoder.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
make rav1e-by-gop expose the same API of the normal rav1e to make easy to use the multiple machine encoding features from other programs.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust or C programming.&amp;lt;br&amp;gt;&lt;br /&gt;
Video knowledge is not strictly necessary, however a basic understanding of the concepts is vastly beneficial.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Tdaede]] [[User:Lu_zero]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Visual metric targeting in rav1e-by-gop ===&lt;br /&gt;
&lt;br /&gt;
Objective metrics are used to evaluate an encoder&#039;s performance in a diverse set of scenarios. Different metrics such as PSNR, SSIM, DSSIM, VMAF and some closed no-reference metrics are used in the field to record encoder performance changes across versions trying to correlate closely with human perception.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Classical methods of rate control such as ABR(Average BitRate), fixed quantizers and even CRF(Constant Rate Factor) have the issue of not targeting a certain quality level. This can result in starved encodes where the bitrate budget has to be kept low to stay watchable by the viewer without interruption, leading to scenes that have exceptionally good visual targets by overspending bitrate, and scenes that have very poor visual appeal by having too little bitrate, detracting from the viewer experience entirely. More advanced forms of rate control like CRF help somewhat, but they still have the issue of having to overshoot so the lower quality scenes do not suffer, and do not adapt to the different type of content encoded, resulting in variable quality encodes.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
Implementing visual metric targeting based on VMAF(mainly used for video) and butteraugli(mainly used for images) as part of rav1e-by-gop as a secondary rate control option. &lt;br /&gt;
&lt;br /&gt;
The application of visual metric targeting in rav1e-by-gop would take advantage of its adaptive keyframe placement and smart scene detection to its fullest. &lt;br /&gt;
This would allow for the best rate control possible, as short scenes in the length of 1-15s are where visual metrics such as VMAF shine the most. The idea is to encode first with a very fast speed preset in the encoder to gauge the quality at a prefixed quantizer. If the visual metric target set is not achieved, the encoder tries again once or twice until it gets the right result. &lt;br /&gt;
With this method, instead of targeting an average of bitrate, you would target a visual score, getting higher efficiency and higher subjective quality. This would also be advantageous in terms of encoding time spent, as encoder complexity could be dialed back while keeping overall efficiency the same or higher, with efficiency being a function of both encoder efficiency and rate control.&lt;br /&gt;
&lt;br /&gt;
Implementing butteraugli quality targeting as an option using rav1e for AVIF images. Since visual quality requirements are considerably higher for intra only(image only) media, keeping high visual fidelity is even more important than video compression. Quality targeting iterations would also be quite useful here.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust and C. General interest in image and video coding is recommended&lt;br /&gt;
&lt;br /&gt;
Difficulty: Medium.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]] &amp;amp;&amp;amp; XX&lt;br /&gt;
----&lt;br /&gt;
=== Improved cluster support for Icecast ===&lt;br /&gt;
Icecast servers deliver streams to million of users simultaneous worldwide. Each instance can handle many thousand clients at the same time. However redundancy, scalability, hardware requirement, and most importantly network connectivity often requires to use several instances in a professional deployment.&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
Icecast is designed as a standalone application. While basic support exists (such as master-slave mode) support for clusters can be improved. At this point a cluster level mangement instance seems to be missing.&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
A solution for cluster management should be developed. A cluster controller should be implemented as well as support within Icecast. The focus is on Icecast itself at this point. However the controler should at least demonstrate all features implemented in Icecast.&lt;br /&gt;
Possible features:&lt;br /&gt;
* Automatic master-slave, and relay configuration.&lt;br /&gt;
* Load distribution.&lt;br /&gt;
* Statistic data collection.&lt;br /&gt;
* Log collection.&lt;br /&gt;
* Node monitoring.&lt;br /&gt;
* Signalling of cluster state to external components (e.g. for automatic cluster scaling)&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
The student should be familiar with C. A basic understanding of HTTP, as well as other web technologies is helpful. Knowledge of visualisation technologies is &#039;&#039;&#039;not&#039;&#039;&#039; required.&lt;br /&gt;
&lt;br /&gt;
Complexity: Medium to high.&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
[[User:phschafft|phschafft]] (teamed with someone else)&lt;br /&gt;
----&lt;br /&gt;
=== Development of advanced content navigation in Icecast ===&lt;br /&gt;
Icecast currently supports navigation of listeners between different streams. This was developed mostly for fallbacks (providing alternative content if the primary source fails). This support should be improved to provide better interaction with contents.&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
The current implementation is designed to work very robust for source side events (such as fallbacks). However it fails for two requirements:&lt;br /&gt;
* Listener initiated interaction such as adaptive streaming.&lt;br /&gt;
* Exact timing.&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
The current concept is capable of being extended to the new requirements. Code should be written to add the new features on the existing (and well proven) infrastructure. The following additional features would be needed:&lt;br /&gt;
Detection and matching of features within and between streams. This is required for any kind of synchronisation.&lt;br /&gt;
* Executing operations exactly at detached features.&lt;br /&gt;
* Adding ways to communicate features and operations between listener and Icecast, source and Icecast, and between multiple&lt;br /&gt;
* Icecast instances of the same cluster.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
The student should be familiar with C. A basic understanding of HTTP, Ogg, and Matroska/WebM is helpful.&lt;br /&gt;
&lt;br /&gt;
Complexity: Medium to high.&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
[[User:phschafft|phschafft]] (teamed with someone else)&lt;br /&gt;
----&lt;br /&gt;
=== Uniform return channel for Icecast ===&lt;br /&gt;
Icecast supports broadcasting media to several thousand listeners per instance. In a classic setup this is a one way process from the source (such as a radio or TV studio) to the consumer. However it is sometimes useful to provide a return channel, such as for implementing polls.&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
Returning information from the listener to the source is part of classic media. The need has become more relevant with the development of more interactive ways of the web. Several technologies have been used to implement this including asking the listeners to call in, send e-mails, or comment on a web page.&lt;br /&gt;
&lt;br /&gt;
Classic ways to implement feedback include a media break and are only loosely bound to the forward channel.&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
A uniform return channel should be implemented that allows several types of data to be send from the listener to the source. This includes three major parts:&lt;br /&gt;
* Improved session handling (both for listeners and for sources)&lt;br /&gt;
* Implementing a return channel for listeners.&lt;br /&gt;
* Implementing a return channel for sources.&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
The student should be familiar with C and HTTP.&lt;br /&gt;
&lt;br /&gt;
Complexity: Medium.&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
[[User:phschafft|phschafft]] (teamed with someone else)&lt;br /&gt;
----&lt;br /&gt;
=== (Live) listener statistics for Icecast ===&lt;br /&gt;
Icecast supports writing a basic access.log that includes client information as well as connection time. In addition a playlist log is supported, and live statistic data via the STATS interface.&lt;br /&gt;
&lt;br /&gt;
A standard solution to use this data for detailed listener statistics is missing.&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
In the current solution there is no off the shelf solution to process the statistic data provided by Icecast. The best available solutions are standard access log analysers. A solution for live statistics is completely missing. Statistics taking content into account is also absent.&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
To improve the situation two major steps must be accomplished:&lt;br /&gt;
* The statistic interface of Icecast must be enhanced to provide the required information.&lt;br /&gt;
* A solution that analyses this data must be developed. The focus is on this part.&lt;br /&gt;
This project allows for a wide range of ideas from the participants to be incorporated. There is not yet and specific technical direction set. Evaluating different options is the first part of the project.&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
The student should be familiar with C. A basic understanding of log analysis, and monitoring and/or data collecting systems is helpful.&lt;br /&gt;
&lt;br /&gt;
Difficulty: Medium depending on which targets the student chooses to follow.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
[[User:phschafft|phschafft]] (teamed with someone else)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Support WebAssembly SIMD in rav1e ===&lt;br /&gt;
&lt;br /&gt;
rav1e supports the [https://wasi.dev/ WASI] platform and it has its javascript API bindings relying on it.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
The WebAssembly SIMD is getting [https://github.com/WebAssembly/simd closer] to be available, we should support it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
* Implement the dispatch logic for WASM SIMD as done already for x86_64 and aarch64.&lt;br /&gt;
* Implement the Sum of absolute difference (SAD) and Sum of absolute transformed differences (SATD)&lt;br /&gt;
* Implement the inverse transforms (idct, iadst, identity, ...)&lt;br /&gt;
* Implement the motion compensation.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust, WASM, wasmtime and related tools. Knowledge of x86 or arm assembly is not needed but will help.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Implement butteraugli in av-metrics  ===&lt;br /&gt;
&lt;br /&gt;
av-metrics is a collection of video quality metrics, [https://github.com/google/butteraugli butteraugli] is a promising psychovisual similarity metric. &lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Currently the implementation of butteraugli exists as [https://github.com/google/butteraugli stand-alone] codebase. The code is readable, but it could be faster. &lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
* Implement rust bindings to the reference butteraugli.&lt;br /&gt;
* Implement butteraugli in pure rust within av-metrics.&lt;br /&gt;
* Write integration and unit tests to make sure the implementation does not diverge&lt;br /&gt;
* Write criterion benchmarks&lt;br /&gt;
* Implement x86_64 or aarch64 optimizations for it, using intrinsics or plain ASM.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust, C and C++. Knowledge of x86 or arm assembly is welcome.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Deploy Opus-in-MP4 in WebAssembly for Safari ===&lt;br /&gt;
&lt;br /&gt;
Implement the missing Opus support for Safari.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Safari supports decoding Opus streams, but only when packed in CAF with no support for Media Source Extension. It would be nice to deploy a middleware in WASM that remuxes non-fragmented MP4 to CAF to support progressive streams, and to determine if enough hooks exist for fragmented MP4s as well. Needless to say, audio and video need to remain in sync throughout the whole process.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
* Make sure the underlying Opus decoder works in Safari.&lt;br /&gt;
* Implement a minimal mp4-to-caf demuxer/muxer in your language of choice.&lt;br /&gt;
* Compile this remuxer to Javascript/WebAssembly/WASM.&lt;br /&gt;
* Develop a proof of concept streaming for a non-fragmented mp4 file.&lt;br /&gt;
* Package the system to a reusable library.&lt;br /&gt;
* Investigate if it&#039;s possible to port this functionality to fragmented mp4 as well.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with streaming protocols, encapsulation, WebAssembly. Expect lots of hacking in Javascript.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Koda]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2021&amp;diff=16762</id>
		<title>Summer of Code 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2021&amp;diff=16762"/>
		<updated>2021-03-21T13:20:18Z</updated>

		<summary type="html">&lt;p&gt;Phschafft: Update: Made make name a link to my profile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This year Xiph.org is focusing on the rav1e AV1 encoder for its GSoC participation. Both video and still images are currently hot topics, especially with the recent support of AVIF within browsers.&lt;br /&gt;
&lt;br /&gt;
Below you&#039;ll find the description for the following GSoC project ideas around the rav1e project.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about a particular idea, please get in touch with the people listed under &amp;quot;possible mentors&amp;quot;. While no guarantee, that the person will be the actual mentor for the task, they know it and will be happy to answer your questions. Please join #xiph in Freenode IRC for more. If you don&#039;t have IRC set up you can easily connect from your [http://webchat.freenode.net/?channels=%23xiph web browser].&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Detailed Project Descriptions ==&lt;br /&gt;
&lt;br /&gt;
These ideas were suggested by various members of the developer community as projects that would be beneficial and which we feel we can mentor. Students should feel free to select one of these, develop a variation, or propose their own ideas. Here, ideally.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Grain synthesis implementation inside of the rav1e encoder ===&lt;br /&gt;
&lt;br /&gt;
Grain synthesis is using the idea of modeling noise temporally and spatially using noise estimation.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Keeping high frequency detail and noise(dithering, camera noise, grain) using traditional encoder techniques is very expensive in terms of bitrate allocation, and some tools implemented to take care of that problem can create additional artifacts that are not pleasing to the general viewer experience, or are detrimental to the fidelity of the image.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
Implementing grain synthesis that models the noise parameters of a video, and applies the generated noise parameters during the decoding process, saving very high amounts of bitrates and providing a very high subjective visual fidelity and appeal.&lt;br /&gt;
&lt;br /&gt;
Making it faster than other forms of grain synthesis via smarter algorithms and using various forms of threading to speed up its application, such as tile threading and integration with rav1e-by-gop, making it possible to use as part of any encoding workflow. This will make sure adoption of the technique becomes as widespread as possible.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust and C, and must have a light background in general visual media encoding, such as video and image compression.&lt;br /&gt;
&lt;br /&gt;
Difficulty: Medium.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]] &amp;amp;&amp;amp; XX&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Adaptive quantization ===&lt;br /&gt;
&lt;br /&gt;
Adaptive quantization is the process of an algorithm trying to efficiently allocate bitrate among the various macroblocks found in a frame by varying the quantizer across each of them according to different visual targets.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Often times, an encoder does not know about the best way to allocate the bitrate budget across a frame, and may overspend a considerable amount of bitrate to regions that might not benefit from a low quantizer(low amounts of distortion, so less compression) while not giving enough bitrate to zones that might actually need it. This can even cause issues temporally, as bitrate allocation within a group of frames(GOPs) may be skewed towards more complex and high motion frames, while leaving other frames with barely any bitrate to work with, creating visual artifacts such as blocking and banding.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
Implementing 1-3 forms on adaptive quantization either based on variance, complexity and/or variance variance with a bias in low contrast frames in rav1e. This will make bitrate allocation more efficient, and avoid bitrate overspending in areas which either need the lower quantizer to avoid the presence of lower quality frames that might detract from the viewer experience, and make objective/subjective quality targets easier to achieved. The combination of powerful adaptive quantization and grain synthesis would allow for a higher subjective quality viewing experience at lower bitrates while potentially lowering computational complexity by a good margin.&lt;br /&gt;
&lt;br /&gt;
Making a smart adaptive AQ mode in which the encoder chooses which adaptive quantization algorithm to use depending on the scene featured in a GOP. Potentially difficult.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust and C, and having a background in general visual media encoding, such as video and image compression is recommended.&lt;br /&gt;
&lt;br /&gt;
Difficulty: Medium to high depending on which targets the student chooses to follow.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]] &amp;amp;&amp;amp; XX&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Integrate rav1e-by-gop into rav1e encoder ===&lt;br /&gt;
&lt;br /&gt;
rav1e-by-gop is an extended command line encoder that provides additional encoding strategies such as by-gop parallel encoding across multiple machines.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
rav1e-by-gop is currently a command line program, some users might want to enjoy on the extended features from other programs even if they do not always belong to an encoder.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
make rav1e-by-gop expose the same API of the normal rav1e to make easy to use the multiple machine encoding features from other programs.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust or C programming.&amp;lt;br&amp;gt;&lt;br /&gt;
Video knowledge is not strictly necessary, however a basic understanding of the concepts is vastly beneficial.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Tdaede]] [[User:Lu_zero]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=== Visual metric targeting in rav1e-by-gop ===&lt;br /&gt;
&lt;br /&gt;
Objective metrics are used to evaluate an encoder&#039;s performance in a diverse set of scenarios. Different metrics such as PSNR, SSIM, DSSIM, VMAF and some closed no-reference metrics are used in the field to record encoder performance changes across versions trying to correlate closely with human perception.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Classical methods of rate control such as ABR(Average BitRate), fixed quantizers and even CRF(Constant Rate Factor) have the issue of not targeting a certain quality level. This can result in starved encodes where the bitrate budget has to be kept low to stay watchable by the viewer without interruption, leading to scenes that have exceptionally good visual targets by overspending bitrate, and scenes that have very poor visual appeal by having too little bitrate, detracting from the viewer experience entirely. More advanced forms of rate control like CRF help somewhat, but they still have the issue of having to overshoot so the lower quality scenes do not suffer, and do not adapt to the different type of content encoded, resulting in variable quality encodes.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
Implementing visual metric targeting based on VMAF(mainly used for video) and butteraugli(mainly used for images) as part of rav1e-by-gop as a secondary rate control option. &lt;br /&gt;
&lt;br /&gt;
The application of visual metric targeting in rav1e-by-gop would take advantage of its adaptive keyframe placement and smart scene detection to its fullest. &lt;br /&gt;
This would allow for the best rate control possible, as short scenes in the length of 1-15s are where visual metrics such as VMAF shine the most. The idea is to encode first with a very fast speed preset in the encoder to gauge the quality at a prefixed quantizer. If the visual metric target set is not achieved, the encoder tries again once or twice until it gets the right result. &lt;br /&gt;
With this method, instead of targeting an average of bitrate, you would target a visual score, getting higher efficiency and higher subjective quality. This would also be advantageous in terms of encoding time spent, as encoder complexity could be dialed back while keeping overall efficiency the same or higher, with efficiency being a function of both encoder efficiency and rate control.&lt;br /&gt;
&lt;br /&gt;
Implementing butteraugli quality targeting as an option using rav1e for AVIF images. Since visual quality requirements are considerably higher for intra only(image only) media, keeping high visual fidelity is even more important than video compression. Quality targeting iterations would also be quite useful here.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust and C. General interest in image and video coding is recommended&lt;br /&gt;
&lt;br /&gt;
Difficulty: Medium.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]] &amp;amp;&amp;amp; XX&lt;br /&gt;
----&lt;br /&gt;
=== Improved cluster support for Icecast ===&lt;br /&gt;
Icecast servers deliver streams to million of users simultaneous worldwide. Each instance can handle many thousand clients at the same time. However redundancy, scalability, hardware requirement, and most importantly network connectivity often requires to use several instances in a professional deployment.&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
Icecast is designed as a standalone application. While basic support exists (such as master-slave mode) support for clusters can be improved. At this point a cluster level mangement instance seems to be missing.&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
A solution for cluster management should be developed. A cluster controller should be implemented as well as support within Icecast. The focus is on Icecast itself at this point. However the controler should at least demonstrate all features implemented in Icecast.&lt;br /&gt;
Possible features:&lt;br /&gt;
* Automatic master-slave, and relay configuration.&lt;br /&gt;
* Load distribution.&lt;br /&gt;
* Statistic data collection.&lt;br /&gt;
* Log collection.&lt;br /&gt;
* Node monitoring.&lt;br /&gt;
* Signalling of cluster state to external components (e.g. for automatic cluster scaling)&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
The student should be familiar with C. A basic understanding of HTTP, as well as other web technologies is helpful. Knowledge of visualisation technologies is &#039;&#039;&#039;not&#039;&#039;&#039; required.&lt;br /&gt;
&lt;br /&gt;
Complexity: Medium to high.&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
[[User:phschafft|phschafft]] (teamed with someone else)&lt;br /&gt;
----&lt;br /&gt;
=== Development of advanced content navigation in Icecast ===&lt;br /&gt;
Icecast currently supports navigation of listeners between different streams. This was developed mostly for fallbacks (providing alternative content if the primary source fails). This support should be improved to provide better interaction with contents.&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
The current implementation is designed to work very robust for source side events (such as fallbacks). However it fails for two requirements:&lt;br /&gt;
* Listener initiated interaction such as adaptive streaming.&lt;br /&gt;
* Exact timing.&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
The current concept is capable of being extended to the new requirements. Code should be written to add the new features on the existing (and well proven) infrastructure. The following additional features would be needed:&lt;br /&gt;
Detection and matching of features within and between streams. This is required for any kind of synchronisation.&lt;br /&gt;
* Executing operations exactly at detached features.&lt;br /&gt;
* Adding ways to communicate features and operations between listener and Icecast, source and Icecast, and between multiple * * Icecast instances of the same cluster.&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
The student should be familiar with C. A basic understanding of HTTP, Ogg, and Matroska/WebM is helpful.&lt;br /&gt;
&lt;br /&gt;
Complexity: Medium to high.&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
[[User:phschafft|phschafft]] (teamed with someone else)&lt;br /&gt;
----&lt;br /&gt;
=== Uniform return channel for Icecast ===&lt;br /&gt;
Icecast supports broadcasting media to several thousand listeners per instance. In a classic setup this is a one way process from the source (such as a radio or TV studio) to the consumer. However it is sometimes useful to provide a return channel, such as for implementing polls.&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
Returning information from the listener to the source is part of classic media. The need has become more relevant with the development of more interactive ways of the web. Several technologies have been used to implement this including asking the listeners to call in, send e-mails, or comment on a web page.&lt;br /&gt;
&lt;br /&gt;
Classic ways to implement feedback include a media break and are only loosely bound to the forward channel.&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
A uniform return channel should be implemented that allows several types of data to be send from the listener to the source. This includes three major parts:&lt;br /&gt;
* Improved session handling (both for listeners and for sources)&lt;br /&gt;
* Implementing a return channel for listeners.&lt;br /&gt;
* Implementing a return channel for sources.&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
The student should be familiar with C and HTTP.&lt;br /&gt;
&lt;br /&gt;
Complexity: Medium.&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
[[User:phschafft|phschafft]] (teamed with someone else)&lt;br /&gt;
----&lt;br /&gt;
=== (Live) listener statistics for Icecast ===&lt;br /&gt;
Icecast supports writing a basic access.log that includes client information as well as connection time. In addition a playlist log is supported, and live statistic data via the STATS interface.&lt;br /&gt;
&lt;br /&gt;
A standard solution to use this data for detailed listener statistics is missing.&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
In the current solution there is no off the shelf solution to process the statistic data provided by Icecast. The best available solutions are standard access log analysers. A solution for live statistics is completely missing. Statistics taking content into account is also absent.&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
To improve the situation two major steps must be accomplished:&lt;br /&gt;
* The statistic interface of Icecast must be enhanced to provide the required information.&lt;br /&gt;
* A solution that analyses this data must be developed. The focus is on this part.&lt;br /&gt;
This project allows for a wide range of ideas from the participants to be incorporated. There is not yet and specific technical direction set. Evaluating different options is the first part of the project.&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
The student should be familiar with C. A basic understanding of log analysis, and monitoring and/or data collecting systems is helpful.&lt;br /&gt;
&lt;br /&gt;
Difficulty: Medium depending on which targets the student chooses to follow.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
[[User:phschafft|phschafft]] (teamed with someone else)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Support WebAssembly SIMD in rav1e ===&lt;br /&gt;
&lt;br /&gt;
rav1e supports the [https://wasi.dev/ WASI] platform and it has its javascript API bindings relying on it.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
The WebAssembly SIMD is getting [https://github.com/WebAssembly/simd closer] to be available, we should support it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
* Implement the dispatch logic for WASM SIMD as done already for x86_64 and aarch64.&lt;br /&gt;
* Implement the Sum of absolute difference (SAD) and Sum of absolute transformed differences (SATD)&lt;br /&gt;
* Implement the inverse transforms (idct, iadst, identity, ...)&lt;br /&gt;
* Implement the motion compensation.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust, WASM, wasmtime and related tools. Knowledge of x86 or arm assembly is not needed but will help.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Implement butteraugli in av-metrics  ===&lt;br /&gt;
&lt;br /&gt;
av-metrics is a collection of video quality metrics, [https://github.com/google/butteraugli butteraugli] is a promising psychovisual similarity metric. &lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Currently the implementation of butteraugli exists as [https://github.com/google/butteraugli stand-alone] codebase. The code is readable, but it could be faster. &lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
* Implement rust bindings to the reference butteraugli.&lt;br /&gt;
* Implement butteraugli in pure rust within av-metrics.&lt;br /&gt;
* Write integration and unit tests to make sure the implementation does not diverge&lt;br /&gt;
* Write criterion benchmarks&lt;br /&gt;
* Implement x86_64 or aarch64 optimizations for it, using intrinsics or plain ASM.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with Rust, C and C++. Knowledge of x86 or arm assembly is welcome.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Lu_zero]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Deploy Opus-in-MP4 in WebAssembly for Safari ===&lt;br /&gt;
&lt;br /&gt;
Implement the missing Opus support for Safari.&lt;br /&gt;
&lt;br /&gt;
==== Problem / Intro ====&lt;br /&gt;
&lt;br /&gt;
Safari supports decoding Opus streams, but only when packed in CAF with no support for Media Source Extension. It would be nice to deploy a middleware in WASM that remuxes non-fragmented MP4 to CAF to support progressive streams, and to determine if enough hooks exist for fragmented MP4s as well. Needless to say, audio and video need to remain in sync throughout the whole process.&lt;br /&gt;
&lt;br /&gt;
==== Solution / Task ====&lt;br /&gt;
&lt;br /&gt;
* Make sure the underlying Opus decoder works in Safari.&lt;br /&gt;
* Implement a minimal mp4-to-caf demuxer/muxer in your language of choice.&lt;br /&gt;
* Compile this remuxer to Javascript/WebAssembly/WASM.&lt;br /&gt;
* Develop a proof of concept streaming for a non-fragmented mp4 file.&lt;br /&gt;
* Package the system to a reusable library.&lt;br /&gt;
* Investigate if it&#039;s possible to port this functionality to fragmented mp4 as well.&lt;br /&gt;
&lt;br /&gt;
==== Requirements ====&lt;br /&gt;
&lt;br /&gt;
The student should be familiar with streaming protocols, encapsulation, WebAssembly. Expect lots of hacking in Javascript.&lt;br /&gt;
&lt;br /&gt;
==== Possible Mentors ====&lt;br /&gt;
&lt;br /&gt;
[[User:Koda]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Phschafft</name></author>
	</entry>
</feed>