1
0
mirror of https://gitlab.xiph.org/xiph/icecast-server.git synced 2024-06-23 06:25:24 +00:00

Add checks for whether a source is active

svn path=/trunk/icecast/; revision=5843
This commit is contained in:
Karl Heyes 2004-02-19 15:24:06 +00:00
parent ebf6603c07
commit 6d969934f5
3 changed files with 32 additions and 11 deletions

View File

@ -180,20 +180,21 @@ xmlDocPtr admin_build_sourcelist(char *current_source)
node = avl_get_first(global.source_tree);
while(node) {
source = (source_t *)node->key;
srcnode = xmlNewChild(xmlnode, NULL, "source", NULL);
xmlSetProp(srcnode, "mount", source->mount);
if (source->running)
{
srcnode = xmlNewChild(xmlnode, NULL, "source", NULL);
xmlSetProp(srcnode, "mount", source->mount);
xmlNewChild(srcnode, NULL, "fallback",
xmlNewChild(srcnode, NULL, "fallback",
(source->fallback_mount != NULL)?
source->fallback_mount:"");
memset(buf, '\000', sizeof(buf));
snprintf(buf, sizeof(buf)-1, "%ld", source->listeners);
xmlNewChild(srcnode, NULL, "listeners", buf);
memset(buf, '\000', sizeof(buf));
snprintf(buf, sizeof(buf)-1, "%ld", now - source->con->con_time);
xmlNewChild(srcnode, NULL, "Connected", buf);
xmlNewChild(srcnode, NULL, "Format",
source->format->format_description);
snprintf(buf, sizeof(buf), "%ld", source->listeners);
xmlNewChild(srcnode, NULL, "listeners", buf);
snprintf(buf, sizeof(buf), "%ld", now - source->con->con_time);
xmlNewChild(srcnode, NULL, "Connected", buf);
xmlNewChild(srcnode, NULL, "Format",
source->format->format_description);
}
node = avl_get_next(node);
}
return(doc);
@ -288,6 +289,14 @@ void admin_handle_request(client_t *client, char *uri)
}
else
{
if (source->running == 0)
{
INFO2("Received admin command %s on unavailable mount \"%s\"",
command_string, mount);
avl_tree_unlock (global.source_tree);
client_send_400 (client, "Source is not available");
return;
}
INFO2("Received admin command %s on mount \"%s\"",
command_string, mount);
admin_handle_mount_request(client, source, command);

View File

@ -884,6 +884,13 @@ static void _handle_get_request(connection_t *con,
avl_tree_unlock(global.source_tree);
return;
}
if (source->running == 0)
{
avl_tree_unlock(global.source_tree);
DEBUG0("inactive source, client dropped");
client_send_404(client, "This mount is unavailable.");
return;
}
/* Check for any required authentication first */
if(source->authenticator != NULL) {

View File

@ -160,6 +160,11 @@ int yp_touch()
node = avl_get_first(global.source_tree);
while (node) {
source = (source_t *)node->key;
if (source->running == 0)
{
node = avl_get_next (node);
continue;
}
current_time = time(NULL);
if (!source->yp_public) {
node = avl_get_next(node);