*/
void ast_channel_internal_swap_topics(struct ast_channel *a, struct ast_channel *b);
+/*!
+ * \brief Swap endpoint_forward and endpoint_cache_forward between two channels
+ * \param a First channel
+ * \param b Second channel
+ * \return void
+ *
+ * \note
+ * This is used in masquerade to exchange endpoint details if one of the two or both
+ * the channels were created with endpoint
+ */
+void ast_channel_internal_swap_endpoint_forward_and_endpoint_cache_forward(struct ast_channel *a, struct ast_channel *b);
+
/*!
* \brief Set uniqueid and linkedid string value only (not time)
* \param chan The channel to set the uniqueid to
/* Make sure the Stasis topic on the channel is updated appropriately */
ast_channel_internal_swap_topics(clonechan, original);
+ /* Swap endpoint forward and endpoint cache forward details of the channels,
+ * so channel created with endpoint exchanges its state with other channel
+ * for proper endpoint cleanup.
+ */
+ ast_channel_internal_swap_endpoint_forward_and_endpoint_cache_forward(clonechan, original);
+
/* Swap channel names. This uses ast_channel_name_set directly, so we
* don't get any spurious rename events.
*/
b->topics = temp;
}
+void ast_channel_internal_swap_endpoint_forward_and_endpoint_cache_forward(struct ast_channel *a, struct ast_channel *b)
+{
+ struct stasis_forward *temp;
+ temp = a->endpoint_forward;
+ a->endpoint_forward = b->endpoint_forward;
+ b->endpoint_forward = temp;
+
+ temp = a->endpoint_cache_forward;
+ a->endpoint_cache_forward = b->endpoint_cache_forward;
+ b->endpoint_cache_forward = temp;
+}
+
void ast_channel_internal_set_fake_ids(struct ast_channel *chan, const char *uniqueid, const char *linkedid)
{
ast_copy_string(chan->uniqueid.unique_id, uniqueid, sizeof(chan->uniqueid.unique_id));