[asterisk-commits] dlee: branch dlee/ari-async-bridge r396413 - in /team/dlee/ari-async-bridge: ...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Aug 8 13:59:11 CDT 2013
Author: dlee
Date: Thu Aug 8 13:59:09 2013
New Revision: 396413
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=396413
Log:
Merged revisions 396365-396412 from http://svn.asterisk.org/svn/asterisk/trunk
Modified:
team/dlee/ari-async-bridge/ (props changed)
team/dlee/ari-async-bridge/apps/app_queue.c
team/dlee/ari-async-bridge/apps/confbridge/conf_chan_announce.c
team/dlee/ari-async-bridge/apps/confbridge/conf_chan_record.c
team/dlee/ari-async-bridge/channels/chan_bridge_media.c
team/dlee/ari-async-bridge/channels/chan_unistim.c
team/dlee/ari-async-bridge/formats/format_wav_gsm.c
team/dlee/ari-async-bridge/include/asterisk/bridge_features.h
team/dlee/ari-async-bridge/include/asterisk/channel.h
team/dlee/ari-async-bridge/main/bridge.c
team/dlee/ari-async-bridge/main/cdr.c
team/dlee/ari-async-bridge/main/cel.c
team/dlee/ari-async-bridge/main/channel.c
team/dlee/ari-async-bridge/main/channel_internal_api.c
team/dlee/ari-async-bridge/main/features.c
team/dlee/ari-async-bridge/main/manager_bridges.c
team/dlee/ari-async-bridge/main/manager_channels.c
team/dlee/ari-async-bridge/main/utils.c
Propchange: team/dlee/ari-async-bridge/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.
Propchange: team/dlee/ari-async-bridge/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Thu Aug 8 13:59:09 2013
@@ -1,1 +1,1 @@
-/trunk:1-396360
+/trunk:1-396412
Modified: team/dlee/ari-async-bridge/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/apps/app_queue.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/apps/app_queue.c (original)
+++ team/dlee/ari-async-bridge/apps/app_queue.c Thu Aug 8 13:59:09 2013
@@ -4584,10 +4584,10 @@
case AST_CONTROL_BUSY:
ast_verb(3, "%s is busy\n", ochan_name);
ast_channel_publish_dial(qe->chan, o->chan, on, "BUSY");
- do_hang(o);
endtime = (long) time(NULL);
endtime -= starttime;
rna(endtime * 1000, qe, o->chan, on, membername, qe->parent->autopausebusy);
+ do_hang(o);
if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
if (qe->parent->timeoutrestart) {
start_time_tv = ast_tvnow();
Modified: team/dlee/ari-async-bridge/apps/confbridge/conf_chan_announce.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/apps/confbridge/conf_chan_announce.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/apps/confbridge/conf_chan_announce.c (original)
+++ team/dlee/ari-async-bridge/apps/confbridge/conf_chan_announce.c Thu Aug 8 13:59:09 2013
@@ -134,7 +134,7 @@
.send_text = ast_unreal_sendtext,
.queryoption = ast_unreal_queryoption,
.setoption = ast_unreal_setoption,
- .properties = AST_CHAN_TP_ANNOUNCER,
+ .properties = AST_CHAN_TP_INTERNAL,
};
struct ast_channel_tech *conf_announce_get_tech(void)
Modified: team/dlee/ari-async-bridge/apps/confbridge/conf_chan_record.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/apps/confbridge/conf_chan_record.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/apps/confbridge/conf_chan_record.c (original)
+++ team/dlee/ari-async-bridge/apps/confbridge/conf_chan_record.c Thu Aug 8 13:59:09 2013
@@ -86,7 +86,7 @@
.call = rec_call,
.read = rec_read,
.write = rec_write,
- .properties = AST_CHAN_TP_RECORDER,
+ .properties = AST_CHAN_TP_INTERNAL,
};
struct ast_channel_tech *conf_record_get_tech(void)
Modified: team/dlee/ari-async-bridge/channels/chan_bridge_media.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/channels/chan_bridge_media.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/channels/chan_bridge_media.c (original)
+++ team/dlee/ari-async-bridge/channels/chan_bridge_media.c Thu Aug 8 13:59:09 2013
@@ -89,7 +89,7 @@
.send_text = ast_unreal_sendtext,
.queryoption = ast_unreal_queryoption,
.setoption = ast_unreal_setoption,
- .properties = AST_CHAN_TP_ANNOUNCER,
+ .properties = AST_CHAN_TP_INTERNAL,
};
static struct ast_channel_tech record_tech = {
@@ -111,7 +111,7 @@
.send_text = ast_unreal_sendtext,
.queryoption = ast_unreal_queryoption,
.setoption = ast_unreal_setoption,
- .properties = AST_CHAN_TP_RECORDER,
+ .properties = AST_CHAN_TP_INTERNAL,
};
static struct ast_channel *media_request_helper(struct ast_format_cap *cap,
Modified: team/dlee/ari-async-bridge/channels/chan_unistim.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/channels/chan_unistim.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/channels/chan_unistim.c (original)
+++ team/dlee/ari-async-bridge/channels/chan_unistim.c Thu Aug 8 13:59:09 2013
@@ -2871,7 +2871,11 @@
send_text(TEXT_LINE0, TEXT_NORMAL, pte, ustmtext("Enter the number to dial", pte));
send_text(TEXT_LINE1, TEXT_NORMAL, pte, ustmtext("and press Call", pte));
}
- send_text_status(pte, ustmtext("Call Redial BackSp Erase", pte));
+ if (ast_strlen_zero(pte->device->redial_number)) {
+ send_text_status(pte, ustmtext("Call BackSp Erase", pte));
+ } else {
+ send_text_status(pte, ustmtext("Call Redial BackSp Erase", pte));
+ }
}
pte->device->size_phone_number = 0;
@@ -3274,6 +3278,8 @@
static void key_call(struct unistimsession *pte, char keycode)
{
struct unistim_subchannel *sub = get_sub(pte->device, SUB_REAL);
+ struct unistim_subchannel *sub_3way = get_sub(pte->device, SUB_THREEWAY);
+
if ((keycode >= KEY_0) && (keycode <= KEY_SHARP)) {
if (keycode == KEY_SHARP) {
keycode = '#';
@@ -3288,22 +3294,21 @@
switch (keycode) {
case KEY_FUNC1:
if (ast_channel_state(sub->owner) == AST_STATE_UP) {
- if (get_sub(pte->device, SUB_THREEWAY)) {
+ if (sub_3way) {
close_call(pte);
}
}
break;
case KEY_FUNC2:
- if (ast_channel_state(sub->owner) == AST_STATE_RING) {
+ if (sub_3way) {
transfer_cancel_step2(pte);
- }
- if (ast_channel_state(sub->owner) == AST_STATE_UP) {
+ } else if (ast_channel_state(sub->owner) == AST_STATE_UP) {
transfer_call_step1(pte);
}
break;
case KEY_HANGUP:
case KEY_FUNC4:
- if (!get_sub(pte->device, SUB_THREEWAY)) {
+ if (!sub_3way) {
close_call(pte);
}
break;
@@ -3981,13 +3986,24 @@
send_text(TEXT_LINE1, TEXT_NORMAL, pte, pte->device->call_forward);
}
send_icon(TEXT_LINE0, FAV_ICON_REFLECT + FAV_BLINK_SLOW, pte);
- send_text_status(pte, ustmtext("Dial Redial NoFwd ", pte));
+ if (ast_strlen_zero(pte->device->redial_number)) {
+ send_text_status(pte, ustmtext("Dial NoFwd ", pte));
+ } else {
+ send_text_status(pte, ustmtext("Dial Redial NoFwd ", pte));
+ }
} else {
- if ((pte->device->extension == EXTENSION_ASK) ||
- (pte->device->extension == EXTENSION_TN)) {
- send_text_status(pte, ustmtext("Dial Redial Fwd Unregis", pte));
+ if ((pte->device->extension == EXTENSION_ASK) || (pte->device->extension == EXTENSION_TN)) {
+ if (ast_strlen_zero(pte->device->redial_number)) {
+ send_text_status(pte, ustmtext("Dial Fwd Unregis", pte));
+ } else {
+ send_text_status(pte, ustmtext("Dial Redial Fwd Unregis", pte));
+ }
} else {
- send_text_status(pte, ustmtext("Dial Redial Fwd Pickup", pte));
+ if (ast_strlen_zero(pte->device->redial_number)) {
+ send_text_status(pte, ustmtext("Dial Fwd Pickup", pte));
+ } else {
+ send_text_status(pte, ustmtext("Dial Redial Fwd Pickup", pte));
+ }
}
send_text(TEXT_LINE1, TEXT_NORMAL, pte, pte->device->maintext1);
if (pte->device->missed_call == 0) {
@@ -4773,8 +4789,8 @@
ast_verb(0, "unistim_hangup(%s) on %s@%s (STATE_%s)\n", ast_channel_name(ast), l->name, l->parent->name, ptestate_tostr(s->state));
}
sub_trans = get_sub(d, SUB_THREEWAY);
- if (sub_trans && (sub_trans->owner) && (sub->subtype == SUB_REAL) &&
- (sub->alreadygone == 0)) {
+ sub_real = get_sub(d, SUB_REAL);
+ if (sub_trans && (sub_trans->owner) && (sub->subtype == SUB_REAL)) { /* 3rd party busy or congested and transfer_cancel_step2 does not called */
if (unistimdebug) {
ast_verb(0, "Threeway call disconnected, switching to real call\n");
}
@@ -4782,16 +4798,13 @@
sub_trans->moh = 0;
sub_trans->subtype = SUB_REAL;
swap_subs(sub_trans, sub);
-
send_text_status(s, ustmtext(" Transf Hangup", s));
send_callerid_screen(s, sub_trans);
unistim_hangup_clean(ast, sub);
unistim_unalloc_sub(d, sub);
return 0;
}
- sub_real = get_sub(d, SUB_REAL);
- if (sub_real && (sub_real->owner) && (sub->subtype == SUB_THREEWAY) &&
- (sub->alreadygone == 0)) {
+ if (sub_real && (sub_real->owner) && (sub->subtype == SUB_THREEWAY)) { /* 3way call cancelled by softkey pressed */
if (unistimdebug) {
ast_verb(0, "Real call disconnected, stay in call\n");
}
Modified: team/dlee/ari-async-bridge/formats/format_wav_gsm.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/formats/format_wav_gsm.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/formats/format_wav_gsm.c (original)
+++ team/dlee/ari-async-bridge/formats/format_wav_gsm.c Thu Aug 8 13:59:09 2013
@@ -393,6 +393,17 @@
return 0;
}
+static void wav_close(struct ast_filestream *s)
+{
+ if (s->mode == O_RDONLY) {
+ return;
+ }
+
+ if (s->filename) {
+ update_header(s->f);
+ }
+}
+
static struct ast_frame *wav_read(struct ast_filestream *s, int *whennext)
{
/* Send a frame from the file to the appropriate channel */
@@ -468,7 +479,6 @@
ast_log(LOG_WARNING, "Bad write (%d/65): %s\n", res, strerror(errno));
return -1;
}
- update_header(s->f); /* XXX inefficient! */
}
return 0;
}
@@ -560,6 +570,7 @@
.trunc = wav_trunc,
.tell = wav_tell,
.read = wav_read,
+ .close = wav_close,
.buf_size = 2*GSM_FRAME_SIZE + AST_FRIENDLY_OFFSET,
.desc_size = sizeof(struct wavg_desc),
};
Modified: team/dlee/ari-async-bridge/include/asterisk/bridge_features.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/include/asterisk/bridge_features.h?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/include/asterisk/bridge_features.h (original)
+++ team/dlee/ari-async-bridge/include/asterisk/bridge_features.h Thu Aug 8 13:59:09 2013
@@ -88,7 +88,6 @@
* parking slot to which it was parked.
*/
AST_BRIDGE_BUILTIN_PARKCALL,
-/* BUGBUG does Monitor and/or MixMonitor require a two party bridge? MixMonitor is used by ConfBridge so maybe it doesn't. */
/*!
* DTMF one-touch-record toggle using Monitor app.
*
@@ -176,7 +175,6 @@
AST_BRIDGE_HOOK_TYPE_TALK,
};
-/* BUGBUG Need to be able to selectively remove DTMF, hangup, and interval hooks. */
/*! \brief Structure that is the essence of a feature hook. */
struct ast_bridge_hook {
/*! Callback that is called when hook is tripped */
Modified: team/dlee/ari-async-bridge/include/asterisk/channel.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/include/asterisk/channel.h?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/include/asterisk/channel.h (original)
+++ team/dlee/ari-async-bridge/include/asterisk/channel.h Thu Aug 8 13:59:09 2013
@@ -864,15 +864,11 @@
*/
AST_CHAN_TP_CREATESJITTER = (1 << 1),
/*!
- * \brief Channels have this property if they are an implementation detail
- * used for announcing messages; i.e. to a bridge
+ * \brief Channels with this particular technology are an implementation detail of
+ * Asterisk and should generally not be exposed or manipulated by the outside
+ * world
*/
- AST_CHAN_TP_ANNOUNCER = (1 << 2),
- /*!
- * \brief Channels have this property if they are an implementation detail
- * used for recording audio; i.e. from a bridge
- */
- AST_CHAN_TP_RECORDER = (1 << 3),
+ AST_CHAN_TP_INTERNAL = (1 << 2),
};
/*! \brief ast_channel flags */
Modified: team/dlee/ari-async-bridge/main/bridge.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/main/bridge.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/main/bridge.c (original)
+++ team/dlee/ari-async-bridge/main/bridge.c Thu Aug 8 13:59:09 2013
@@ -1482,7 +1482,6 @@
ao2_ref(bridge_channel, -1);
join_exit:;
-/* BUGBUG this is going to cause problems for DTMF atxfer attended bridge between B & C. Maybe an ast_bridge_join_internal() that does not do the after bridge goto for this case. */
ast_bridge_run_after_callback(chan);
if (!(ast_channel_softhangup_internal_flag(chan) & AST_SOFTHANGUP_ASYNCGOTO)
&& !ast_bridge_setup_after_goto(chan)) {
@@ -1960,7 +1959,6 @@
int was_in_bridge;
int res = 0;
-/* BUGBUG need bridge move stasis event and a success/fail event. */
if (bridge_channel->swap) {
ast_debug(1, "Moving %p(%s) into bridge %s swapping with %s\n",
bridge_channel, ast_channel_name(bridge_channel->chan), dst_bridge->uniqueid,
@@ -2198,6 +2196,9 @@
if (!AST_LIST_EMPTY(ast_channel_readq(chan))) {
return NULL;
}
+ if (ast_test_flag(ast_channel_flags(chan), AST_FLAG_EMULATE_DTMF)) {
+ return NULL;
+ }
if (ast_channel_has_audio_frame_or_monitor(chan)) {
/* Channel has an active monitor, audiohook, or framehook. */
return NULL;
@@ -2241,6 +2242,10 @@
return NULL;
}
if (!AST_LIST_EMPTY(ast_channel_readq(peer))) {
+ ast_channel_unlock(peer);
+ return NULL;
+ }
+ if (ast_test_flag(ast_channel_flags(peer), AST_FLAG_EMULATE_DTMF)) {
ast_channel_unlock(peer);
return NULL;
}
Modified: team/dlee/ari-async-bridge/main/cdr.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/main/cdr.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/main/cdr.c (original)
+++ team/dlee/ari-async-bridge/main/cdr.c Thu Aug 8 13:59:09 2013
@@ -1818,6 +1818,11 @@
cdr = ao2_find(active_cdrs_by_channel, peer->name, OBJ_KEY);
}
+ if (!cdr) {
+ ast_log(AST_LOG_WARNING, "No CDR for channel %s\n", caller ? caller->name : peer->name);
+ return;
+ }
+
ao2_lock(cdr);
for (it_cdr = cdr; it_cdr; it_cdr = it_cdr->next) {
if (ast_strlen_zero(dial_status)) {
@@ -1896,7 +1901,7 @@
/*! \internal \brief Filter channel snapshots by technology */
static int filter_channel_snapshot(struct ast_channel_snapshot *snapshot)
{
- return snapshot->tech_properties & (AST_CHAN_TP_ANNOUNCER | AST_CHAN_TP_RECORDER);
+ return snapshot->tech_properties & AST_CHAN_TP_INTERNAL;
}
/*! \internal \brief Filter a channel cache update */
Modified: team/dlee/ari-async-bridge/main/cel.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/main/cel.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/main/cel.c (original)
+++ team/dlee/ari-async-bridge/main/cel.c Thu Aug 8 13:59:09 2013
@@ -1103,7 +1103,7 @@
if (!snapshot) {
return 0;
}
- return snapshot->tech_properties & (AST_CHAN_TP_ANNOUNCER | AST_CHAN_TP_RECORDER);
+ return snapshot->tech_properties & AST_CHAN_TP_INTERNAL;
}
static void cel_snapshot_update_cb(void *data, struct stasis_subscription *sub,
Modified: team/dlee/ari-async-bridge/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/main/channel.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/main/channel.c (original)
+++ team/dlee/ari-async-bridge/main/channel.c Thu Aug 8 13:59:09 2013
@@ -830,6 +830,16 @@
return NULL;
}
+/*! \brief Channel technology used to extract a channel from a running application. The
+ * channel created with this technology will be immediately hung up - most external
+ * applications won't ever want to see this.
+ */
+static const struct ast_channel_tech surrogate_tech = {
+ .type = "Surrogate",
+ .description = "Surrogate channel used to pull channel from an application",
+ .properties = AST_CHAN_TP_INTERNAL,
+};
+
static const struct ast_channel_tech null_tech = {
.type = "NULL",
.description = "Null channel (should not see this)",
@@ -852,6 +862,7 @@
struct ast_sched_context *schedctx;
struct ast_timer *timer;
struct timeval now;
+ const struct ast_channel_tech *channel_tech;
/* If shutting down, don't allocate any new channels */
if (ast_shutting_down()) {
@@ -965,9 +976,6 @@
ast_channel_name_set(tmp, "-**Unknown**");
}
- /* Reminder for the future: under what conditions do we NOT want to track cdrs on channels? */
-
- /* These 4 variables need to be set up for the cdr_init() to work right */
if (amaflag != AST_AMA_NONE) {
ast_channel_amaflags_set(tmp, amaflag);
} else {
@@ -977,39 +985,39 @@
if (!ast_strlen_zero(acctcode)) {
ast_channel_accountcode_set(tmp, acctcode);
}
+ ast_channel_language_set(tmp, ast_defaultlanguage);
ast_channel_context_set(tmp, S_OR(context, "default"));
ast_channel_exten_set(tmp, S_OR(exten, "s"));
ast_channel_priority_set(tmp, 1);
- ast_atomic_fetchadd_int(&chancount, +1);
-
headp = ast_channel_varshead(tmp);
AST_LIST_HEAD_INIT_NOLOCK(headp);
ast_pbx_hangup_handler_init(tmp);
AST_LIST_HEAD_INIT_NOLOCK(ast_channel_datastores(tmp));
-
AST_LIST_HEAD_INIT_NOLOCK(ast_channel_autochans(tmp));
- ast_channel_language_set(tmp, ast_defaultlanguage);
-
- ast_channel_tech_set(tmp, &null_tech);
-
+ channel_tech = ast_get_channel_tech(tech);
+ if (!channel_tech && !ast_strlen_zero(tech2)) {
+ channel_tech = ast_get_channel_tech(tech2);
+ }
+ if (channel_tech) {
+ ast_channel_tech_set(tmp, channel_tech);
+ } else {
+ ast_channel_tech_set(tmp, &null_tech);
+ }
+
+ ast_channel_internal_finalize(tmp);
+
+ ast_atomic_fetchadd_int(&chancount, +1);
ao2_link(channels, tmp);
/*
- * And now, since the channel structure is built, and has its name, let's
- * call the manager event generator with this Newchannel event. This is the
- * proper and correct place to make this call, but you sure do have to pass
- * a lot of data into this func to do it here!
+ * And now, since the channel structure is built, and has its name, let
+ * the world know of its existance
*/
- if (ast_get_channel_tech(tech) || (tech2 && ast_get_channel_tech(tech2))) {
- ast_channel_publish_snapshot(tmp);
- }
-
- ast_channel_internal_finalize(tmp);
- ast_publish_channel_state(tmp);
+ ast_channel_publish_snapshot(tmp);
return tmp;
}
@@ -6376,7 +6384,7 @@
struct ast_party_connected_line connected;
struct ast_party_redirecting redirecting;
} exchange;
- struct ast_channel *clonechan, *chans[2];
+ struct ast_channel *clonechan;
struct ast_channel *bridged;
struct ast_format rformat;
struct ast_format wformat;
@@ -6458,42 +6466,6 @@
ast_debug(4, "Actually Masquerading %s(%d) into the structure of %s(%d)\n",
ast_channel_name(clonechan), ast_channel_state(clonechan), ast_channel_name(original), ast_channel_state(original));
-
- chans[0] = clonechan;
- chans[1] = original;
- /*** DOCUMENTATION
- <managerEventInstance>
- <synopsis>Raised when a masquerade occurs between two channels, wherein the Clone channel's internal information replaces the Original channel's information.</synopsis>
- <syntax>
- <parameter name="Clone">
- <para>The name of the channel whose information will be going into the Original channel.</para>
- </parameter>
- <parameter name="CloneUniqueid">
- <para>The uniqueid of the channel whose information will be going into the Original channel.</para>
- </parameter>
- <parameter name="CloneState">
- <para>The current state of the clone channel.</para>
- </parameter>
- <parameter name="Original">
- <para>The name of the channel whose information will be replaced by the Clone channel's information.</para>
- </parameter>
- <parameter name="OriginalUniqueid">
- <para>The uniqueid of the channel whose information will be replaced by the Clone channel's information.</para>
- </parameter>
- <parameter name="OriginalState">
- <para>The current state of the original channel.</para>
- </parameter>
- </syntax>
- </managerEventInstance>
- ***/
- ast_manager_event_multichan(EVENT_FLAG_CALL, "Masquerade", 2, chans,
- "Clone: %s\r\n"
- "CloneUniqueid: %s\r\n"
- "CloneState: %s\r\n"
- "Original: %s\r\n"
- "OriginalUniqueid: %s\r\n"
- "OriginalState: %s\r\n",
- ast_channel_name(clonechan), ast_channel_uniqueid(clonechan), ast_state2str(ast_channel_state(clonechan)), ast_channel_name(original), ast_channel_uniqueid(original), ast_state2str(ast_channel_state(original)));
/*
* Remember the original read/write formats. We turn off any
@@ -7549,6 +7521,7 @@
ao2_ref(channels, -1);
channels = NULL;
}
+ ast_channel_unregister(&surrogate_tech);
}
void ast_channels_init(void)
@@ -7558,6 +7531,8 @@
if (channels) {
ao2_container_register("channels", channels, prnt_channel_key);
}
+
+ ast_channel_register(&surrogate_tech);
ast_stasis_channels_init();
Modified: team/dlee/ari-async-bridge/main/channel_internal_api.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/main/channel_internal_api.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/main/channel_internal_api.c (original)
+++ team/dlee/ari-async-bridge/main/channel_internal_api.c Thu Aug 8 13:59:09 2013
@@ -193,7 +193,6 @@
unsigned short transfercapability; /*!< ISDN Transfer Capability - AST_FLAG_DIGITAL is not enough */
-/* BUGBUG the bridge pointer must change to an ast_channel_bridge pointer because it will never change while the channel is in the bridging system whereas the bridge could change. */
struct ast_bridge *bridge; /*!< Bridge this channel is participating in */
struct ast_bridge_channel *bridge_channel;/*!< The bridge_channel this channel is linked with. */
struct ast_timer *timer; /*!< timer object that provided timingfd */
@@ -426,13 +425,13 @@
if ((assert_on_null)) ast_assert(!ast_strlen_zero(value)); \
if (!strcmp(value, chan->field)) return; \
ast_string_field_set(chan, field, value); \
- if (publish) ast_channel_publish_snapshot(chan); \
+ if (publish && ast_channel_internal_is_finalized(chan)) ast_channel_publish_snapshot(chan); \
} \
\
void ast_channel_##field##_build_va(struct ast_channel *chan, const char *fmt, va_list ap) \
{ \
ast_string_field_build_va(chan, field, fmt, ap); \
- if (publish) ast_channel_publish_snapshot(chan); \
+ if (publish && ast_channel_internal_is_finalized(chan)) ast_channel_publish_snapshot(chan); \
} \
void ast_channel_##field##_build(struct ast_channel *chan, const char *fmt, ...) \
{ \
@@ -1481,7 +1480,6 @@
chan->topics = stasis_cp_single_create(
ast_channel_cache_all(), topic_name);
-
if (!chan->topics) {
return -1;
}
Modified: team/dlee/ari-async-bridge/main/features.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/main/features.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/main/features.c (original)
+++ team/dlee/ari-async-bridge/main/features.c Thu Aug 8 13:59:09 2013
@@ -792,7 +792,7 @@
return res;
}
-/* BUGBUG this really should be made a private function of bridging_basic.c after struct ast_call_feature is made an ao2 object. */
+/* BUGBUG this really should be made a private function of bridge_basic.c after struct ast_call_feature is made an ao2 object. */
int ast_bridge_channel_setup_features(struct ast_bridge_channel *bridge_channel)
{
int res = 0;
Modified: team/dlee/ari-async-bridge/main/manager_bridges.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/main/manager_bridges.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/main/manager_bridges.c (original)
+++ team/dlee/ari-async-bridge/main/manager_bridges.c Thu Aug 8 13:59:09 2013
@@ -381,7 +381,7 @@
}
snapshot = stasis_message_data(msg);
- if (snapshot->tech_properties & (AST_CHAN_TP_ANNOUNCER | AST_CHAN_TP_RECORDER)) {
+ if (snapshot->tech_properties & AST_CHAN_TP_INTERNAL) {
return 0;
}
Modified: team/dlee/ari-async-bridge/main/manager_channels.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/main/manager_channels.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/main/manager_channels.c (original)
+++ team/dlee/ari-async-bridge/main/manager_channels.c Thu Aug 8 13:59:09 2013
@@ -383,7 +383,7 @@
return NULL;
}
- if (snapshot->tech_properties & (AST_CHAN_TP_ANNOUNCER | AST_CHAN_TP_RECORDER)) {
+ if (snapshot->tech_properties & AST_CHAN_TP_INTERNAL) {
ast_free(out);
return NULL;
}
Modified: team/dlee/ari-async-bridge/main/utils.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-async-bridge/main/utils.c?view=diff&rev=396413&r1=396412&r2=396413
==============================================================================
--- team/dlee/ari-async-bridge/main/utils.c (original)
+++ team/dlee/ari-async-bridge/main/utils.c Thu Aug 8 13:59:09 2013
@@ -862,7 +862,8 @@
for (frame_iterator = 0; frame_iterator < num_frames; ++frame_iterator) {
ast_str_append(str, 0, "\t%s\n", symbols[frame_iterator]);
}
-
+/* Prevent MALLOC_DEBUG from complaining */
+#undef free
free(symbols);
} else {
ast_str_append(str, 0, "\tCouldn't retrieve backtrace symbols\n");
More information about the asterisk-commits
mailing list