@ -786,38 +786,45 @@ static struct ast_conference *build_conf(char *confno, char *pin, char *pinadmin
ast_copy_string ( cnf - > pin , pin , sizeof ( cnf - > pin ) ) ;
ast_copy_string ( cnf - > pinadmin , pinadmin , sizeof ( cnf - > pinadmin ) ) ;
ast_copy_string ( cnf - > uniqueid , chan - > uniqueid , sizeof ( cnf - > uniqueid ) ) ;
cnf - > chan = ast_request ( " zap " , AST_FORMAT_SLINEAR , " pseudo " , NULL ) ;
if ( cnf - > chan ) {
ast_set_read_format ( cnf - > chan , AST_FORMAT_SLINEAR ) ;
ast_set_write_format ( cnf - > chan , AST_FORMAT_SLINEAR ) ;
cnf - > fd = cnf - > chan - > fds [ 0 ] ; /* for use by conf_play() */
} else {
ast_log ( LOG_WARNING , " Unable to open pseudo channel - trying device \n " ) ;
/* Setup a new zap conference */
ztc . confno = - 1 ;
ztc . confmode = ZT_CONF_CONFANN | ZT_CONF_CONFANNMON ;
cnf - > fd = open ( " /dev/zap/pseudo " , O_RDWR ) ;
if ( cnf - > fd < 0 ) {
if ( cnf - > fd < 0 | | ioctl ( cnf - > fd , ZT_SETCONF , & ztc ) ) {
ast_log ( LOG_WARNING , " Unable to open pseudo device \n " ) ;
ast_free ( cnf ) ;
if ( cnf - > fd > = 0 )
close ( cnf - > fd ) ;
free ( cnf ) ;
cnf = NULL ;
goto cnfout ;
}
}
/* Setup a new zap conference */
ztc . confno = - 1 ;
cnf - > zapconf = ztc . confno ;
/* Setup a new channel for playback of audio files */
cnf - > chan = ast_request ( " zap " , AST_FORMAT_SLINEAR , " pseudo " , NULL ) ;
if ( cnf - > chan ) {
ast_set_read_format ( cnf - > chan , AST_FORMAT_SLINEAR ) ;
ast_set_write_format ( cnf - > chan , AST_FORMAT_SLINEAR ) ;
ztc . chan = 0 ;
ztc . confno = cnf - > zapconf ;
ztc . confmode = ZT_CONF_CONFANN | ZT_CONF_CONFANNMON ;
if ( ioctl ( cnf - > fd , ZT_SETCONF , & ztc ) ) {
if ( ioctl ( cnf - > chan- > fds[ 0 ] , ZT_SETCONF , & ztc ) ) {
ast_log ( LOG_WARNING , " Error setting conference \n " ) ;
if ( cnf - > chan )
ast_hangup ( cnf - > chan ) ;
else
close ( cnf - > fd ) ;
ast_free ( cnf ) ;
cnf = NULL ;
goto cnfout ;
}
}
/* Fill the conference struct */
cnf - > start = time ( NULL ) ;
cnf - > zapconf = ztc . confno ;
cnf - > isdynamic = dynamic ? 1 : 0 ;
if ( option_verbose > 2 )
ast_verbose ( VERBOSE_PREFIX_3 " Created MeetMe conference %d for conference '%s' \n " , cnf - > zapconf , cnf - > confno ) ;
@ -2404,8 +2411,10 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno,
) ;
/* Check first in the conference list */
ast_log ( LOG_NOTICE , " The requested confno is '%s'? \n " , confno ) ;
AST_LIST_LOCK ( & confs ) ;
AST_LIST_TRAVERSE ( & confs , cnf , list ) {
ast_log ( LOG_NOTICE , " Does conf %s match %s? \n " , confno , cnf - > confno ) ;
if ( ! strcmp ( confno , cnf - > confno ) )
break ;
}
@ -2443,6 +2452,7 @@ static struct ast_conference *find_conf(struct ast_channel *chan, char *confno,
return NULL ;
AST_NONSTANDARD_APP_ARGS ( args , parse , ' , ' ) ;
ast_log ( LOG_NOTICE , " Will conf %s match %s? \n " , confno , args . confno ) ;
if ( ! strcasecmp ( args . confno , confno ) ) {
/* Bingo it's a valid conference */
cnf = build_conf ( args . confno ,