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:
parent
ebf6603c07
commit
6d969934f5
31
src/admin.c
31
src/admin.c
|
@ -180,20 +180,21 @@ xmlDocPtr admin_build_sourcelist(char *current_source)
|
||||||
node = avl_get_first(global.source_tree);
|
node = avl_get_first(global.source_tree);
|
||||||
while(node) {
|
while(node) {
|
||||||
source = (source_t *)node->key;
|
source = (source_t *)node->key;
|
||||||
srcnode = xmlNewChild(xmlnode, NULL, "source", NULL);
|
if (source->running)
|
||||||
xmlSetProp(srcnode, "mount", source->mount);
|
{
|
||||||
|
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 != NULL)?
|
||||||
source->fallback_mount:"");
|
source->fallback_mount:"");
|
||||||
memset(buf, '\000', sizeof(buf));
|
snprintf(buf, sizeof(buf), "%ld", source->listeners);
|
||||||
snprintf(buf, sizeof(buf)-1, "%ld", source->listeners);
|
xmlNewChild(srcnode, NULL, "listeners", buf);
|
||||||
xmlNewChild(srcnode, NULL, "listeners", buf);
|
snprintf(buf, sizeof(buf), "%ld", now - source->con->con_time);
|
||||||
memset(buf, '\000', sizeof(buf));
|
xmlNewChild(srcnode, NULL, "Connected", buf);
|
||||||
snprintf(buf, sizeof(buf)-1, "%ld", now - source->con->con_time);
|
xmlNewChild(srcnode, NULL, "Format",
|
||||||
xmlNewChild(srcnode, NULL, "Connected", buf);
|
source->format->format_description);
|
||||||
xmlNewChild(srcnode, NULL, "Format",
|
}
|
||||||
source->format->format_description);
|
|
||||||
node = avl_get_next(node);
|
node = avl_get_next(node);
|
||||||
}
|
}
|
||||||
return(doc);
|
return(doc);
|
||||||
|
@ -288,6 +289,14 @@ void admin_handle_request(client_t *client, char *uri)
|
||||||
}
|
}
|
||||||
else
|
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\"",
|
INFO2("Received admin command %s on mount \"%s\"",
|
||||||
command_string, mount);
|
command_string, mount);
|
||||||
admin_handle_mount_request(client, source, command);
|
admin_handle_mount_request(client, source, command);
|
||||||
|
|
|
@ -884,6 +884,13 @@ static void _handle_get_request(connection_t *con,
|
||||||
avl_tree_unlock(global.source_tree);
|
avl_tree_unlock(global.source_tree);
|
||||||
return;
|
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 */
|
/* Check for any required authentication first */
|
||||||
if(source->authenticator != NULL) {
|
if(source->authenticator != NULL) {
|
||||||
|
|
5
src/yp.c
5
src/yp.c
|
@ -160,6 +160,11 @@ int yp_touch()
|
||||||
node = avl_get_first(global.source_tree);
|
node = avl_get_first(global.source_tree);
|
||||||
while (node) {
|
while (node) {
|
||||||
source = (source_t *)node->key;
|
source = (source_t *)node->key;
|
||||||
|
if (source->running == 0)
|
||||||
|
{
|
||||||
|
node = avl_get_next (node);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
current_time = time(NULL);
|
current_time = time(NULL);
|
||||||
if (!source->yp_public) {
|
if (!source->yp_public) {
|
||||||
node = avl_get_next(node);
|
node = avl_get_next(node);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user