@ -61,12 +61,14 @@ static char *descrip =
" ${AVAILSTATUS} - the status code for the available channel \n "
" Options: \n "
" s - Consider the channel unavailable if the channel is in use at all \n "
" t - Simply checks if specified channels exist in the channel list \n "
" (implies option s) \n "
" j - Support jumping to priority n+101 if no channel is available \n " ;
static int chanavail_exec ( struct ast_channel * chan , void * data )
{
int res = - 1 , inuse = - 1 , option_state = 0 , priority_jump = 0 ;
int res = - 1 , inuse = - 1 , option_state = 0 , priority_jump = 0 , string_compare = 0 ;
int status ;
struct ast_module_user * u ;
char * info , tmp [ 512 ] , trychan [ 512 ] , * peers , * tech , * number , * rest , * cur ;
@ -90,6 +92,8 @@ static int chanavail_exec(struct ast_channel *chan, void *data)
if ( args . options ) {
if ( strchr ( args . options , ' s ' ) )
option_state = 1 ;
if ( strchr ( args . options , ' t ' ) )
string_compare = 1 ;
if ( strchr ( args . options , ' j ' ) )
priority_jump = 1 ;
}
@ -113,7 +117,13 @@ static int chanavail_exec(struct ast_channel *chan, void *data)
* number = ' \0 ' ;
number + + ;
if ( option_state ) {
if ( string_compare ) {
/* ast_parse_device_state checks for "SIP/1234" as a channel name.
ast_device_state will ask the SIP driver for the channel state . */
snprintf ( trychan , sizeof ( trychan ) , " %s/%s " , cur , number ) ;
status = inuse = ast_parse_device_state ( trychan ) ;
} else if ( option_state ) {
/* If the pbx says in use then don't bother trying further.
This is to permit testing if someone ' s on a call , even if the
channel can permit more calls ( ie callwaiting , sip calls , etc ) . */