summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/asterisk/cel.h25
-rw-r--r--main/cel.c11
2 files changed, 8 insertions, 28 deletions
diff --git a/include/asterisk/cel.h b/include/asterisk/cel.h
index 914037d4c..4f2445b93 100644
--- a/include/asterisk/cel.h
+++ b/include/asterisk/cel.h
@@ -148,31 +148,6 @@ const char *ast_cel_get_type_name(enum ast_cel_event_type type);
*/
enum ast_cel_event_type ast_cel_str_to_event_type(const char *name);
-/*!
- * \brief Check and potentially retire a Linked ID
- *
- * \param chan channel that is being destroyed or its linkedid is changing
- *
- * \since 1.8
- *
- * If at least one CEL backend is looking for CEL_LINKEDID_END
- * events, this function will check if the given channel is the last
- * active channel with that linkedid, and if it is, emit a
- * CEL_LINKEDID_END event.
- *
- * \return nothing
- */
-void ast_cel_check_retire_linkedid(struct ast_channel *chan);
-
-/*!
- * \brief Inform CEL that a new linkedid is being used
- * \since 11
- *
- * \retval -1 error
- * \retval 0 success
- */
-int ast_cel_linkedid_ref(const char *linkedid);
-
/*!
* \brief Create a fake channel from data in a CEL event
*
diff --git a/main/cel.c b/main/cel.c
index 8110b116e..b3802c7ee 100644
--- a/main/cel.c
+++ b/main/cel.c
@@ -634,6 +634,7 @@ static int cel_track_app(const char *const_app)
return 1;
}
+static int cel_linkedid_ref(const char *linkedid);
static int report_event_snapshot(struct ast_channel_snapshot *snapshot,
enum ast_cel_event_type event_type, const char *userdefevname,
const char *extra, const char *peer2_name)
@@ -663,7 +664,7 @@ static int report_event_snapshot(struct ast_channel_snapshot *snapshot,
/* Record the linkedid of new channels if we are tracking LINKEDID_END even if we aren't
* reporting on CHANNEL_START so we can track when to send LINKEDID_END */
if (ast_cel_track_event(AST_CEL_LINKEDID_END) && event_type == AST_CEL_CHANNEL_START && linkedid) {
- if (ast_cel_linkedid_ref(linkedid)) {
+ if (cel_linkedid_ref(linkedid)) {
return -1;
}
}
@@ -868,7 +869,7 @@ struct ast_channel *ast_cel_fabricate_channel_from_event(const struct ast_event
return tchan;
}
-int ast_cel_linkedid_ref(const char *linkedid)
+static int cel_linkedid_ref(const char *linkedid)
{
char *lid;
@@ -909,7 +910,7 @@ int ast_cel_report_event(struct ast_channel *chan, enum ast_cel_event_type event
/* Record the linkedid of new channels if we are tracking LINKEDID_END even if we aren't
* reporting on CHANNEL_START so we can track when to send LINKEDID_END */
if (ast_cel_track_event(AST_CEL_LINKEDID_END) && event_type == AST_CEL_CHANNEL_START && linkedid) {
- if (ast_cel_linkedid_ref(linkedid)) {
+ if (cel_linkedid_ref(linkedid)) {
return -1;
}
}
@@ -1114,7 +1115,11 @@ static void cel_channel_linkedid_change(
return;
}
+ ast_assert(!ast_strlen_zero(new_snapshot->linkedid));
+ ast_assert(!ast_strlen_zero(old_snapshot->linkedid));
+
if (strcmp(old_snapshot->linkedid, new_snapshot->linkedid)) {
+ cel_linkedid_ref(new_snapshot->linkedid);
check_retire_linkedid(old_snapshot);
}
}