switch_codec_t write_codec;
char *rec_path;
switch_time_t rec_time;
+ conference_record_t *rec;
uint8_t *frame;
uint8_t *last_frame;
uint32_t frame_size;
}
/* stop the specified recording */
-static switch_status_t conference_record_stop(conference_obj_t *conference, char *path)
+static switch_status_t conference_record_stop(conference_obj_t *conference, switch_stream_handle_t *stream, char *path)
{
conference_member_t *member = NULL;
int count = 0;
switch_mutex_lock(conference->member_mutex);
for (member = conference->members; member; member = member->next) {
if (switch_test_flag(member, MFLAG_NOCHANNEL) && (!path || !strcmp(path, member->rec_path))) {
+ if (member->rec && member->rec->autorec) {
+ stream->write_function(stream, "Stopped AUTO recording file %s (Auto Recording Now Disabled)\n", member->rec_path);
+ conference->auto_record = 0;
+ } else {
+ stream->write_function(stream, "Stopped recording file %s\n", member->rec_path);
+ }
+
switch_clear_flag_locked(member, MFLAG_RUNNING);
count++;
+
}
}
+
+ conference->record_count -= count;
+
switch_mutex_unlock(conference->member_mutex);
return count;
}
fh.samplerate = conference->rate;
member->id = next_member_id();
member->pool = rec->pool;
-
+ member->rec = rec;
member->frame_size = SWITCH_RECOMMENDED_BUFFER_SIZE;
member->frame = switch_core_alloc(member->pool, member->frame_size);
member->mux_frame = switch_core_alloc(member->pool, member->frame_size);
switch_assert(conference != NULL);
switch_assert(stream != NULL);
- if (argc <= 2)
+ if (argc <= 2) {
return SWITCH_STATUS_GENERR;
+ }
stream->write_function(stream, "Record file %s\n", argv[2]);
conference->record_filename = switch_core_strdup(conference->pool, argv[2]);
static switch_status_t conf_api_sub_norecord(conference_obj_t *conference, switch_stream_handle_t *stream, int argc, char **argv)
{
- int all;
+ int all, before = conference->record_count, ttl = 0;
switch_event_t *event;
switch_assert(conference != NULL);
return SWITCH_STATUS_GENERR;
all = (strcasecmp(argv[2], "all") == 0);
- stream->write_function(stream, "Stop recording file %s\n", argv[2]);
- if (!conference_record_stop(conference, all ? NULL : argv[2]) && !all) {
+
+ if (!conference_record_stop(conference, stream, all ? NULL : argv[2]) && !all) {
stream->write_function(stream, "non-existant recording '%s'\n", argv[2]);
} else {
- if (all) {
- conference->record_count = 0;
- } else {
- conference->record_count--;
- }
if (test_eflag(conference, EFLAG_RECORD) &&
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
conference_add_event_data(conference, event);
}
}
+ ttl = before - conference->record_count;
+ stream->write_function(stream, "Stopped recording %d file%s\n", ttl, ttl == 1 ? "" : "s");
+
return SWITCH_STATUS_SUCCESS;
}
switch_assert(conference != NULL);
switch_assert(stream != NULL);
- if (argc <= 3) {
+ if (argc > 2 && argc <= 3) {
if (strcasecmp(argv[2], "stop") == 0 || strcasecmp(argv[2], "check") == 0) {
argv[3] = "all";
argc++;