Commit 7bc7ea58 authored by Michael Smith's avatar Michael Smith

Fire off stats event for metadata updates when we get metadata inline.

This fixes stats.xml listings for mp3 slave relays with metadata.
We get rid of 'metadata_raw', since we now have to format out that stuff anyway.

svn path=/trunk/icecast/; revision=5815
parent 079c56c6
...@@ -659,7 +659,6 @@ static void command_metadata(client_t *client, source_t *source) ...@@ -659,7 +659,6 @@ static void command_metadata(client_t *client, source_t *source)
free(state->metadata); free(state->metadata);
state->metadata = strdup(value); state->metadata = strdup(value);
state->metadata_age++; state->metadata_age++;
state->metadata_raw = 0;
thread_mutex_unlock(&(state->lock)); thread_mutex_unlock(&(state->lock));
DEBUG2("Metadata on mountpoint %s changed to \"%s\"", DEBUG2("Metadata on mountpoint %s changed to \"%s\"",
......
...@@ -106,7 +106,6 @@ format_plugin_t *format_mp3_get_plugin(http_parser_t *parser) ...@@ -106,7 +106,6 @@ format_plugin_t *format_mp3_get_plugin(http_parser_t *parser)
static int send_metadata(client_t *client, mp3_client_data *client_state, static int send_metadata(client_t *client, mp3_client_data *client_state,
mp3_state *source_state) mp3_state *source_state)
{ {
int free_meta = 0;
int len_byte; int len_byte;
int len; int len;
int ret = -1; int ret = -1;
...@@ -122,32 +121,18 @@ static int send_metadata(client_t *client, mp3_client_data *client_state, ...@@ -122,32 +121,18 @@ static int send_metadata(client_t *client, mp3_client_data *client_state,
if (source_state->metadata == NULL) if (source_state->metadata == NULL)
break; /* Shouldn't be possible */ break; /* Shouldn't be possible */
if (source_state->metadata_raw) fullmetadata_size = strlen (source_state->metadata) + sizeof (meta_fmt);
if (fullmetadata_size > 4080)
{ {
fullmetadata_size = strlen (source_state->metadata); fullmetadata_size = 4080;
fullmetadata = source_state->metadata;
if (fullmetadata_size > 4080)
{
fullmetadata_size = 4080;
}
} }
else fullmetadata = malloc (fullmetadata_size);
{ if (fullmetadata == NULL)
fullmetadata_size = strlen (source_state->metadata) + break;
sizeof (meta_fmt);
if (fullmetadata_size > 4080)
{
fullmetadata_size = 4080;
}
fullmetadata = malloc (fullmetadata_size);
if (fullmetadata == NULL)
break;
fullmetadata_size = snprintf (fullmetadata, fullmetadata_size, fullmetadata_size = snprintf (fullmetadata, fullmetadata_size,
"StreamTitle='%.*s';", fullmetadata_size-(sizeof (meta_fmt)-1), source_state->metadata); "StreamTitle='%.*s';", fullmetadata_size-(sizeof (meta_fmt)-1), source_state->metadata);
free_meta = 1;
}
source_age = source_state->metadata_age; source_age = source_state->metadata_age;
...@@ -184,15 +169,13 @@ static int send_metadata(client_t *client, mp3_client_data *client_state, ...@@ -184,15 +169,13 @@ static int send_metadata(client_t *client, mp3_client_data *client_state,
client_state->metadata_offset = 0; client_state->metadata_offset = 0;
} }
free (buf); free (buf);
if (free_meta) free (fullmetadata);
free (fullmetadata);
return ret; return ret;
} while (0); } while (0);
thread_mutex_unlock(&(source_state->lock)); thread_mutex_unlock(&(source_state->lock));
if (free_meta) free (fullmetadata);
free (fullmetadata);
return -1; return -1;
} }
...@@ -339,10 +322,24 @@ static int format_mp3_get_buffer(format_plugin_t *self, char *data, ...@@ -339,10 +322,24 @@ static int format_mp3_get_buffer(format_plugin_t *self, char *data,
{ {
thread_mutex_lock(&(state->lock)); thread_mutex_lock(&(state->lock));
free(state->metadata); free(state->metadata);
state->metadata = state->metadata_buffer; /* Now, reformat state->metadata_buffer to strip off
StreamTitle=' and the closing '; (but only if there's
enough data for it to be correctly formatted) */
if(state->metadata_length >= 15) {
state->metadata = malloc(state->metadata_length -
15 + 1);
memcpy(state->metadata,
state->metadata_buffer + 13,
state->metadata_length - 15);
state->metadata[state->metadata_length - 2] = 0;
free(state->metadata_buffer);
}
else
state->metadata = state->metadata_buffer;
stats_event(self->mount, "title", state->metadata);
state->metadata_buffer = NULL; state->metadata_buffer = NULL;
state->metadata_age++; state->metadata_age++;
state->metadata_raw = 1;
thread_mutex_unlock(&(state->lock)); thread_mutex_unlock(&(state->lock));
} }
...@@ -393,8 +390,6 @@ static void *format_mp3_create_client_data(format_plugin_t *self, ...@@ -393,8 +390,6 @@ static void *format_mp3_create_client_data(format_plugin_t *self,
static void format_mp3_send_headers(format_plugin_t *self, static void format_mp3_send_headers(format_plugin_t *self,
source_t *source, client_t *client) source_t *source, client_t *client)
{ {
http_var_t *var;
avl_node *node;
int bytes; int bytes;
mp3_client_data *mp3data = client->format_data; mp3_client_data *mp3data = client->format_data;
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
typedef struct { typedef struct {
char *metadata; char *metadata;
int metadata_age; int metadata_age;
int metadata_raw;
mutex_t lock; mutex_t lock;
/* These are for inline metadata */ /* These are for inline metadata */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment