diff --git a/conf/icecast.xml.in b/conf/icecast.xml.in
index 0b1fec48..dbd483da 100644
--- a/conf/icecast.xml.in
+++ b/conf/icecast.xml.in
@@ -91,6 +91,7 @@
65536/example2.ogg1
+ 1
diff --git a/doc/icecast2_config_file.html b/doc/icecast2_config_file.html
index ed428058..1a7118ee 100644
--- a/doc/icecast2_config_file.html
+++ b/doc/icecast2_config_file.html
@@ -320,6 +320,7 @@ If you are relaying a Shoutcast stream, you need to specify this indicator to al
<dump-file>/tmp/dump-example1.ogg</dump-file>
<fallback-mount>/example2.ogg</fallback-mount>
<fallback-override>1</fallback-override>
+ <no-yp>1</no-yp>
<burst-size>65536</burst-size>
<authentication type="htpasswd">
<option name="filename" value="myauth"/>
@@ -367,6 +368,12 @@ This multi-level fallback allows clients to cascade several mountpoints.
When enabled, this allows a connecting source client or relay on this mountpoint to move
listening clients back from the fallback mount.
+
no-yp
+
+Setting this option prevents this mountpoint from advertising on YP. The default is 0 so YP
+advertising occurs however you may want to prevent it here if you intend listeners to connect
+to a local relay instead
+
burst-size
This optional setting allows for providing a burst size which overrides the default burst size
diff --git a/src/cfgfile.c b/src/cfgfile.c
index a6d3031e..6680efa7 100644
--- a/src/cfgfile.c
+++ b/src/cfgfile.c
@@ -553,6 +553,11 @@ static void _parse_mount(xmlDocPtr doc, xmlNodePtr node,
mount->no_mount = atoi(tmp);
if(tmp) xmlFree(tmp);
}
+ else if (strcmp(node->name, "no-yp") == 0) {
+ tmp = (char *)xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
+ mount->no_yp = atoi(tmp);
+ if(tmp) xmlFree(tmp);
+ }
else if (strcmp(node->name, "authentication") == 0) {
mount->auth_type = xmlGetProp(node, "type");
option = node->xmlChildrenNode;
diff --git a/src/cfgfile.h b/src/cfgfile.h
index fdbb84a2..a2b082f7 100644
--- a/src/cfgfile.h
+++ b/src/cfgfile.h
@@ -57,6 +57,7 @@ typedef struct _mount_proxy {
int burst_size; /* amount to send to a new client if possible, -1 take
* from global setting */
unsigned int queue_size_limit;
+ int no_yp; /* Do we prevent YP on this mount */
unsigned int source_timeout; /* source timeout in seconds */
char *auth_type; /* Authentication type */
diff --git a/src/source.c b/src/source.c
index 32d5d7d1..fe29fffb 100644
--- a/src/source.c
+++ b/src/source.c
@@ -242,6 +242,7 @@ void source_clear_source (source_t *source)
source->shoutcast_compat = 0;
source->max_listeners = -1;
source->yp_public = 0;
+ source->yp_prevent = 0;
util_dict_free (source->audio_info);
source->audio_info = NULL;
@@ -498,6 +499,9 @@ static void source_init (source_t *source)
do
{
+ str = "0";
+ if (source->yp_prevent)
+ break;
if ((str = httpp_getvar(source->parser, "ice-public")))
break;
if ((str = httpp_getvar(source->parser, "icy-pub")))
@@ -877,6 +881,12 @@ void source_apply_mount (source_t *source, mount_proxy *mountinfo)
source->timeout = mountinfo->source_timeout;
DEBUG1 ("source timeout to %u", source->timeout);
}
+ if (mountinfo->no_yp)
+ {
+ source->yp_prevent = 1;
+ DEBUG0 ("preventing YP listings");
+ }
+
if (mountinfo->burst_size > -1)
source->burst_size = mountinfo->burst_size;
DEBUG1 ("amount to burst on client connect set to %u", source->burst_size);
diff --git a/src/source.h b/src/source.h
index 59ba6802..35bd03d2 100644
--- a/src/source.h
+++ b/src/source.h
@@ -51,6 +51,7 @@ typedef struct source_tag
long listeners;
long max_listeners;
int yp_public;
+ int yp_prevent;
struct auth_tag *authenticator;
int fallback_override;
int no_mount;