1
0
mirror of https://gitlab.xiph.org/xiph/icecast-server.git synced 2025-01-03 14:56:34 -05:00

Update: Made dumpfile writing more uniform

This commit is contained in:
Philipp Schafft 2022-03-21 16:15:15 +00:00
parent 4ecee870c9
commit dd3ce7462b
5 changed files with 28 additions and 47 deletions

View File

@ -368,33 +368,16 @@ static void ebml_free_client_data (client_t *client)
client->format_data = NULL;
}
static void ebml_write_buf_to_file_fail (source_t *source)
{
ICECAST_LOG_WARN("Write to dump file failed, disabling");
fclose (source->dumpfile);
source->dumpfile = NULL;
}
static void ebml_write_buf_to_file (source_t *source, refbuf_t *refbuf)
{
ebml_source_state_t *ebml_source_state = source->format->_state;
if ( ! ebml_source_state->file_headers_written)
{
if (fwrite (ebml_source_state->header->data, 1,
ebml_source_state->header->len,
source->dumpfile) != ebml_source_state->header->len)
ebml_write_buf_to_file_fail(source);
else
if (!ebml_source_state->file_headers_written) {
if (source_write_dumpfile(source, ebml_source_state->header->data, ebml_source_state->header->len))
ebml_source_state->file_headers_written = true;
}
if (fwrite (refbuf->data, 1, refbuf->len, source->dumpfile) != refbuf->len)
{
ebml_write_buf_to_file_fail(source);
}
source_write_dumpfile(source, refbuf->data, refbuf->len);
}
/* internal ebml parsing */

View File

@ -760,13 +760,6 @@ static void free_mp3_client_data (client_t *client)
static void write_mp3_to_file (source_t *source, refbuf_t *refbuf)
{
if (refbuf->len == 0)
return;
if (fwrite (refbuf->data, 1, refbuf->len, source->dumpfile) < (size_t)refbuf->len)
{
ICECAST_LOG_WARN("Write to dump file failed, disabling");
fclose (source->dumpfile);
source->dumpfile = NULL;
}
source_write_dumpfile(source, refbuf->data, refbuf->len);
}

View File

@ -565,21 +565,6 @@ static int write_buf_to_client(client_t *client)
}
static int write_ogg_data (source_t *source, refbuf_t *refbuf)
{
int ret = 1;
if (fwrite (refbuf->data, 1, refbuf->len, source->dumpfile) != refbuf->len)
{
ICECAST_LOG_WARN("Write to dump file failed, disabling");
fclose (source->dumpfile);
source->dumpfile = NULL;
ret = 0;
}
return ret;
}
static void write_ogg_to_file (source_t *source, refbuf_t *refbuf)
{
ogg_state_t *ogg_info = source->format->_state;
@ -589,13 +574,11 @@ static void write_ogg_to_file (source_t *source, refbuf_t *refbuf)
refbuf_t *header = refbuf->associated;
while (header)
{
if (write_ogg_data (source, header) == 0)
if (!source_write_dumpfile(source, header->data, header->len))
return;
header = header->next;
}
ogg_info->file_headers = refbuf->associated;
}
write_ogg_data (source, refbuf);
source_write_dumpfile(source, refbuf->data, refbuf->len);
}

View File

@ -1461,3 +1461,22 @@ void source_recheck_mounts (int update_all)
avl_tree_unlock (global.source_tree);
config_release_config();
}
/* Writes a buffer of raw data to a dumpfile. returns true if the write was successful (and complete). */
bool source_write_dumpfile(source_t *source, const void *buffer, size_t len)
{
if (!source->dumpfile)
return false;
if (!len)
return true;
if (fwrite(buffer, 1, len, source->dumpfile) != len) {
ICECAST_LOG_WARN("Write to dump file failed, disabling");
fclose(source->dumpfile);
source->dumpfile = NULL;
return false;
}
return true;
}

View File

@ -104,6 +104,9 @@ int source_remove_client(void *key);
void source_main(source_t *source);
void source_recheck_mounts (int update_all);
/* Writes a buffer of raw data to a dumpfile. returns true if the write was successful (and complete). */
bool source_write_dumpfile(source_t *source, const void *buffer, size_t len);
extern mutex_t move_clients_mutex;
#endif