Author: mmichelson
Date: Fri Aug  2 09:39:56 2013
New Revision: 396123

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=396123
Log:
Resolve conflict and reset automerge.


Added:
    team/mmichelson/queue_bugbug/include/asterisk/pickup.h
      - copied unchanged from r396107, trunk/include/asterisk/pickup.h
    team/mmichelson/queue_bugbug/main/pickup.c
      - copied unchanged from r396107, trunk/main/pickup.c
Modified:
    team/mmichelson/queue_bugbug/   (props changed)
    team/mmichelson/queue_bugbug/CHANGES
    team/mmichelson/queue_bugbug/UPGRADE.txt
    team/mmichelson/queue_bugbug/apps/app_chanspy.c
    team/mmichelson/queue_bugbug/apps/app_directed_pickup.c
    team/mmichelson/queue_bugbug/channels/chan_dahdi.c
    team/mmichelson/queue_bugbug/channels/chan_gtalk.c
    team/mmichelson/queue_bugbug/channels/chan_iax2.c
    team/mmichelson/queue_bugbug/channels/chan_mgcp.c
    team/mmichelson/queue_bugbug/channels/chan_misdn.c
    team/mmichelson/queue_bugbug/channels/chan_oss.c
    team/mmichelson/queue_bugbug/channels/chan_sip.c
    team/mmichelson/queue_bugbug/channels/chan_skinny.c
    team/mmichelson/queue_bugbug/channels/chan_unistim.c
    team/mmichelson/queue_bugbug/channels/sig_analog.c
    team/mmichelson/queue_bugbug/funcs/func_channel.c
    team/mmichelson/queue_bugbug/include/asterisk/_private.h
    team/mmichelson/queue_bugbug/include/asterisk/astobj2.h
    team/mmichelson/queue_bugbug/include/asterisk/channel.h
    team/mmichelson/queue_bugbug/include/asterisk/features.h
    team/mmichelson/queue_bugbug/include/asterisk/parking.h
    team/mmichelson/queue_bugbug/include/asterisk/stasis_bridges.h
    team/mmichelson/queue_bugbug/include/asterisk/strings.h
    team/mmichelson/queue_bugbug/main/asterisk.c
    team/mmichelson/queue_bugbug/main/astobj2.c
    team/mmichelson/queue_bugbug/main/bridge.c
    team/mmichelson/queue_bugbug/main/bridge_channel.c
    team/mmichelson/queue_bugbug/main/cdr.c
    team/mmichelson/queue_bugbug/main/cel.c
    team/mmichelson/queue_bugbug/main/channel.c
    team/mmichelson/queue_bugbug/main/channel_internal_api.c
    team/mmichelson/queue_bugbug/main/features.c
    team/mmichelson/queue_bugbug/main/manager_bridges.c
    team/mmichelson/queue_bugbug/main/pbx.c
    team/mmichelson/queue_bugbug/main/rtp_engine.c
    team/mmichelson/queue_bugbug/main/stasis_bridges.c
    team/mmichelson/queue_bugbug/main/strings.c
    team/mmichelson/queue_bugbug/res/parking/parking_applications.c
    team/mmichelson/queue_bugbug/res/parking/parking_bridge.c
    team/mmichelson/queue_bugbug/res/parking/parking_manager.c
    team/mmichelson/queue_bugbug/res/res_parking.c
    team/mmichelson/queue_bugbug/res/res_pjsip.c
    team/mmichelson/queue_bugbug/res/res_pjsip/include/res_pjsip_private.h
    team/mmichelson/queue_bugbug/res/res_pjsip/pjsip_options.c
    team/mmichelson/queue_bugbug/res/res_pjsip_notify.c
    team/mmichelson/queue_bugbug/res/res_pjsip_outbound_registration.c
    team/mmichelson/queue_bugbug/res/stasis/control.c
    team/mmichelson/queue_bugbug/tests/test_cel.c
    team/mmichelson/queue_bugbug/utils/Makefile
    team/mmichelson/queue_bugbug/utils/refcounter.c

Propchange: team/mmichelson/queue_bugbug/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/mmichelson/queue_bugbug/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Aug  2 09:39:56 2013
@@ -1,1 +1,1 @@
-/trunk:1-396052
+/trunk:1-396115

Modified: team/mmichelson/queue_bugbug/CHANGES
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/CHANGES?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/CHANGES (original)
+++ team/mmichelson/queue_bugbug/CHANGES Fri Aug  2 09:39:56 2013
@@ -318,6 +318,15 @@
  * The option 'allowmultiplelogin' can now be set or overriden in a particular
    account. When set in the general context, it will act as the default
    setting for defined accounts.
+
+ * The 'BridgeAction' event was removed. It technically added no value, as the
+   Bridge Action already receives confirmation of the bridge through a
+   successful completion Event.
+
+ * The 'BridgeExec' events were removed. These events duplicated the events 
that
+   occur in the Briding API, and are conveyed now through BridgeCreate,
+   BridgeEnter, and BridgeLeave events.
+
 
 AGI (Asterisk Gateway Interface)
 ------------------

Modified: team/mmichelson/queue_bugbug/UPGRADE.txt
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/UPGRADE.txt?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/UPGRADE.txt (original)
+++ team/mmichelson/queue_bugbug/UPGRADE.txt Fri Aug  2 09:39:56 2013
@@ -185,6 +185,10 @@
  - Executing a dynamic feature on the bridge peer in a multi-party bridge will
    execute it on all peers of the activating channel.
 
+ - There is no longer an explicit 'features reload' CLI command. Features can 
still be
+   reloaded using 'module reload features'.
+
+
 Parking:
  - The arguments for the Park, ParkedCall, and ParkAndAnnounce applications 
have
    been modified significantly. See the application documents for specific 
details.

Modified: team/mmichelson/queue_bugbug/apps/app_chanspy.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/apps/app_chanspy.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/apps/app_chanspy.c (original)
+++ team/mmichelson/queue_bugbug/apps/app_chanspy.c Fri Aug  2 09:39:56 2013
@@ -637,12 +637,14 @@
        }
 
        if (ast_test_flag(flags, OPTION_BARGE | OPTION_DTMF_SWITCH_MODES)) {
+               RAII_VAR(struct ast_channel *, bridged, 
ast_channel_bridge_peer(spyee_autochan->chan), ast_channel_cleanup);
+
                /* And this hook lets us inject audio into the channel that the 
spied on
                   channel is currently bridged with.
                */
                ast_audiohook_init(&csth.bridge_whisper_audiohook, 
AST_AUDIOHOOK_TYPE_WHISPER, "Chanspy", 0);
 
-               if ((spyee_bridge_autochan = 
ast_autochan_setup(ast_bridged_channel(spyee_autochan->chan)))) {
+               if ((spyee_bridge_autochan = ast_autochan_setup(bridged))) {
                        ast_channel_lock(spyee_bridge_autochan->chan);
                        if (start_spying(spyee_bridge_autochan, spyer_name, 
&csth.bridge_whisper_audiohook)) {
                                ast_log(LOG_WARNING, "Unable to attach barge 
audiohook on spyee %s. Barge mode disabled!\n", name);
@@ -935,7 +937,7 @@
                                break;
                        }
 
-                       if (ast_test_flag(flags, OPTION_BRIDGED) && 
!ast_bridged_channel(autochan->chan)) {
+                       if (ast_test_flag(flags, OPTION_BRIDGED) && 
!ast_channel_is_bridged(autochan->chan)) {
                                continue;
                        }
 

Modified: team/mmichelson/queue_bugbug/apps/app_directed_pickup.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/apps/app_directed_pickup.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/apps/app_directed_pickup.c (original)
+++ team/mmichelson/queue_bugbug/apps/app_directed_pickup.c Fri Aug  2 09:39:56 
2013
@@ -43,7 +43,7 @@
 #include "asterisk/module.h"
 #include "asterisk/lock.h"
 #include "asterisk/app.h"
-#include "asterisk/features.h"
+#include "asterisk/pickup.h"
 #include "asterisk/manager.h"
 #include "asterisk/callerid.h"
 
@@ -305,7 +305,7 @@
        return 0;
 }
 
-/* Find channel for pick up specified by partial channel name */ 
+/* Find channel for pick up specified by partial channel name */
 static int find_by_part(void *obj, void *arg, void *data, int flags)
 {
        struct ast_channel *target = obj;/*!< Potential pickup target */
@@ -323,7 +323,7 @@
        return 0;
 }
 
-/* Attempt to pick up specified by partial channel name */ 
+/* Attempt to pick up specified by partial channel name */
 static int pickup_by_part(struct ast_channel *chan, const char *part)
 {
        struct ast_channel *target;/*!< Potential pickup target */

Modified: team/mmichelson/queue_bugbug/channels/chan_dahdi.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/chan_dahdi.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/chan_dahdi.c (original)
+++ team/mmichelson/queue_bugbug/channels/chan_dahdi.c Fri Aug  2 09:39:56 2013
@@ -102,6 +102,7 @@
 #include "asterisk/callerid.h"
 #include "asterisk/adsi.h"
 #include "asterisk/cli.h"
+#include "asterisk/pickup.h"
 #include "asterisk/features.h"
 #include "asterisk/musiconhold.h"
 #include "asterisk/say.h"
@@ -1741,7 +1742,7 @@
 
 static void *my_get_sigpvt_bridged_channel(struct ast_channel *chan)
 {
-       struct ast_channel *bridged = ast_bridged_channel(chan);
+       RAII_VAR(struct ast_channel *, bridged, ast_channel_bridge_peer(chan), 
ast_channel_cleanup);
 
        if (bridged && ast_channel_tech(bridged) == &dahdi_tech) {
                struct dahdi_pvt *p = ast_channel_tech_pvt(bridged);
@@ -9736,12 +9737,15 @@
                                struct ast_channel *nbridge =
                                        p->subs[SUB_THREEWAY].owner;
                                struct dahdi_pvt *pbridge = NULL;
+                               RAII_VAR(struct ast_channel *, bridged, nbridge 
? ast_channel_bridge_peer(nbridge) : NULL, ast_channel_cleanup);
+
                                /* set up the private struct of the bridged 
one, if any */
-                               if (nbridge && ast_bridged_channel(nbridge))
-                                       pbridge = 
ast_channel_tech_pvt(ast_bridged_channel(nbridge));
+                               if (nbridge && bridged) {
+                                       pbridge = ast_channel_tech_pvt(bridged);
+                               }
                                if (nbridge && pbridge &&
                                        (ast_channel_tech(nbridge) == 
&dahdi_tech) &&
-                                       
(ast_channel_tech(ast_bridged_channel(nbridge)) == &dahdi_tech) &&
+                                       (ast_channel_tech(bridged) == 
&dahdi_tech) &&
                                        ISTRUNK(pbridge)) {
                                        int func = DAHDI_FLASH;
                                        /* Clear out the dial buffer */

Modified: team/mmichelson/queue_bugbug/channels/chan_gtalk.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/chan_gtalk.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/chan_gtalk.c (original)
+++ team/mmichelson/queue_bugbug/channels/chan_gtalk.c Fri Aug  2 09:39:56 2013
@@ -85,7 +85,7 @@
 #include "asterisk/abstract_jb.h"
 #include "asterisk/jabber.h"
 #include "asterisk/jingle.h"
-#include "asterisk/features.h"
+#include "asterisk/parking.h"
 #include "asterisk/stasis_channels.h"
 
 #define GOOGLE_CONFIG          "gtalk.conf"
@@ -2319,8 +2319,8 @@
  * Module loading including tests for configuration or dependencies.
  * This function can return AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_DECLINE,
  * or AST_MODULE_LOAD_SUCCESS. If a dependency or environment variable fails
- * tests return AST_MODULE_LOAD_FAILURE. If the module can not load the 
- * configuration file or other non-critical problem return 
+ * tests return AST_MODULE_LOAD_FAILURE. If the module can not load the
+ * configuration file or other non-critical problem return
  * AST_MODULE_LOAD_DECLINE. On success return AST_MODULE_LOAD_SUCCESS.
  */
 static int load_module(void)

Modified: team/mmichelson/queue_bugbug/channels/chan_iax2.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/chan_iax2.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/chan_iax2.c (original)
+++ team/mmichelson/queue_bugbug/channels/chan_iax2.c Fri Aug  2 09:39:56 2013
@@ -4049,7 +4049,7 @@
        int ret;
        int needfree = 0;
        struct ast_channel *owner = NULL;
-       struct ast_channel *bridge = NULL;
+       RAII_VAR(struct ast_channel *, bridge, NULL, ast_channel_cleanup);
 
        /*
         * Clear fr->af.data if there is no data in the buffer.  Things
@@ -4096,8 +4096,9 @@
                iax2_frame_free(fr);
                return -1;
        }
-       if ((owner = iaxs[fr->callno]->owner))
-               bridge = ast_bridged_channel(owner);
+       if ((owner = iaxs[fr->callno]->owner)) {
+               bridge = ast_channel_bridge_peer(owner);
+       }
 
        /* if the user hasn't requested we force the use of the jitterbuffer, 
and we're bridged to
         * a channel that can accept jitter, then flush and suspend the jb, and 
send this frame straight through */

Modified: team/mmichelson/queue_bugbug/channels/chan_mgcp.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/chan_mgcp.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/chan_mgcp.c (original)
+++ team/mmichelson/queue_bugbug/channels/chan_mgcp.c Fri Aug  2 09:39:56 2013
@@ -59,6 +59,7 @@
 #include "asterisk/channel.h"
 #include "asterisk/config.h"
 #include "asterisk/module.h"
+#include "asterisk/pickup.h"
 #include "asterisk/pbx.h"
 #include "asterisk/sched.h"
 #include "asterisk/io.h"
@@ -921,7 +922,6 @@
 {
        struct mgcp_subchannel *sub = ast_channel_tech_pvt(ast);
        struct mgcp_endpoint *p = sub->parent;
-       struct ast_channel *bridged;
 
        ast_debug(1, "mgcp_hangup(%s)\n", ast_channel_name(ast));
        if (!ast_channel_tech_pvt(ast)) {
@@ -968,10 +968,11 @@
        }
        sub->cxident[0] = '\0';
        if ((sub == p->sub) && sub->next->owner) {
+               RAII_VAR(struct ast_channel *, bridged, 
ast_channel_bridge_peer(sub->next->owner), ast_channel_cleanup);
+
                if (p->hookstate == MGCP_OFFHOOK) {
-                       if (sub->next->owner && 
ast_bridged_channel(sub->next->owner)) {
+                       if (sub->next->owner && bridged) {
                                /* ncs fix! */
-                               bridged = ast_bridged_channel(sub->next->owner);
                                transmit_notify_request_with_callerid(p->sub, 
(p->ncs ? "L/wt1" : "L/wt"),
                                        
S_COR(ast_channel_caller(bridged)->id.number.valid, 
ast_channel_caller(bridged)->id.number.str, ""),
                                        
S_COR(ast_channel_caller(bridged)->id.name.valid, 
ast_channel_caller(bridged)->id.name.str, ""));
@@ -981,8 +982,7 @@
                        p->sub = sub->next;
                        p->sub->cxmode = MGCP_CX_RECVONLY;
                        transmit_modify_request(p->sub);
-                       if (sub->next->owner && 
ast_bridged_channel(sub->next->owner)) {
-                               bridged = ast_bridged_channel(sub->next->owner);
+                       if (sub->next->owner && bridged) {
                                transmit_notify_request_with_callerid(p->sub, 
"L/rg",
                                        
S_COR(ast_channel_caller(bridged)->id.number.valid, 
ast_channel_caller(bridged)->id.number.str, ""),
                                        
S_COR(ast_channel_caller(bridged)->id.name.valid, 
ast_channel_caller(bridged)->id.name.str, ""));

Modified: team/mmichelson/queue_bugbug/channels/chan_misdn.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/chan_misdn.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/chan_misdn.c (original)
+++ team/mmichelson/queue_bugbug/channels/chan_misdn.c Fri Aug  2 09:39:56 2013
@@ -104,6 +104,7 @@
 #include "asterisk/format_cap.h"
 #include "asterisk/features_config.h"
 #include "asterisk/bridge.h"
+#include "asterisk/pickup.h"
 
 #include "chan_misdn_config.h"
 #include "isdn_lib.h"
@@ -3442,6 +3443,7 @@
 
 static void export_aoc_vars(int originator, struct ast_channel *ast, struct 
misdn_bchannel *bc)
 {
+       RAII_VAR(struct ast_channel *, chan, NULL, ast_channel_cleanup);
        char buf[128];
 
        if (!bc->AOCD_need_export || !ast) {
@@ -3449,46 +3451,48 @@
        }
 
        if (originator == ORG_AST) {
-               ast = ast_bridged_channel(ast);
-               if (!ast) {
+               chan = ast_channel_bridge_peer(ast);
+               if (!chan) {
                        return;
                }
+       } else {
+               chan = ast_channel_ref(ast);
        }
 
        switch (bc->AOCDtype) {
        case Fac_AOCDCurrency:
-               pbx_builtin_setvar_helper(ast, "AOCD_Type", "currency");
+               pbx_builtin_setvar_helper(chan, "AOCD_Type", "currency");
                if (bc->AOCD.currency.chargeNotAvailable) {
-                       pbx_builtin_setvar_helper(ast, "AOCD_ChargeAvailable", 
"no");
+                       pbx_builtin_setvar_helper(chan, "AOCD_ChargeAvailable", 
"no");
                } else {
-                       pbx_builtin_setvar_helper(ast, "AOCD_ChargeAvailable", 
"yes");
+                       pbx_builtin_setvar_helper(chan, "AOCD_ChargeAvailable", 
"yes");
                        if (bc->AOCD.currency.freeOfCharge) {
-                               pbx_builtin_setvar_helper(ast, 
"AOCD_FreeOfCharge", "yes");
+                               pbx_builtin_setvar_helper(chan, 
"AOCD_FreeOfCharge", "yes");
                        } else {
-                               pbx_builtin_setvar_helper(ast, 
"AOCD_FreeOfCharge", "no");
+                               pbx_builtin_setvar_helper(chan, 
"AOCD_FreeOfCharge", "no");
                                if (snprintf(buf, sizeof(buf), "%d %s", 
bc->AOCD.currency.currencyAmount * bc->AOCD.currency.multiplier, 
bc->AOCD.currency.currency) < sizeof(buf)) {
-                                       pbx_builtin_setvar_helper(ast, 
"AOCD_Amount", buf);
+                                       pbx_builtin_setvar_helper(chan, 
"AOCD_Amount", buf);
                                        if (bc->AOCD.currency.billingId >= 0 && 
snprintf(buf, sizeof(buf), "%d", bc->AOCD.currency.billingId) < sizeof(buf)) {
-                                               pbx_builtin_setvar_helper(ast, 
"AOCD_BillingId", buf);
+                                               pbx_builtin_setvar_helper(chan, 
"AOCD_BillingId", buf);
                                        }
                                }
                        }
                }
                break;
        case Fac_AOCDChargingUnit:
-               pbx_builtin_setvar_helper(ast, "AOCD_Type", "charging_unit");
+               pbx_builtin_setvar_helper(chan, "AOCD_Type", "charging_unit");
                if (bc->AOCD.chargingUnit.chargeNotAvailable) {
-                       pbx_builtin_setvar_helper(ast, "AOCD_ChargeAvailable", 
"no");
+                       pbx_builtin_setvar_helper(chan, "AOCD_ChargeAvailable", 
"no");
                } else {
-                       pbx_builtin_setvar_helper(ast, "AOCD_ChargeAvailable", 
"yes");
+                       pbx_builtin_setvar_helper(chan, "AOCD_ChargeAvailable", 
"yes");
                        if (bc->AOCD.chargingUnit.freeOfCharge) {
-                               pbx_builtin_setvar_helper(ast, 
"AOCD_FreeOfCharge", "yes");
+                               pbx_builtin_setvar_helper(chan, 
"AOCD_FreeOfCharge", "yes");
                        } else {
-                               pbx_builtin_setvar_helper(ast, 
"AOCD_FreeOfCharge", "no");
+                               pbx_builtin_setvar_helper(chan, 
"AOCD_FreeOfCharge", "no");
                                if (snprintf(buf, sizeof(buf), "%d", 
bc->AOCD.chargingUnit.recordedUnits) < sizeof(buf)) {
-                                       pbx_builtin_setvar_helper(ast, 
"AOCD_RecordedUnits", buf);
+                                       pbx_builtin_setvar_helper(chan, 
"AOCD_RecordedUnits", buf);
                                        if (bc->AOCD.chargingUnit.billingId >= 
0 && snprintf(buf, sizeof(buf), "%d", bc->AOCD.chargingUnit.billingId) < 
sizeof(buf)) {
-                                               pbx_builtin_setvar_helper(ast, 
"AOCD_BillingId", buf);
+                                               pbx_builtin_setvar_helper(chan, 
"AOCD_BillingId", buf);
                                        }
                                }
                        }
@@ -10943,7 +10947,7 @@
        case EVENT_HOLD:
        {
                int hold_allowed;
-               struct ast_channel *bridged;
+               RAII_VAR(struct ast_channel *, bridged, NULL, 
ast_channel_cleanup);
 
                misdn_cfg_get(bc->port, MISDN_CFG_HOLD_ALLOWED, &hold_allowed, 
sizeof(hold_allowed));
                if (!hold_allowed) {
@@ -10952,7 +10956,7 @@
                        break;
                }
 
-               bridged = ast_bridged_channel(ch->ast);
+               bridged = ast_channel_bridge_peer(ch->ast);
                if (bridged) {
                        chan_misdn_log(2, bc->port, "Bridge Partner is of type: 
%s\n", ast_channel_tech(bridged)->type);
                        ch->l3id = bc->l3_id;

Modified: team/mmichelson/queue_bugbug/channels/chan_oss.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/chan_oss.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/chan_oss.c (original)
+++ team/mmichelson/queue_bugbug/channels/chan_oss.c Fri Aug  2 09:39:56 2013
@@ -68,6 +68,7 @@
 #include "asterisk/causes.h"
 #include "asterisk/musiconhold.h"
 #include "asterisk/app.h"
+#include "asterisk/bridge.h"
 
 #include "console_video.h"
 
@@ -1173,7 +1174,7 @@
 static char *console_transfer(struct ast_cli_entry *e, int cmd, struct 
ast_cli_args *a)
 {
        struct chan_oss_pvt *o = find_desc(oss_active);
-       struct ast_channel *b = NULL;
+       RAII_VAR(struct ast_channel *, b, NULL, ast_channel_cleanup);
        char *tmp, *ext, *ctx;
 
        switch (cmd) {
@@ -1192,24 +1193,19 @@
                return CLI_SHOWUSAGE;
        if (o == NULL)
                return CLI_FAILURE;
-       if (o->owner == NULL || (b = ast_bridged_channel(o->owner)) == NULL) {
+       if (o->owner == NULL || !ast_channel_is_bridged(o->owner)) {
                ast_cli(a->fd, "There is no call to transfer\n");
                return CLI_SUCCESS;
        }
 
        tmp = ast_ext_ctx(a->argv[2], &ext, &ctx);
-       if (ctx == NULL)                        /* supply default context if 
needed */
+       if (ctx == NULL) {                      /* supply default context if 
needed */
                ctx = ast_strdupa(ast_channel_context(o->owner));
-       if (!ast_exists_extension(b, ctx, ext, 1,
-               S_COR(ast_channel_caller(b)->id.number.valid, 
ast_channel_caller(b)->id.number.str, NULL))) {
-               ast_cli(a->fd, "No such extension exists\n");
-       } else {
-               ast_cli(a->fd, "Whee, transferring %s to %s@%s.\n", 
ast_channel_name(b), ext, ctx);
-               if (ast_async_goto(b, ctx, ext, 1))
-                       ast_cli(a->fd, "Failed to transfer :(\n");
-       }
-       if (tmp)
-               ast_free(tmp);
+       }
+       if (ast_bridge_transfer_blind(1, o->owner, ext, ctx, NULL, NULL) != 
AST_BRIDGE_TRANSFER_SUCCESS) {
+               ast_log(LOG_WARNING, "Unable to transfer call from channel 
%s\n", ast_channel_name(o->owner));
+       }
+       ast_free(tmp);
        return CLI_SUCCESS;
 }
 

Modified: team/mmichelson/queue_bugbug/channels/chan_sip.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/chan_sip.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/chan_sip.c (original)
+++ team/mmichelson/queue_bugbug/channels/chan_sip.c Fri Aug  2 09:39:56 2013
@@ -259,7 +259,8 @@
 #include "asterisk/cli.h"
 #include "asterisk/musiconhold.h"
 #include "asterisk/dsp.h"
-#include "asterisk/features.h"
+#include "asterisk/pickup.h"
+#include "asterisk/parking.h"
 #include "asterisk/srv.h"
 #include "asterisk/astdb.h"
 #include "asterisk/causes.h"
@@ -7270,7 +7271,7 @@
                        }
 
                        if (!p->pendinginvite) {
-                               struct ast_channel *bridge = 
ast_bridged_channel(oldowner);
+                               RAII_VAR(struct ast_channel *, bridge, 
ast_channel_bridge_peer(oldowner), ast_channel_cleanup);
                                char quality_buf[AST_MAX_USER_FIELD], *quality;
 
                                /* We need to get the lock on bridge because 
ast_rtp_instance_set_stats_vars will attempt
@@ -7281,7 +7282,6 @@
                                        do {
                                                
CHANNEL_DEADLOCK_AVOIDANCE(oldowner);
                                        } while (sip_pvt_trylock(p));
-                                       bridge = ast_bridged_channel(oldowner);
                                }
 
                                if (p->rtp) {
@@ -18006,10 +18006,22 @@
 
        /* Give useful transfer information to the dialplan */
        if (transferer->owner) {
-               struct ast_channel *peer = 
ast_bridged_channel(transferer->owner);
+               RAII_VAR(struct ast_channel *, peer, 
ast_channel_bridge_peer(transferer->owner), ast_channel_cleanup);
+
+               /*! pbx_builtin_setvar_helper will attempt to lock the channel. 
We need
+                * to be sure it's already locked here so we don't deadlock.
+                */
+               while (peer && ast_channel_trylock(peer)) {
+                       sip_pvt_unlock(transferer);
+                       do {
+                               CHANNEL_DEADLOCK_AVOIDANCE(transferer->owner);
+                       } while (sip_pvt_trylock(transferer));
+               }
+
                if (peer) {
                        pbx_builtin_setvar_helper(peer, "SIPREFERRINGCONTEXT", 
transferer->context);
                        pbx_builtin_setvar_helper(peer, "SIPREFERREDBYHDR", 
p_referred_by);
+                       ast_channel_unlock(peer);
                }
        }
 
@@ -26353,7 +26365,6 @@
 {
        struct ast_channel *c=NULL;
        int res;
-       struct ast_channel *bridged_to;
        const char *required;
 
        /* If we have an INCOMING invite that we haven't answered, terminate 
that transaction */
@@ -26374,7 +26385,7 @@
        /* Get RTCP quality before end of call */
        if (p->do_history || p->owner) {
                char quality_buf[AST_MAX_USER_FIELD], *quality;
-               struct ast_channel *bridge = p->owner ? 
ast_bridged_channel(p->owner) : NULL;
+               RAII_VAR(struct ast_channel *, bridge, p->owner ? 
ast_channel_bridge_peer(p->owner) : NULL, ast_channel_cleanup);
 
                /* We need to get the lock on bridge because 
ast_rtp_instance_set_stats_vars will attempt
                 * to lock the bridge. This may get hairy...
@@ -26387,7 +26398,6 @@
                                usleep(1);
                                sip_pvt_lock(p);
                        } while (p->owner && ast_channel_trylock(p->owner));
-                       bridge = p->owner ? ast_bridged_channel(p->owner) : 
NULL;
                }
 
 
@@ -26451,7 +26461,7 @@
                if (!res) {
                        c = p->owner;
                        if (c) {
-                               bridged_to = ast_bridged_channel(c);
+                               RAII_VAR(struct ast_channel *, bridged_to, 
ast_channel_bridge_peer(c), ast_channel_cleanup);
                                if (bridged_to) {
                                        /* Don't actually hangup here... */
                                        ast_queue_unhold(c);

Modified: team/mmichelson/queue_bugbug/channels/chan_skinny.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/chan_skinny.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/chan_skinny.c (original)
+++ team/mmichelson/queue_bugbug/channels/chan_skinny.c Fri Aug  2 09:39:56 2013
@@ -68,7 +68,7 @@
 #include "asterisk/manager.h"
 #include "asterisk/say.h"
 #include "asterisk/astdb.h"
-#include "asterisk/features.h"
+#include "asterisk/pickup.h"
 #include "asterisk/app.h"
 #include "asterisk/musiconhold.h"
 #include "asterisk/utils.h"
@@ -4357,10 +4357,12 @@
                                l->label);
                        if (verbose) {
                                AST_LIST_TRAVERSE(&l->sub, sub, list) {
+                                       RAII_VAR(struct ast_channel *, bridged, 
ast_channel_bridge_peer(sub->owner), ao2_cleanup);
+
                                        ast_cli(fd, "  %s> %s to %s\n",
                                                (sub == l->activesub?"Active  
":"Inactive"),
                                                ast_channel_name(sub->owner),
-                                               
(ast_bridged_channel(sub->owner)?ast_channel_name(ast_bridged_channel(sub->owner)):"")
+                                               bridged ? 
ast_channel_name(bridged) : ""
                                        );
                                }
                        }
@@ -7170,6 +7172,8 @@
                }
 
                if ((sub && sub->owner) && (ast_channel_state(sub->owner) ==  
AST_STATE_UP)) {
+                       RAII_VAR(struct ast_channel *, bridged, NULL, 
ast_channel_cleanup);
+
                        c = sub->owner;
                        ast_channel_lock(c);
                        bridge_channel = ast_channel_get_bridge_channel(c);

Modified: team/mmichelson/queue_bugbug/channels/chan_unistim.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/chan_unistim.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/chan_unistim.c (original)
+++ team/mmichelson/queue_bugbug/channels/chan_unistim.c Fri Aug  2 09:39:56 
2013
@@ -73,7 +73,7 @@
 #include "asterisk/musiconhold.h"
 #include "asterisk/causes.h"
 #include "asterisk/indications.h"
-#include "asterisk/features.h"
+#include "asterisk/pickup.h"
 #include "asterisk/astobj2.h"
 #include "asterisk/astdb.h"
 #include "asterisk/features_config.h"

Modified: team/mmichelson/queue_bugbug/channels/sig_analog.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/channels/sig_analog.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/channels/sig_analog.c (original)
+++ team/mmichelson/queue_bugbug/channels/sig_analog.c Fri Aug  2 09:39:56 2013
@@ -34,6 +34,7 @@
 
 #include "asterisk/utils.h"
 #include "asterisk/options.h"
+#include "asterisk/pickup.h"
 #include "asterisk/pbx.h"
 #include "asterisk/file.h"
 #include "asterisk/callerid.h"

Modified: team/mmichelson/queue_bugbug/funcs/func_channel.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/funcs/func_channel.c?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/funcs/func_channel.c (original)
+++ team/mmichelson/queue_bugbug/funcs/func_channel.c Fri Aug  2 09:39:56 2013
@@ -495,10 +495,10 @@
                }
                ast_channel_unlock(chan);
        } else if (!strcasecmp(data, "peer")) {
-               struct ast_channel *p;
-
-               ast_channel_lock(chan);
-               p = ast_bridged_channel(chan);
+               RAII_VAR(struct ast_channel *, p, NULL, ast_channel_cleanup);
+
+               ast_channel_lock(chan);
+               p = ast_channel_bridge_peer(chan);
                if (p || ast_channel_tech(chan)) /* dummy channel? if so, we 
hid the peer name in the language */
                        ast_copy_string(buf, (p ? ast_channel_name(p) : ""), 
len);
                else {

Modified: team/mmichelson/queue_bugbug/include/asterisk/_private.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/include/asterisk/_private.h?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/include/asterisk/_private.h (original)
+++ team/mmichelson/queue_bugbug/include/asterisk/_private.h Fri Aug  2 
09:39:56 2013
@@ -8,7 +8,7 @@
  *
  * \brief
  * Prototypes for public functions only of internal interest,
- * 
+ *
  */
 
 
@@ -25,7 +25,7 @@
 void ast_channels_init(void);          /*!< Provided by channel.c */
 void ast_builtins_init(void);          /*!< Provided by cli.c */
 int ast_cli_perms_init(int reload);    /*!< Provided by cli.c */
-int dnsmgr_init(void);                 /*!< Provided by dnsmgr.c */ 
+int dnsmgr_init(void);                 /*!< Provided by dnsmgr.c */
 void dnsmgr_start_refresh(void);       /*!< Provided by dnsmgr.c */
 int dnsmgr_reload(void);               /*!< Provided by dnsmgr.c */
 void threadstorage_init(void);         /*!< Provided by threadstorage.c */
@@ -109,9 +109,9 @@
  */
 void ast_process_pending_reloads(void);
 
-/*! \brief Load XML documentation. Provided by xmldoc.c 
+/*! \brief Load XML documentation. Provided by xmldoc.c
  *  \retval 1 on error.
- *  \retval 0 on success. 
+ *  \retval 0 on success.
  */
 int ast_xmldoc_load_documentation(void);
 

Modified: team/mmichelson/queue_bugbug/include/asterisk/astobj2.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/include/asterisk/astobj2.h?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/include/asterisk/astobj2.h (original)
+++ team/mmichelson/queue_bugbug/include/asterisk/astobj2.h Fri Aug  2 09:39:56 
2013
@@ -1938,54 +1938,4 @@
 #endif
 void ao2_iterator_cleanup(struct ao2_iterator *iter);
 
-
-/* XXX TODO BUGBUG and all the other things...
- * These functions should eventually be moved elsewhere, but the utils folder
- * won't compile with them in strings.h
- */
-
-/*!
- * \since 12
- * \brief Allocates a hash container for bare strings
- *
- * \param buckets The number of buckets to use for the hash container
- *
- * \retval AO2 container for strings
- * \retval NULL if allocation failed
- */
-#define ast_str_container_alloc(buckets) 
ast_str_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, buckets)
-
-/*!
- * \since 12
- * \brief Allocates a hash container for bare strings
- *
- * \param opts Options to be provided to the container
- * \param buckets The number of buckets to use for the hash container
- *
- * \retval AO2 container for strings
- * \retval NULL if allocation failed
- */
-struct ao2_container *ast_str_container_alloc_options(enum ao2_container_opts 
opts, int buckets);
-
-/*!
- * \since 12
- * \brief Adds a string to a string container allocated by 
ast_str_container_alloc
- *
- * \param str_container The container to which to add a string
- * \param add The string to add to the container
- *
- * \retval zero on success
- * \retval non-zero if the operation failed
- */
-int ast_str_container_add(struct ao2_container *str_container, const char 
*add);
-
-/*!
- * \since 12
- * \brief Removes a string from a string container allocated by 
ast_str_container_alloc
- *
- * \param str_container The container from which to remove a string
- * \param remove The string to remove from the container
- */
-void ast_str_container_remove(struct ao2_container *str_container, const char 
*remove);
-
 #endif /* _ASTERISK_ASTOBJ2_H */

Modified: team/mmichelson/queue_bugbug/include/asterisk/channel.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/include/asterisk/channel.h?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/include/asterisk/channel.h (original)
+++ team/mmichelson/queue_bugbug/include/asterisk/channel.h Fri Aug  2 09:39:56 
2013
@@ -2328,26 +2328,6 @@
  * \param chan Channel to masquerade
  */
 void ast_do_masquerade(struct ast_channel *chan);
-
-/*!
- * \brief Find bridged channel
- *
- * \note This function does _not_ return a reference to the bridged channel.
- * The reason for this is mostly historical.  It _should_ return a reference,
- * but it will take a lot of work to make the code base account for that.
- * So, for now, the old rules still apply for how to handle this function.
- * If this function is being used from the channel thread that owns the 
channel,
- * then a reference is already held, and channel locking is not required to
- * guarantee that the channel will stay around.  If this function is used
- * outside of the associated channel thread, the channel parameter 'chan'
- * MUST be locked before calling this function.  Also, 'chan' must remain 
locked
- * for the entire time that the result of this function is being used.
- *
- * \param chan Current channel
- *
- * \return A pointer to the bridged channel
-*/
-struct ast_channel *ast_bridged_channel(struct ast_channel *chan);
 
 /*!
  * \brief Inherits channel variable from parent to child channel

Modified: team/mmichelson/queue_bugbug/include/asterisk/features.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/include/asterisk/features.h?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/include/asterisk/features.h (original)
+++ team/mmichelson/queue_bugbug/include/asterisk/features.h Fri Aug  2 
09:39:56 2013
@@ -27,30 +27,6 @@
 #include "asterisk/pbx.h"
 #include "asterisk/linkedlists.h"
 #include "asterisk/bridge.h"
-
-#define FEATURE_MAX_LEN                11
-#define FEATURE_APP_LEN                64
-#define FEATURE_APP_ARGS_LEN   256
-#define FEATURE_SNAME_LEN      32
-#define FEATURE_EXTEN_LEN      32
-#define FEATURE_MOH_LEN                80  /* same as MAX_MUSICCLASS from 
channel.h */
-
-#define DEFAULT_PARKINGLOT "default"   /*!< Default parking lot */
-
-#define AST_FEATURE_RETURN_HANGUP           -1
-#define AST_FEATURE_RETURN_SUCCESSBREAK     0
-#define AST_FEATURE_RETURN_PBX_KEEPALIVE    AST_PBX_KEEPALIVE
-#define AST_FEATURE_RETURN_NO_HANGUP_PEER   AST_PBX_NO_HANGUP_PEER
-#define AST_FEATURE_RETURN_PASSDIGITS       21
-#define AST_FEATURE_RETURN_STOREDIGITS      22
-#define AST_FEATURE_RETURN_SUCCESS          23
-#define AST_FEATURE_RETURN_KEEPTRYING       24
-#define AST_FEATURE_RETURN_PARKFAILED       25
-
-#define FEATURE_SENSE_CHAN     (1 << 0)
-#define FEATURE_SENSE_PEER     (1 << 1)
-
-typedef int (*ast_feature_operation)(struct ast_channel *chan, struct 
ast_channel *peer, struct ast_bridge_config *config, const char *code, int 
sense, void *data);
 
 /*! \brief main call feature structure */
 
@@ -107,54 +83,7 @@
 int ast_bridge_add_channel(struct ast_bridge *bridge, struct ast_channel *chan,
                struct ast_bridge_features *features, int play_tone, const char 
*xfersound);
 
-/*!
- * \brief Test if a channel can be picked up.
- *
- * \param chan Channel to test if can be picked up.
- *
- * \note This function assumes that chan is locked.
- *
- * \return TRUE if channel can be picked up.
- */
-int ast_can_pickup(struct ast_channel *chan);
 
-/*!
- * \brief Find a pickup channel target by group.
- *
- * \param chan channel that initiated pickup.
- *
- * \retval target on success.  The returned channel is locked and reffed.
- * \retval NULL on error.
- */
-struct ast_channel *ast_pickup_find_by_group(struct ast_channel *chan);
-
-/*! \brief Pickup a call */
-int ast_pickup_call(struct ast_channel *chan);
-
-/*!
- * \brief Pickup a call target.
- *
- * \param chan channel that initiated pickup.
- * \param target channel to be picked up.
- *
- * \note This function assumes that target is locked.
- *
- * \retval 0 on success.
- * \retval -1 on failure.
- */
-int ast_do_pickup(struct ast_channel *chan, struct ast_channel *target);
-
-/*!
- * \brief accessor for call pickup message type
- * \since 12.0.0
- *
- * \retval pointer to the stasis message type
- * \retval NULL if not initialized
- */
-struct stasis_message_type *ast_call_pickup_type(void);
-
-/*! \brief Reload call features from features.conf */
-int ast_features_reload(void);
 
 /*!
  * \brief parse L option and read associated channel variables to set warning, 
warning frequency, and timelimit

Modified: team/mmichelson/queue_bugbug/include/asterisk/parking.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/include/asterisk/parking.h?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/include/asterisk/parking.h (original)
+++ team/mmichelson/queue_bugbug/include/asterisk/parking.h Fri Aug  2 09:39:56 
2013
@@ -29,6 +29,11 @@
  * \brief The default parking application that Asterisk expects.
  */
 #define PARK_APPLICATION "Park"
+
+/*!
+ * \brief The default parking lot
+ */
+#define DEFAULT_PARKINGLOT "default"
 
 /*!
  * \brief Defines the type of parked call message being published
@@ -40,6 +45,7 @@
        PARKED_CALL_GIVEUP,
        PARKED_CALL_UNPARKED,
        PARKED_CALL_FAILED,
+       PARKED_CALL_SWAP,
 };
 
 /*!

Modified: team/mmichelson/queue_bugbug/include/asterisk/stasis_bridges.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/include/asterisk/stasis_bridges.h?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/include/asterisk/stasis_bridges.h (original)
+++ team/mmichelson/queue_bugbug/include/asterisk/stasis_bridges.h Fri Aug  2 
09:39:56 2013
@@ -215,8 +215,10 @@
  *
  * \param bridge The bridge a channel entered
  * \param chan The channel that entered the bridge
- */
-void ast_bridge_publish_enter(struct ast_bridge *bridge, struct ast_channel 
*chan);
+ * \param swap The channel being swapped out of the bridge
+ */
+void ast_bridge_publish_enter(struct ast_bridge *bridge, struct ast_channel 
*chan,
+               struct ast_channel *swap);
 
 /*!
  * \since 12

Modified: team/mmichelson/queue_bugbug/include/asterisk/strings.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/queue_bugbug/include/asterisk/strings.h?view=diff&rev=396123&r1=396122&r2=396123
==============================================================================
--- team/mmichelson/queue_bugbug/include/asterisk/strings.h (original)
+++ team/mmichelson/queue_bugbug/include/asterisk/strings.h Fri Aug  2 09:39:56 
2013
@@ -29,6 +29,7 @@
 
 #include "asterisk/utils.h"
 #include "asterisk/threadstorage.h"
+#include "asterisk/astobj2.h"
 
 #if defined(DEBUG_OPAQUE)
 #define __AST_STR_USED used2
@@ -1109,4 +1110,48 @@
        return str_orig;
 }
 
+/*!
+ * \since 12
+ * \brief Allocates a hash container for bare strings
+ *
+ * \param buckets The number of buckets to use for the hash container
+ *
+ * \retval AO2 container for strings
+ * \retval NULL if allocation failed
+ */
+#define ast_str_container_alloc(buckets) 
ast_str_container_alloc_options(AO2_ALLOC_OPT_LOCK_MUTEX, buckets)
+
+/*!
+ * \since 12
+ * \brief Allocates a hash container for bare strings
+ *
+ * \param opts Options to be provided to the container
+ * \param buckets The number of buckets to use for the hash container
+ *
+ * \retval AO2 container for strings
+ * \retval NULL if allocation failed
+ */
+struct ao2_container *ast_str_container_alloc_options(enum ao2_container_opts 
opts, int buckets);
+
+/*!
+ * \since 12
+ * \brief Adds a string to a string container allocated by 
ast_str_container_alloc
+ *
+ * \param str_container The container to which to add a string
+ * \param add The string to add to the container
+ *
+ * \retval zero on success
+ * \retval non-zero if the operation failed
+ */
+int ast_str_container_add(struct ao2_container *str_container, const char 
*add);
+

[... 2514 lines stripped ...]

--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to