[asterisk-bugs] [JIRA] (ASTERISK-22107) Bridge API Enhancements - refactor and redesign ast_bridge_featuresremove interval hooks from ast_bridge_features

Matt Jordan (JIRA) noreply at issues.asterisk.org
Thu Jul 18 15:56:03 CDT 2013


Matt Jordan created ASTERISK-22107:
--------------------------------------

             Summary: Bridge API Enhancements - refactor and redesign ast_bridge_featuresremove interval hooks from ast_bridge_features
                 Key: ASTERISK-22107
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-22107
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
            Reporter: Matt Jordan


This is sub-optimal:

{noformat}
/*!
 * \brief Structure that contains features information
 */
struct ast_bridge_features {
	/*! Attached DTMF feature hooks */
	struct ao2_container *dtmf_hooks;
	/*! Attached hangup interception hooks container */
	struct ao2_container *hangup_hooks;
	/*! Attached bridge channel join interception hooks container */
	struct ao2_container *join_hooks;
	/*! Attached bridge channel leave interception hooks container */
	struct ao2_container *leave_hooks;
	/*! Attached interval hooks */
	struct ast_heap *interval_hooks;
	/*! Used to determine when interval based features should be checked */
	struct ast_timer *interval_timer;
	/*! Limits feature data */
	struct ast_bridge_features_limits *limits;
	/*! Callback to indicate when a bridge channel has started and stopped talking */
	ast_bridge_talking_indicate_callback talker_cb;
	/*! Callback to destroy any pvt data stored for the talker. */
	ast_bridge_talking_indicate_destructor talker_destructor_cb;
	/*! Talker callback pvt data */
	void *talker_pvt_data;
	/*! Feature flags that are enabled */
	struct ast_flags feature_flags;
	/*! Used to assign the sequence number to the next interval hook added. */
	unsigned int interval_sequence;
	/*! TRUE if feature_flags is setup */
	unsigned int usable:1;
	/*! TRUE if the channel/bridge is muted. */
	unsigned int mute:1;
	/*! TRUE if DTMF should be passed into the bridge tech.  */
	unsigned int dtmf_passthrough:1;
};
{noformat}

While {{ast_bridge_features}} should be the structure that holds a channel's features while it is in a bridge, there are better ways of structuring this data.
# It should structure specific information. Talk detection and other optional function callbacks should at least be put in a sub-structure.
# It should not have a different container for each type of feature. We will extend the types of features that are possible in a bridge - we should not break the ABI every time we do so. While this may mean having a few different containers, {{ao2_containers}} support selection of specific types of objects through {{ao2_callback}}. Given that these containers will not support many hooks, we should take
# Interval hooks should be reworked. An instance of an interval hook - which has its own virtual table - should be created and stored with a channel's features in the same ao2 container as the rest of the features. This should be a ref counted object. The current mechanism has bugs related to their destruction and their lifetime.




--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.asterisk.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira



More information about the asterisk-bugs mailing list