diff options
-rw-r--r-- | main/cdr.c | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/main/cdr.c b/main/cdr.c index 02056ecc5..63648361d 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -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) |