From 606112e234e1604b7998b54648cd02966bf959b6 Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Sun, 16 Aug 2009 19:27:39 +0000 Subject: [PATCH] Add two more API calls for getting the current glue and channel in bridging code. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@212390 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/rtp_engine.h | 40 +++++++++++++++++++++++++++++++++++ main/rtp_engine.c | 24 +++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/include/asterisk/rtp_engine.h b/include/asterisk/rtp_engine.h index 605cc17a77..5d5ae3f7b1 100644 --- a/include/asterisk/rtp_engine.h +++ b/include/asterisk/rtp_engine.h @@ -1658,6 +1658,46 @@ int ast_rtp_instance_get_hold_timeout(struct ast_rtp_instance *instance); */ struct ast_rtp_engine *ast_rtp_instance_get_engine(struct ast_rtp_instance *instance); +/*! + * \brief Get the RTP glue in use on an RTP instance + * + * \param instance The RTP instance + * + * \retval pointer to the glue + * + * Example: + * + * \code + * struct ast_rtp_glue *glue = ast_rtp_instance_get_active_glue(instance); + * \endcode + * + * This gets the RTP glue currently in use on the RTP instance pointed to by 'instance'. + * + * \since 1.6.3 + */ +struct ast_rtp_glue *ast_rtp_instance_get_active_glue(struct ast_rtp_instance *instance); + +/*! + * \brief Get the channel that is associated with an RTP instance while in a bridge + * + * \param instance The RTP instance + * + * \retval pointer to the channel + * + * Example: + * + * \code + * struct ast_channel *chan = ast_rtp_instance_get_chan(instance); + * \endcode + * + * This gets the channel associated with the RTP instance pointed to by 'instance'. + * + * \note This will only return a channel while in a local or remote bridge. + * + * \since 1.6.3 + */ +struct ast_channel *ast_rtp_instance_get_chan(struct ast_rtp_instance *instance); + #if defined(__cplusplus) || defined(c_plusplus) } #endif diff --git a/main/rtp_engine.c b/main/rtp_engine.c index 5d4bdac106..ee45bfc070 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -63,6 +63,10 @@ struct ast_rtp_instance { int holdtimeout; /*! DTMF mode in use */ enum ast_rtp_dtmf_mode dtmf_mode; + /*! Glue currently in use */ + struct ast_rtp_glue *glue; + /*! Channel associated with the instance */ + struct ast_channel *chan; }; /*! List of RTP engines that are currently registered */ @@ -1233,6 +1237,11 @@ enum ast_bridge_result ast_rtp_instance_bridge(struct ast_channel *c0, struct as goto done; } + instance0->glue = glue0; + instance1->glue = glue1; + instance0->chan = c0; + instance1->chan = c1; + /* Depending on the end result for bridging either do a local bridge or remote bridge */ if (audio_glue0_res == AST_RTP_GLUE_RESULT_LOCAL || audio_glue1_res == AST_RTP_GLUE_RESULT_LOCAL) { ast_verbose(VERBOSE_PREFIX_3 "Locally bridging %s and %s\n", c0->name, c1->name); @@ -1244,6 +1253,11 @@ enum ast_bridge_result ast_rtp_instance_bridge(struct ast_channel *c0, struct as fo, rc, c0->tech_pvt, c1->tech_pvt); } + instance0->glue = NULL; + instance1->glue = NULL; + instance0->chan = NULL; + instance1->chan = NULL; + unlock_chans = 0; done: @@ -1620,3 +1634,13 @@ struct ast_rtp_engine *ast_rtp_instance_get_engine(struct ast_rtp_instance *inst { return instance->engine; } + +struct ast_rtp_glue *ast_rtp_instance_get_active_glue(struct ast_rtp_instance *instance) +{ + return instance->glue; +} + +struct ast_channel *ast_rtp_instance_get_chan(struct ast_rtp_instance *instance) +{ + return instance->chan; +}