Dial API: Add a dial option to indicate the dialed channel will replace dialer
authorJonathan Rose <jrose@digium.com>
Fri, 5 Sep 2014 20:22:12 +0000 (20:22 +0000)
committerJonathan Rose <jrose@digium.com>
Fri, 5 Sep 2014 20:22:12 +0000 (20:22 +0000)
Adds an option to the dial API that marks an outgoing dial as replacing the dialing channel for the purpose of propagating accountcode. When it is used, AST_CHANNEL_REQUESTOR_REPLACEMENT is used instead of AST_CHANNEL_REQUESTOR_BRIDGE_PEER when setting accountcodes on the involved channels with ast_channel_req_accountcodes.

Review: https://reviewboard.asterisk.org/r/3968/
........

Merged revisions 422684 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@422697 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/dial.h
main/dial.c

index b61116f..ab92198 100644 (file)
@@ -45,6 +45,7 @@ enum ast_dial_option {
        AST_DIAL_OPTION_MUSIC,                   /*!< Play music on hold instead of ringing to the calling channel */
        AST_DIAL_OPTION_DISABLE_CALL_FORWARDING, /*!< Disable call forwarding on channels */
        AST_DIAL_OPTION_PREDIAL,                 /*!< Execute a predial subroutine before dialing */
+       AST_DIAL_OPTION_DIAL_REPLACES_SELF,      /*!< The dial operation is a replacement for the requester */
        AST_DIAL_OPTION_MAX,                     /*!< End terminator -- must always remain last */
 };
 
index 04249fd..a27ac5b 100644 (file)
@@ -205,6 +205,7 @@ static const struct ast_option_types option_types[] = {
        { AST_DIAL_OPTION_MUSIC, music_enable, music_disable },                   /*!< Play music to the caller instead of ringing */
        { AST_DIAL_OPTION_DISABLE_CALL_FORWARDING, NULL, NULL },                  /*!< Disable call forwarding on channels */
        { AST_DIAL_OPTION_PREDIAL, predial_enable, predial_disable },             /*!< Execute a subroutine on the outbound channels prior to dialing */
+       { AST_DIAL_OPTION_DIAL_REPLACES_SELF, NULL, NULL },                       /*!< The dial operation is a replacement for the requester */
        { AST_DIAL_OPTION_MAX, NULL, NULL },                                      /*!< Terminator of list */
 };
 
@@ -344,7 +345,11 @@ static int begin_dial_prerun(struct ast_dial_channel *channel, struct ast_channe
                ast_connected_line_copy_from_caller(ast_channel_connected(channel->owner), ast_channel_caller(chan));
 
                ast_channel_language_set(channel->owner, ast_channel_language(chan));
-               ast_channel_req_accountcodes(channel->owner, chan, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+               if (channel->options[AST_DIAL_OPTION_DIAL_REPLACES_SELF]) {
+                       ast_channel_req_accountcodes(channel->owner, chan, AST_CHANNEL_REQUESTOR_REPLACEMENT);
+               } else {
+                       ast_channel_req_accountcodes(channel->owner, chan, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+               }
                if (ast_strlen_zero(ast_channel_musicclass(channel->owner)))
                        ast_channel_musicclass_set(channel->owner, ast_channel_musicclass(chan));