mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
res_stasis: Extend bridge type to be a comma separated list of bridge attributes.
This change turns the bridge type field into a comma separated list of attributes. These attributes include: mixing, holding, dtmf_events, and proxy_media. By setting the various attributes a user can control the type of bridge created with the behavior they need for their application. (closes issue ASTERISK-23437) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3359/ ........ Merged revisions 410904 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410905 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
10
CHANGES
10
CHANGES
@@ -103,6 +103,16 @@ Core
|
|||||||
* Exposed sorcery-based configuration files like pjsip.conf to dialplans via
|
* Exposed sorcery-based configuration files like pjsip.conf to dialplans via
|
||||||
the new AST_SORCERY diaplan function.
|
the new AST_SORCERY diaplan function.
|
||||||
|
|
||||||
|
=======
|
||||||
|
ARI
|
||||||
|
------------------
|
||||||
|
* The live recording object on recording events now contains a target_uri
|
||||||
|
field which contains the URI of what is being recorded.
|
||||||
|
|
||||||
|
* The bridge type used when creating a bridge is now a comma separated list of
|
||||||
|
bridge properties. Valid options are: mixing, holding, dtmf_events, and
|
||||||
|
proxy_media.
|
||||||
|
|
||||||
* A channelId can now be provided when creating a channel, either in the
|
* A channelId can now be provided when creating a channel, either in the
|
||||||
uri (POST channels/my-channel-id) or as query parameter. A local channel
|
uri (POST channels/my-channel-id) or as query parameter. A local channel
|
||||||
will suffix the second channel id with ';2' unless provided as query
|
will suffix the second channel id with ';2' unless provided as query
|
||||||
|
@@ -52,7 +52,7 @@ struct ast_ari_bridges_list_args {
|
|||||||
void ast_ari_bridges_list(struct ast_variable *headers, struct ast_ari_bridges_list_args *args, struct ast_ari_response *response);
|
void ast_ari_bridges_list(struct ast_variable *headers, struct ast_ari_bridges_list_args *args, struct ast_ari_response *response);
|
||||||
/*! \brief Argument struct for ast_ari_bridges_create() */
|
/*! \brief Argument struct for ast_ari_bridges_create() */
|
||||||
struct ast_ari_bridges_create_args {
|
struct ast_ari_bridges_create_args {
|
||||||
/*! \brief Type of bridge to create. */
|
/*! \brief Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media). */
|
||||||
const char *type;
|
const char *type;
|
||||||
/*! \brief Unique ID to give to the bridge being created. */
|
/*! \brief Unique ID to give to the bridge being created. */
|
||||||
const char *bridge_id;
|
const char *bridge_id;
|
||||||
@@ -82,7 +82,7 @@ int ast_ari_bridges_create_parse_body(
|
|||||||
void ast_ari_bridges_create(struct ast_variable *headers, struct ast_ari_bridges_create_args *args, struct ast_ari_response *response);
|
void ast_ari_bridges_create(struct ast_variable *headers, struct ast_ari_bridges_create_args *args, struct ast_ari_response *response);
|
||||||
/*! \brief Argument struct for ast_ari_bridges_create_or_update_with_id() */
|
/*! \brief Argument struct for ast_ari_bridges_create_or_update_with_id() */
|
||||||
struct ast_ari_bridges_create_or_update_with_id_args {
|
struct ast_ari_bridges_create_or_update_with_id_args {
|
||||||
/*! \brief Set the type of bridge. */
|
/*! \brief Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media) to set. */
|
||||||
const char *type;
|
const char *type;
|
||||||
/*! \brief Unique ID to give to the bridge being created. */
|
/*! \brief Unique ID to give to the bridge being created. */
|
||||||
const char *bridge_id;
|
const char *bridge_id;
|
||||||
|
@@ -588,19 +588,29 @@ static void control_unlink(struct stasis_app_control *control)
|
|||||||
struct ast_bridge *stasis_app_bridge_create(const char *type, const char *name, const char *id)
|
struct ast_bridge *stasis_app_bridge_create(const char *type, const char *name, const char *id)
|
||||||
{
|
{
|
||||||
struct ast_bridge *bridge;
|
struct ast_bridge *bridge;
|
||||||
int capabilities;
|
char *requested_type, *requested_types = ast_strdupa(type);
|
||||||
|
int capabilities = 0;
|
||||||
int flags = AST_BRIDGE_FLAG_MERGE_INHIBIT_FROM | AST_BRIDGE_FLAG_MERGE_INHIBIT_TO
|
int flags = AST_BRIDGE_FLAG_MERGE_INHIBIT_FROM | AST_BRIDGE_FLAG_MERGE_INHIBIT_TO
|
||||||
| AST_BRIDGE_FLAG_SWAP_INHIBIT_FROM | AST_BRIDGE_FLAG_SWAP_INHIBIT_TO
|
| AST_BRIDGE_FLAG_SWAP_INHIBIT_FROM | AST_BRIDGE_FLAG_SWAP_INHIBIT_TO
|
||||||
| AST_BRIDGE_FLAG_TRANSFER_BRIDGE_ONLY;
|
| AST_BRIDGE_FLAG_TRANSFER_BRIDGE_ONLY;
|
||||||
|
|
||||||
if (ast_strlen_zero(type) || !strcmp(type, "mixing")) {
|
while ((requested_type = strsep(&requested_types, ","))) {
|
||||||
capabilities = AST_BRIDGE_CAPABILITY_1TO1MIX |
|
requested_type = ast_strip(requested_type);
|
||||||
AST_BRIDGE_CAPABILITY_MULTIMIX |
|
|
||||||
AST_BRIDGE_CAPABILITY_NATIVE;
|
if (!strcmp(requested_type, "mixing")) {
|
||||||
flags |= AST_BRIDGE_FLAG_SMART;
|
capabilities |= AST_BRIDGE_CAPABILITY_1TO1MIX |
|
||||||
} else if (!strcmp(type, "holding")) {
|
AST_BRIDGE_CAPABILITY_MULTIMIX |
|
||||||
capabilities = AST_BRIDGE_CAPABILITY_HOLDING;
|
AST_BRIDGE_CAPABILITY_NATIVE;
|
||||||
} else {
|
flags |= AST_BRIDGE_FLAG_SMART;
|
||||||
|
} else if (!strcmp(requested_type, "holding")) {
|
||||||
|
capabilities |= AST_BRIDGE_CAPABILITY_HOLDING;
|
||||||
|
} else if (!strcmp(requested_type, "dtmf_events") ||
|
||||||
|
!strcmp(requested_type, "proxy_media")) {
|
||||||
|
capabilities &= ~AST_BRIDGE_CAPABILITY_NATIVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!capabilities) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -26,18 +26,11 @@
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"name": "type",
|
"name": "type",
|
||||||
"description": "Type of bridge to create.",
|
"description": "Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media).",
|
||||||
"paramType": "query",
|
"paramType": "query",
|
||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false,
|
"allowMultiple": false,
|
||||||
"dataType": "string",
|
"dataType": "string"
|
||||||
"allowableValues": {
|
|
||||||
"valueType": "LIST",
|
|
||||||
"values": [
|
|
||||||
"mixing",
|
|
||||||
"holding"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "bridgeId",
|
"name": "bridgeId",
|
||||||
@@ -72,18 +65,11 @@
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"name": "type",
|
"name": "type",
|
||||||
"description": "Set the type of bridge.",
|
"description": "Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media) to set.",
|
||||||
"paramType": "query",
|
"paramType": "query",
|
||||||
"required": false,
|
"required": false,
|
||||||
"allowMultiple": false,
|
"allowMultiple": false,
|
||||||
"dataType": "string",
|
"dataType": "string"
|
||||||
"allowableValues": {
|
|
||||||
"valueType": "LIST",
|
|
||||||
"values": [
|
|
||||||
"mixing",
|
|
||||||
"holding"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "bridgeId",
|
"name": "bridgeId",
|
||||||
|
Reference in New Issue
Block a user