mirror of
https://gitlab.xiph.org/xiph/icecast-server.git
synced 2025-06-30 22:18:19 -04:00
Listing of current mountpoints in admin interface.
svn path=/trunk/icecast/; revision=4455
This commit is contained in:
parent
eba22526aa
commit
0d40f034d2
76
src/admin.c
76
src/admin.c
@ -19,24 +19,31 @@
|
|||||||
|
|
||||||
#define CATMODULE "admin"
|
#define CATMODULE "admin"
|
||||||
|
|
||||||
#define COMMAND_ERROR (-1)
|
#define COMMAND_ERROR (-1)
|
||||||
#define COMMAND_FALLBACK 1
|
|
||||||
#define COMMAND_RAW_STATS 2
|
/* Mount-specific commands */
|
||||||
#define COMMAND_METADATA_UPDATE 3
|
#define COMMAND_FALLBACK 1
|
||||||
#define COMMAND_SHOW_LISTENERS 4
|
#define COMMAND_METADATA_UPDATE 2
|
||||||
|
#define COMMAND_SHOW_LISTENERS 3
|
||||||
|
|
||||||
|
/* Global commands */
|
||||||
|
#define COMMAND_LIST_MOUNTS 101
|
||||||
|
#define COMMAND_RAW_STATS 102
|
||||||
|
|
||||||
int admin_get_command(char *command)
|
int admin_get_command(char *command)
|
||||||
{
|
{
|
||||||
if(!strcmp(command, "fallbacks"))
|
if(!strcmp(command, "fallbacks"))
|
||||||
return COMMAND_FALLBACK;
|
return COMMAND_FALLBACK;
|
||||||
else if(!strcmp(command, "rawstats"))
|
|
||||||
return COMMAND_RAW_STATS;
|
|
||||||
else if(!strcmp(command, "stats.xml")) /* The old way */
|
|
||||||
return COMMAND_RAW_STATS;
|
|
||||||
else if(!strcmp(command, "metadata"))
|
else if(!strcmp(command, "metadata"))
|
||||||
return COMMAND_METADATA_UPDATE;
|
return COMMAND_METADATA_UPDATE;
|
||||||
else if(!strcmp(command, "listclients"))
|
else if(!strcmp(command, "listclients"))
|
||||||
return COMMAND_SHOW_LISTENERS;
|
return COMMAND_SHOW_LISTENERS;
|
||||||
|
else if(!strcmp(command, "rawstats"))
|
||||||
|
return COMMAND_RAW_STATS;
|
||||||
|
else if(!strcmp(command, "stats.xml")) /* The old way */
|
||||||
|
return COMMAND_RAW_STATS;
|
||||||
|
else if(!strcmp(command, "listmounts"))
|
||||||
|
return COMMAND_LIST_MOUNTS;
|
||||||
else
|
else
|
||||||
return COMMAND_ERROR;
|
return COMMAND_ERROR;
|
||||||
}
|
}
|
||||||
@ -46,6 +53,7 @@ static void command_metadata(client_t *client, source_t *source);
|
|||||||
static void command_show_listeners(client_t *client, source_t *source);
|
static void command_show_listeners(client_t *client, source_t *source);
|
||||||
|
|
||||||
static void command_raw_stats(client_t *client);
|
static void command_raw_stats(client_t *client);
|
||||||
|
static void command_list_mounts(client_t *client);
|
||||||
|
|
||||||
static void admin_handle_mount_request(client_t *client, source_t *source,
|
static void admin_handle_mount_request(client_t *client, source_t *source,
|
||||||
int command);
|
int command);
|
||||||
@ -79,11 +87,13 @@ void admin_handle_request(client_t *client, char *uri)
|
|||||||
source_t *source;
|
source_t *source;
|
||||||
|
|
||||||
/* This is a mount request, handle it as such */
|
/* This is a mount request, handle it as such */
|
||||||
if(!connection_check_source_pass(client->parser, mount)) {
|
if(!connection_check_admin_pass(client->parser)) {
|
||||||
INFO1("Bad or missing password on mount modification admin "
|
if(!connection_check_source_pass(client->parser, mount)) {
|
||||||
"request (command: %s)", command_string);
|
INFO1("Bad or missing password on mount modification admin "
|
||||||
client_send_401(client);
|
"request (command: %s)", command_string);
|
||||||
return;
|
client_send_401(client);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
avl_tree_rlock(global.source_tree);
|
avl_tree_rlock(global.source_tree);
|
||||||
@ -121,6 +131,9 @@ static void admin_handle_general_request(client_t *client, int command)
|
|||||||
case COMMAND_RAW_STATS:
|
case COMMAND_RAW_STATS:
|
||||||
command_raw_stats(client);
|
command_raw_stats(client);
|
||||||
break;
|
break;
|
||||||
|
case COMMAND_LIST_MOUNTS:
|
||||||
|
command_list_mounts(client);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
WARN0("General admin request not recognised");
|
WARN0("General admin request not recognised");
|
||||||
client_send_400(client, "Unknown admin request");
|
client_send_400(client, "Unknown admin request");
|
||||||
@ -287,3 +300,38 @@ static void command_raw_stats(client_t *client) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void command_list_mounts(client_t *client) {
|
||||||
|
avl_node *node;
|
||||||
|
source_t *source;
|
||||||
|
|
||||||
|
DEBUG0("List mounts request");
|
||||||
|
|
||||||
|
html_head(client);
|
||||||
|
|
||||||
|
html_write(client,
|
||||||
|
"<table><tr><td>Mountpoint</td><td>Fallback</td>"
|
||||||
|
"<td>Format</td><td>Listeners</td></tr>");
|
||||||
|
|
||||||
|
avl_tree_rlock(global.source_tree);
|
||||||
|
|
||||||
|
node = avl_get_first(global.source_tree);
|
||||||
|
while(node) {
|
||||||
|
source = (source_t *)node->key;
|
||||||
|
|
||||||
|
html_write(client,
|
||||||
|
"<tr><td>%s</td><td>%s</td><td>%s</td><td>%ld</td></tr>",
|
||||||
|
source->mount, (source->fallback_mount != NULL)?
|
||||||
|
source->fallback_mount:"", source->format->format_description,
|
||||||
|
source->listeners);
|
||||||
|
|
||||||
|
node = avl_get_next(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
avl_tree_unlock(global.source_tree);
|
||||||
|
|
||||||
|
html_write(client, "</table></body></html>");
|
||||||
|
|
||||||
|
client_destroy(client);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user