@ -4232,6 +4232,17 @@ static void dahdi_handle_dtmfup(struct ast_channel *ast, int index, struct ast_f
}
}
static void handle_alarms ( struct dahdi_pvt * p , int alarms )
{
const char * alarm_str = alarm2str ( alarms ) ;
ast_log ( LOG_WARNING , " Detected alarm on channel %d: %s \n " , p - > channel , alarm_str ) ;
manager_event ( EVENT_FLAG_SYSTEM , " Alarm " ,
" Alarm: %s \r \n "
" Channel: %d \r \n " ,
alarm_str , p - > channel ) ;
}
static struct ast_frame * dahdi_handle_event ( struct ast_channel * ast )
{
int res , x ;
@ -4381,11 +4392,7 @@ static struct ast_frame *dahdi_handle_event(struct ast_channel *ast)
# endif
p - > inalarm = 1 ;
res = get_alarms ( p ) ;
ast_log ( LOG_WARNING , " Detected alarm on channel %d: %s \n " , p - > channel , alarm2str ( res ) ) ;
manager_event ( EVENT_FLAG_SYSTEM , " Alarm " ,
" Alarm: %s \r \n "
" Channel: %d \r \n " ,
alarm2str ( res ) , p - > channel ) ;
handle_alarms ( p , res ) ;
# ifdef HAVE_PRI
if ( ! p - > pri | | ! p - > pri - > pri | | pri_get_timer ( p - > pri - > pri , PRI_TIMER_T309 ) < 0 ) {
/* fall through intentionally */
@ -7344,11 +7351,7 @@ static void *mwi_thread(void *data)
case DAHDI_EVENT_ALARM :
mtd - > pvt - > inalarm = 1 ;
res = get_alarms ( mtd - > pvt ) ;
ast_log ( LOG_WARNING , " Detected alarm on channel %d: %s \n " , mtd - > pvt - > channel , alarm2str ( res ) ) ;
manager_event ( EVENT_FLAG_SYSTEM , " Alarm " ,
" Alarm: %s \r \n "
" Channel: %d \r \n " ,
alarm2str ( res ) , mtd - > pvt - > channel ) ;
handle_alarms ( mtd - > pvt , res ) ;
break ; /* What to do on channel alarm ???? -- fall thru intentionally?? */
default :
ast_log ( LOG_NOTICE , " Got event %d (%s)... Passing along to ss_thread \n " , res , event2str ( res ) ) ;
@ -7724,11 +7727,7 @@ static int handle_init_event(struct dahdi_pvt *i, int event)
case DAHDI_EVENT_ALARM :
i - > inalarm = 1 ;
res = get_alarms ( i ) ;
ast_log ( LOG_WARNING , " Detected alarm on channel %d: %s \n " , i - > channel , alarm2str ( res ) ) ;
manager_event ( EVENT_FLAG_SYSTEM , " Alarm " ,
" Alarm: %s \r \n "
" Channel: %d \r \n " ,
alarm2str ( res ) , i - > channel ) ;
handle_alarms ( i , res ) ;
/* fall thru intentionally */
case DAHDI_EVENT_ONHOOK :
if ( i - > radio )
@ -8714,16 +8713,11 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf,
/* the dchannel is down so put the channel in alarm */
if ( tmp - > pri & & ! pri_is_up ( tmp - > pri ) )
tmp - > inalarm = 1 ;
else
tmp - > inalarm = 0 ;
# endif
memset ( & si , 0 , sizeof ( si ) ) ;
if ( ioctl ( tmp - > subs [ SUB_REAL ] . zfd , DAHDI_SPANSTAT , & si ) = = - 1 ) {
ast_log ( LOG_ERROR , " Unable to get span status: %s \n " , strerror ( errno ) ) ;
destroy_dahdi_pvt ( & tmp ) ;
return NULL ;
if ( ( res = get_alarms ( tmp ) ) ! = DAHDI_ALARM_NONE ) {
tmp - > inalarm = 1 ;
handle_alarms ( tmp , res ) ;
}
if ( si . alarms ) tmp - > inalarm = 1 ;
}
tmp - > polarityonanswerdelay = conf - > chan . polarityonanswerdelay ;