diff --git a/apps/app_meetme.c b/apps/app_meetme.c index 9198ea654e3fdd8d5cd293cbacb9e48b7a1f1ad3..afecc8ea19457d76a588a573e3441e69d1f4a1ee 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -2952,10 +2952,11 @@ static void meetme_menu_admin(enum menu_modes *menu_mode, int *dtmf, struct ast_ * \param chan ast_channel belonging to the user who called the menu * \param user which meetme conference user invoked the menu * \param recordingtmp character buffer which may hold the name of the conference recording file - * \param dahdic dahdi configuration info used by the main conference loop */ - -static void meetme_menu_admin_extended(enum menu_modes *menu_mode, int *dtmf, struct ast_conference *conf, struct ast_flags64 *confflags, struct ast_channel *chan, struct ast_conf_user *user, char *recordingtmp, int recordingtmp_size, struct dahdi_confinfo *dahdic, struct ast_format_cap *cap_slin) +static void meetme_menu_admin_extended(enum menu_modes *menu_mode, int *dtmf, + struct ast_conference *conf, struct ast_flags64 *confflags, struct ast_channel *chan, + struct ast_conf_user *user, char *recordingtmp, int recordingtmp_size, + struct ast_format_cap *cap_slin) { int keepplaying; int playednamerec; @@ -3088,12 +3089,14 @@ static void meetme_menu_admin_extended(enum menu_modes *menu_mode, int *dtmf, st ast_mutex_lock(&conf->recordthreadlock); if ((conf->recordthread == AST_PTHREADT_NULL) && ast_test_flag64(confflags, CONFFLAG_RECORDCONF) && ((conf->lchan = ast_request("DAHDI", cap_slin, NULL, chan, "pseudo", NULL)))) { + struct dahdi_confinfo dahdic; + ast_set_read_format_by_id(conf->lchan, AST_FORMAT_SLINEAR); ast_set_write_format_by_id(conf->lchan, AST_FORMAT_SLINEAR); - dahdic->chan = 0; - dahdic->confno = conf->dahdiconf; - dahdic->confmode = DAHDI_CONF_CONFANN | DAHDI_CONF_CONFANNMON; - if (ioctl(ast_channel_fd(conf->lchan, 0), DAHDI_SETCONF, dahdic)) { + dahdic.chan = 0; + dahdic.confno = conf->dahdiconf; + dahdic.confmode = DAHDI_CONF_CONFANN | DAHDI_CONF_CONFANNMON; + if (ioctl(ast_channel_fd(conf->lchan, 0), DAHDI_SETCONF, &dahdic)) { ast_log(LOG_WARNING, "Error starting listen channel\n"); ast_hangup(conf->lchan); conf->lchan = NULL; @@ -3136,10 +3139,11 @@ static void meetme_menu_admin_extended(enum menu_modes *menu_mode, int *dtmf, st * \param chan ast_channel belonging to the user who called the menu * \param user which meetme conference user invoked the menu * \param recordingtmp character buffer which may hold the name of the conference recording file - * \param dahdic dahdi configuration info used by the main conference loop */ - -static void meetme_menu(enum menu_modes *menu_mode, int *dtmf, struct ast_conference *conf, struct ast_flags64 *confflags, struct ast_channel *chan, struct ast_conf_user *user, char *recordingtmp, int recordingtmp_size, struct dahdi_confinfo *dahdic, struct ast_format_cap *cap_slin) +static void meetme_menu(enum menu_modes *menu_mode, int *dtmf, + struct ast_conference *conf, struct ast_flags64 *confflags, struct ast_channel *chan, + struct ast_conf_user *user, char *recordingtmp, int recordingtmp_size, + struct ast_format_cap *cap_slin) { switch (*menu_mode) { case MENU_DISABLED: @@ -3154,7 +3158,8 @@ static void meetme_menu(enum menu_modes *menu_mode, int *dtmf, struct ast_confer break; } case MENU_ADMIN_EXTENDED: - meetme_menu_admin_extended(menu_mode, dtmf, conf, confflags, chan, user, recordingtmp, recordingtmp_size, dahdic, cap_slin); + meetme_menu_admin_extended(menu_mode, dtmf, conf, confflags, chan, user, + recordingtmp, recordingtmp_size, cap_slin); break; } } @@ -3400,9 +3405,9 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc if (rt_schedule && conf->maxusers) { if (conf->users >= conf->maxusers) { /* Sorry, but this confernce has reached the participant limit! */ + ast_mutex_unlock(&conf->playlock); if (!ast_streamfile(chan, "conf-full", ast_channel_language(chan))) ast_waitstream(chan, ""); - ast_mutex_unlock(&conf->playlock); goto outrun; } } @@ -4168,6 +4173,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc if (ast_test_flag64(confflags, CONFFLAG_PASS_DTMF)) { conf_queue_dtmf(conf, user, f); } + /* Take out of conference */ if (ioctl(fd, DAHDI_SETCONF, &dahdic_empty)) { ast_log(LOG_WARNING, "Error setting conference\n"); close(fd); @@ -4205,13 +4211,15 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc } if (dtmf > 0) { - meetme_menu(&menu_mode, &dtmf, conf, confflags, chan, user, recordingtmp, sizeof(recordingtmp), &dahdic, cap_slin); + meetme_menu(&menu_mode, &dtmf, conf, confflags, + chan, user, recordingtmp, sizeof(recordingtmp), cap_slin); } if (musiconhold && !menu_mode) { conf_start_moh(chan, optargs[OPT_ARG_MOH_CLASS]); } + /* Put back into conference */ if (ioctl(fd, DAHDI_SETCONF, &dahdic)) { ast_log(LOG_WARNING, "Error setting conference\n"); close(fd);