|
|
|
@ -85,7 +85,7 @@ static int check_conn() { |
|
|
|
"end_timestamp = ?, status = 'completed' where id = ?")) |
|
|
|
goto err; |
|
|
|
if (prep(&stm_close_stream, "update recording_streams set " \ |
|
|
|
"end_timestamp = ? where id = ?")) |
|
|
|
"end_timestamp = ?, stream = ? where id = ?")) |
|
|
|
goto err; |
|
|
|
if (prep(&stm_config_stream, "update recording_streams set channels = ?, sample_rate = ? where id = ?")) |
|
|
|
goto err; |
|
|
|
@ -295,6 +295,7 @@ void db_close_call(metafile_t *mf) { |
|
|
|
|
|
|
|
execute_wrap(&stm_close_call, b, NULL); |
|
|
|
} |
|
|
|
|
|
|
|
void db_close_stream(output_t *op) { |
|
|
|
if (check_conn()) |
|
|
|
return; |
|
|
|
@ -303,11 +304,61 @@ void db_close_stream(output_t *op) { |
|
|
|
|
|
|
|
double now = now_double(); |
|
|
|
|
|
|
|
MYSQL_BIND b[2]; |
|
|
|
str stream; |
|
|
|
char *filename = 0; |
|
|
|
MYSQL_BIND b[3]; |
|
|
|
stream.s = 0; |
|
|
|
stream.len = 0; |
|
|
|
|
|
|
|
if (!strcmp(output_storage, "db") || !strcmp(output_storage, "both")) { |
|
|
|
filename = malloc(strlen(op->full_filename) + |
|
|
|
strlen(op->file_format) + 2); |
|
|
|
if (!filename) { |
|
|
|
ilog(LOG_ERR, "Failed to allocate memory for filename"); |
|
|
|
if (!strcmp(output_storage, "both")) |
|
|
|
goto file; |
|
|
|
return; |
|
|
|
} |
|
|
|
strcpy(filename, op->full_filename); |
|
|
|
strcat(filename, "."); |
|
|
|
strcat(filename, op->file_format); |
|
|
|
FILE *f = fopen(filename, "rb"); |
|
|
|
if (!f) { |
|
|
|
ilog(LOG_ERR, "Failed to open file: %s", filename); |
|
|
|
if (!strcmp(output_storage, "both")) |
|
|
|
goto file; |
|
|
|
free(filename); |
|
|
|
return; |
|
|
|
} |
|
|
|
fseek(f, 0, SEEK_END); |
|
|
|
stream.len = ftell(f); |
|
|
|
fseek(f, 0, SEEK_SET); |
|
|
|
stream.s = malloc(stream.len); |
|
|
|
if (stream.s) { |
|
|
|
size_t count = fread(stream.s, 1, stream.len, f); |
|
|
|
if (count != stream.len) { |
|
|
|
ilog(LOG_ERR, "Failed to read from stream"); |
|
|
|
if (!strcmp(output_storage, "both")) |
|
|
|
goto file; |
|
|
|
free(filename); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
fclose(f); |
|
|
|
} |
|
|
|
|
|
|
|
file: |
|
|
|
my_d(&b[0], &now); |
|
|
|
my_ull(&b[1], &op->db_id); |
|
|
|
my_str(&b[1], &stream); |
|
|
|
my_ull(&b[2], &op->db_id); |
|
|
|
|
|
|
|
execute_wrap(&stm_close_stream, b, NULL); |
|
|
|
|
|
|
|
if (stream.s) |
|
|
|
free(stream.s); |
|
|
|
if (!strcmp(output_storage, "db")) |
|
|
|
remove(filename); |
|
|
|
free(filename); |
|
|
|
} |
|
|
|
|
|
|
|
void db_config_stream(output_t *op) { |
|
|
|
|