@ -1832,6 +1832,35 @@ static int finalized_state_process_party_a(struct cdr_object *cdr, struct ast_ch
return 1 ;
}
/*!
* \ internal
* \ brief Filter channel snapshots by technology
*/
static int filter_channel_snapshot ( struct ast_channel_snapshot * snapshot )
{
return snapshot - > tech_properties & AST_CHAN_TP_INTERNAL ;
}
/*!
* \ internal
* \ brief Filter a channel cache update
*/
static int filter_channel_cache_message ( struct ast_channel_snapshot * old_snapshot ,
struct ast_channel_snapshot * new_snapshot )
{
int ret = 0 ;
/* Drop cache updates from certain channel technologies */
if ( old_snapshot ) {
ret | = filter_channel_snapshot ( old_snapshot ) ;
}
if ( new_snapshot ) {
ret | = filter_channel_snapshot ( new_snapshot ) ;
}
return ret ;
}
/* TOPIC ROUTER CALLBACKS */
/*!
@ -1870,6 +1899,10 @@ static void handle_dial_message(void *data, struct stasis_subscription *sub, str
( unsigned int ) stasis_message_timestamp ( message ) - > tv_sec ,
( unsigned int ) stasis_message_timestamp ( message ) - > tv_usec ) ;
if ( filter_channel_snapshot ( peer ) | | ( caller & & filter_channel_snapshot ( caller ) ) ) {
return ;
}
/* Figure out who is running this show */
if ( caller ) {
cdr = ao2_find ( active_cdrs_by_channel , caller - > uniqueid , OBJ_KEY ) ;
@ -1959,35 +1992,6 @@ static int cdr_object_update_party_b(void *obj, void *arg, int flags)
return 0 ;
}
/*!
* \ internal
* \ brief Filter channel snapshots by technology
*/
static int filter_channel_snapshot ( struct ast_channel_snapshot * snapshot )
{
return snapshot - > tech_properties & AST_CHAN_TP_INTERNAL ;
}
/*!
* \ internal
* \ brief Filter a channel cache update
*/
static int filter_channel_cache_message ( struct ast_channel_snapshot * old_snapshot ,
struct ast_channel_snapshot * new_snapshot )
{
int ret = 0 ;
/* Drop cache updates from certain channel technologies */
if ( old_snapshot ) {
ret | = filter_channel_snapshot ( old_snapshot ) ;
}
if ( new_snapshot ) {
ret | = filter_channel_snapshot ( new_snapshot ) ;
}
return ret ;
}
/*! \brief Determine if we need to add a new CDR based on snapshots */
static int check_new_cdr_needed ( struct ast_channel_snapshot * old_snapshot ,
struct ast_channel_snapshot * new_snapshot )