Compare commits

...

3 Commits

Author SHA1 Message Date
Aron Podrigal ecec9af148
Merge 6deca50592 into 5cb74797fe 2025-01-17 16:41:40 +00:00
Aron Podrigal 5cb74797fe
[mod_pgsql] err is now set correctly (dbh:last_error())
New function, `void pgsql_handle_set_error_if_not_set(switch_pgsql_handle_t *handle, char **err)` has been added to mod_pgsql module. This function is now called at several points where an error occurred but *err was not yet set.
2025-01-17 18:51:45 +03:00
Aron Podrigal 6deca50592 Add "record-wait-mod" flag to control auto recording behavior
Introduced a new conference flag, CFLAG_RECORD_WAIT_MOD, to delay auto recording until a moderator joins. Updated relevant logic to test and clear this flag based on moderator presence and participant count. This enhances flexibility in managing recording settings for moderated conferences.
2025-01-15 14:16:31 -06:00
5 changed files with 39 additions and 2 deletions

View File

@ -903,6 +903,9 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
conference_utils_clear_flag(conference, CFLAG_WAIT_MOD);
}
if (conference_utils_test_flag(conference, CFLAG_RECORD_WAIT_MOD) && conference_utils_member_test_flag(member, MFLAG_MOD)) {
conference_utils_clear_flag(conference, CFLAG_RECORD_WAIT_MOD);
}
if (conference->count > 1) {
if (((conference->moh_sound || conference->tmp_moh_sound) && !conference_utils_test_flag(conference, CFLAG_WAIT_MOD)) ||
(conference_utils_test_flag(conference, CFLAG_WAIT_MOD) && !switch_true(switch_channel_get_variable(channel, "conference_permanent_wait_mod_moh")))) {

View File

@ -190,6 +190,8 @@ void conference_utils_set_cflags(const char *flags, conference_flag_t *f)
for (i = 0; i < argc && argv[i]; i++) {
if (!strcasecmp(argv[i], "wait-mod")) {
f[CFLAG_WAIT_MOD] = 1;
} else if (!strcasecmp(argv[i], "record-wait-mod")) {
f[CFLAG_RECORD_WAIT_MOD] = 1;
} else if (!strcasecmp(argv[i], "video-floor-only")) {
f[CFLAG_VID_FLOOR] = 1;
} else if (!strcasecmp(argv[i], "audio-always")) {

View File

@ -433,7 +433,7 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
}
/* Start auto recording if there's the minimum number of required participants. */
if (conference->auto_record && !conference->auto_recording && (conference->count >= conference->min_recording_participants)) {
if (conference->auto_record && !conference->auto_recording && (conference->count >= conference->min_recording_participants) && !conference_utils_test_flag(conference, CFLAG_RECORD_WAIT_MOD)) {
conference->auto_recording++;
conference->record_count++;
imember = conference->members;
@ -1175,6 +1175,10 @@ void conference_xlist(conference_obj_t *conference, switch_xml_t x_conference, i
switch_xml_set_attr_d(x_conference, "wait_mod", "true");
}
if (conference_utils_test_flag(conference, CFLAG_RECORD_WAIT_MOD)) {
switch_xml_set_attr_d(x_conference, "record_wait_mod", "true");
}
if (conference_utils_test_flag(conference, CFLAG_AUDIO_ALWAYS)) {
switch_xml_set_attr_d(x_conference, "audio_always", "true");
}

View File

@ -258,6 +258,7 @@ typedef enum {
CFLAG_NO_MOH,
CFLAG_DED_VID_LAYER_AUDIO_FLOOR,
CFLAG_BREAKABLE,
CFLAG_RECORD_WAIT_MOD,
/////////////////////////////////
CFLAG_MAX
} conference_flag_t;

View File

@ -106,6 +106,22 @@ char * pgsql_handle_get_error(switch_pgsql_handle_t *handle)
return err_str;
}
void pgsql_handle_set_error_if_not_set(switch_pgsql_handle_t *handle, char **err)
{
char *err_str;
if (err && !(*err)) {
err_str = pgsql_handle_get_error(handle);
if (zstr(err_str)) {
switch_safe_free(err_str);
err_str = strdup((char *)"SQL ERROR!");
}
*err = err_str;
}
}
static int db_is_up(switch_pgsql_handle_t *handle)
{
int ret = 0;
@ -553,8 +569,15 @@ switch_status_t pgsql_handle_exec_detailed(const char *file, const char *func, i
goto error;
}
return pgsql_finish_results(handle);
if (pgsql_finish_results(handle) != SWITCH_STATUS_SUCCESS) {
goto error;
}
return SWITCH_STATUS_SUCCESS;
error:
pgsql_handle_set_error_if_not_set(handle, err);
return SWITCH_STATUS_FALSE;
}
@ -630,6 +653,7 @@ done:
pgsql_free_result(&result);
if (pgsql_finish_results(handle) != SWITCH_STATUS_SUCCESS) {
pgsql_handle_set_error_if_not_set(handle, err);
sstatus = SWITCH_STATUS_FALSE;
}
@ -638,6 +662,7 @@ done:
error:
pgsql_free_result(&result);
pgsql_handle_set_error_if_not_set(handle, err);
return SWITCH_STATUS_FALSE;
}
@ -1050,6 +1075,8 @@ switch_status_t pgsql_handle_callback_exec_detailed(const char *file, const char
return SWITCH_STATUS_SUCCESS;
error:
pgsql_handle_set_error_if_not_set(handle, err);
return SWITCH_STATUS_FALSE;
}