[asterisk-commits] oej: branch oej/rana-manager-debug-1.8 r364160 - in /team/oej/rana-manager-de...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Apr 27 01:57:42 CDT 2012
Author: oej
Date: Fri Apr 27 01:57:27 2012
New Revision: 364160
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=364160
Log:
Reset
Removed:
team/oej/rana-manager-debug-1.8/apps/app_rpt.c
team/oej/rana-manager-debug-1.8/apps/rpt_flow.pdf
team/oej/rana-manager-debug-1.8/channels/chan_usbradio.c
team/oej/rana-manager-debug-1.8/channels/xpmr/
Modified:
team/oej/rana-manager-debug-1.8/ (props changed)
team/oej/rana-manager-debug-1.8/apps/app_celgenuserevent.c
team/oej/rana-manager-debug-1.8/apps/app_chanspy.c
team/oej/rana-manager-debug-1.8/apps/app_confbridge.c
team/oej/rana-manager-debug-1.8/apps/app_dial.c
team/oej/rana-manager-debug-1.8/apps/app_directed_pickup.c
team/oej/rana-manager-debug-1.8/apps/app_forkcdr.c
team/oej/rana-manager-debug-1.8/apps/app_ices.c
team/oej/rana-manager-debug-1.8/apps/app_jack.c
team/oej/rana-manager-debug-1.8/apps/app_meetme.c
team/oej/rana-manager-debug-1.8/apps/app_milliwatt.c
team/oej/rana-manager-debug-1.8/apps/app_parkandannounce.c
team/oej/rana-manager-debug-1.8/apps/app_sms.c
team/oej/rana-manager-debug-1.8/apps/app_stack.c
team/oej/rana-manager-debug-1.8/apps/app_voicemail.c
team/oej/rana-manager-debug-1.8/bootstrap.sh
team/oej/rana-manager-debug-1.8/bridges/bridge_builtin_features.c (contents, props changed)
team/oej/rana-manager-debug-1.8/bridges/bridge_multiplexed.c (props changed)
team/oej/rana-manager-debug-1.8/build_tools/cflags.xml
team/oej/rana-manager-debug-1.8/build_tools/embed_modules.xml
team/oej/rana-manager-debug-1.8/build_tools/menuselect-deps.in
team/oej/rana-manager-debug-1.8/build_tools/prep_tarball
team/oej/rana-manager-debug-1.8/channels/chan_agent.c
team/oej/rana-manager-debug-1.8/channels/chan_dahdi.c
team/oej/rana-manager-debug-1.8/channels/chan_gtalk.c
team/oej/rana-manager-debug-1.8/channels/chan_h323.c
team/oej/rana-manager-debug-1.8/channels/chan_iax2.c
team/oej/rana-manager-debug-1.8/channels/chan_jingle.c
team/oej/rana-manager-debug-1.8/channels/chan_mgcp.c
team/oej/rana-manager-debug-1.8/channels/chan_misdn.c
team/oej/rana-manager-debug-1.8/channels/chan_sip.c
team/oej/rana-manager-debug-1.8/channels/chan_skinny.c
team/oej/rana-manager-debug-1.8/channels/chan_unistim.c
team/oej/rana-manager-debug-1.8/channels/console_gui.c
team/oej/rana-manager-debug-1.8/channels/console_video.c
team/oej/rana-manager-debug-1.8/channels/misdn/isdn_lib.c
team/oej/rana-manager-debug-1.8/channels/misdn/isdn_msg_parser.c
team/oej/rana-manager-debug-1.8/channels/sig_analog.c
team/oej/rana-manager-debug-1.8/channels/sig_analog.h
team/oej/rana-manager-debug-1.8/channels/sig_pri.c
team/oej/rana-manager-debug-1.8/channels/sig_pri.h
team/oej/rana-manager-debug-1.8/channels/sig_ss7.c
team/oej/rana-manager-debug-1.8/channels/sig_ss7.h
team/oej/rana-manager-debug-1.8/channels/sip/config_parser.c
team/oej/rana-manager-debug-1.8/channels/sip/include/dialog.h
team/oej/rana-manager-debug-1.8/channels/sip/include/reqresp_parser.h
team/oej/rana-manager-debug-1.8/channels/sip/include/sip.h
team/oej/rana-manager-debug-1.8/channels/sip/reqresp_parser.c
team/oej/rana-manager-debug-1.8/channels/sip/sdp_crypto.c
team/oej/rana-manager-debug-1.8/configure
team/oej/rana-manager-debug-1.8/configure.ac
team/oej/rana-manager-debug-1.8/pbx/pbx_config.c
team/oej/rana-manager-debug-1.8/pbx/pbx_loopback.c
team/oej/rana-manager-debug-1.8/pbx/pbx_lua.c
team/oej/rana-manager-debug-1.8/pbx/pbx_realtime.c
team/oej/rana-manager-debug-1.8/pbx/pbx_spool.c
team/oej/rana-manager-debug-1.8/tests/test_devicestate.c
team/oej/rana-manager-debug-1.8/tests/test_event.c
team/oej/rana-manager-debug-1.8/tests/test_gosub.c
team/oej/rana-manager-debug-1.8/tests/test_linkedlists.c
team/oej/rana-manager-debug-1.8/tests/test_netsock2.c
team/oej/rana-manager-debug-1.8/tests/test_poll.c
Propchange: team/oej/rana-manager-debug-1.8/
------------------------------------------------------------------------------
automerge = Is-there-life-off-net?
Propchange: team/oej/rana-manager-debug-1.8/
('svnmerge-integrated' removed)
Modified: team/oej/rana-manager-debug-1.8/apps/app_celgenuserevent.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/rana-manager-debug-1.8/apps/app_celgenuserevent.c?view=diff&rev=364160&r1=364159&r2=364160
==============================================================================
--- team/oej/rana-manager-debug-1.8/apps/app_celgenuserevent.c (original)
+++ team/oej/rana-manager-debug-1.8/apps/app_celgenuserevent.c Fri Apr 27 01:57:27 2012
@@ -22,6 +22,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
#include "asterisk.h"
Modified: team/oej/rana-manager-debug-1.8/apps/app_chanspy.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/rana-manager-debug-1.8/apps/app_chanspy.c?view=diff&rev=364160&r1=364159&r2=364160
==============================================================================
--- team/oej/rana-manager-debug-1.8/apps/app_chanspy.c (original)
+++ team/oej/rana-manager-debug-1.8/apps/app_chanspy.c Fri Apr 27 01:57:27 2012
@@ -526,7 +526,8 @@
/* We now hold the channel lock on spyee */
- if (ast_check_hangup(chan) || ast_check_hangup(spyee_autochan->chan)) {
+ if (ast_check_hangup(chan) || ast_check_hangup(spyee_autochan->chan) ||
+ ast_test_flag(spyee_autochan->chan, AST_FLAG_ZOMBIE)) {
return 0;
}
@@ -543,6 +544,9 @@
memset(&csth, 0, sizeof(csth));
ast_copy_flags(&csth.flags, flags, AST_FLAGS_ALL);
+ /* This is the audiohook which gives us the audio off the channel we are
+ spying on.
+ */
ast_audiohook_init(&csth.spy_audiohook, AST_AUDIOHOOK_TYPE_SPY, "ChanSpy");
if (start_spying(spyee_autochan, spyer_name, &csth.spy_audiohook)) {
@@ -550,17 +554,30 @@
return 0;
}
- ast_audiohook_init(&csth.whisper_audiohook, AST_AUDIOHOOK_TYPE_WHISPER, "ChanSpy");
- ast_audiohook_init(&csth.bridge_whisper_audiohook, AST_AUDIOHOOK_TYPE_WHISPER, "Chanspy");
- if (start_spying(spyee_autochan, spyer_name, &csth.whisper_audiohook)) {
- ast_log(LOG_WARNING, "Unable to attach whisper audiohook to spyee %s. Whisper mode disabled!\n", name);
- }
- if ((spyee_bridge_autochan = ast_autochan_setup(ast_bridged_channel(spyee_autochan->chan)))) {
- 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);
- }
- ast_channel_unlock(spyee_bridge_autochan->chan);
+ if (ast_test_flag(flags, OPTION_WHISPER | OPTION_BARGE | OPTION_DTMF_SWITCH_MODES)) {
+ /* This audiohook will let us inject audio from our channel into the
+ channel we are currently spying on.
+ */
+ ast_audiohook_init(&csth.whisper_audiohook, AST_AUDIOHOOK_TYPE_WHISPER, "ChanSpy");
+
+ if (start_spying(spyee_autochan, spyer_name, &csth.whisper_audiohook)) {
+ ast_log(LOG_WARNING, "Unable to attach whisper audiohook to spyee %s. Whisper mode disabled!\n", name);
+ }
+ }
+
+ if (ast_test_flag(flags, OPTION_BARGE | OPTION_DTMF_SWITCH_MODES)) {
+ /* 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");
+
+ if ((spyee_bridge_autochan = ast_autochan_setup(ast_bridged_channel(spyee_autochan->chan)))) {
+ 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);
+ }
+ ast_channel_unlock(spyee_bridge_autochan->chan);
+ }
}
ast_channel_lock(chan);
@@ -683,15 +700,19 @@
ast_clear_flag(chan, AST_FLAG_END_DTMF_ONLY);
ast_channel_unlock(chan);
- ast_audiohook_lock(&csth.whisper_audiohook);
- ast_audiohook_detach(&csth.whisper_audiohook);
- ast_audiohook_unlock(&csth.whisper_audiohook);
- ast_audiohook_destroy(&csth.whisper_audiohook);
-
- ast_audiohook_lock(&csth.bridge_whisper_audiohook);
- ast_audiohook_detach(&csth.bridge_whisper_audiohook);
- ast_audiohook_unlock(&csth.bridge_whisper_audiohook);
- ast_audiohook_destroy(&csth.bridge_whisper_audiohook);
+ if (ast_test_flag(flags, OPTION_WHISPER | OPTION_BARGE | OPTION_DTMF_SWITCH_MODES)) {
+ ast_audiohook_lock(&csth.whisper_audiohook);
+ ast_audiohook_detach(&csth.whisper_audiohook);
+ ast_audiohook_unlock(&csth.whisper_audiohook);
+ ast_audiohook_destroy(&csth.whisper_audiohook);
+ }
+
+ if (ast_test_flag(flags, OPTION_BARGE | OPTION_DTMF_SWITCH_MODES)) {
+ ast_audiohook_lock(&csth.bridge_whisper_audiohook);
+ ast_audiohook_detach(&csth.bridge_whisper_audiohook);
+ ast_audiohook_unlock(&csth.bridge_whisper_audiohook);
+ ast_audiohook_destroy(&csth.bridge_whisper_audiohook);
+ }
ast_audiohook_lock(&csth.spy_audiohook);
ast_audiohook_detach(&csth.spy_audiohook);
@@ -725,8 +746,10 @@
}
if (!strncmp(next->name, "DAHDI/pseudo", pseudo_len)) {
+ ast_channel_unref(next);
goto redo;
} else if (next == chan) {
+ ast_channel_unref(next);
goto redo;
}
@@ -805,11 +828,13 @@
}
if (!iter) {
- return -1;
+ res = -1;
+ goto exit;
}
res = ast_waitfordigit(chan, waitms);
if (res < 0) {
+ iter = ast_channel_iterator_destroy(iter);
ast_clear_flag(chan, AST_FLAG_SPYING);
break;
}
@@ -817,10 +842,12 @@
char tmp[2];
tmp[0] = res;
tmp[1] = '\0';
- if (!ast_goto_if_exists(chan, exitcontext, tmp, 1))
+ if (!ast_goto_if_exists(chan, exitcontext, tmp, 1)) {
+ iter = ast_channel_iterator_destroy(iter);
goto exit;
- else
+ } else {
ast_debug(2, "Exit by single digit did not work in chanspy. Extension %s does not exist in context %s\n", tmp, exitcontext);
+ }
}
/* reset for the next loop around, unless overridden later */
@@ -959,10 +986,12 @@
if (res == -1) {
ast_autochan_destroy(autochan);
+ iter = ast_channel_iterator_destroy(iter);
goto exit;
} else if (res == -2) {
res = 0;
ast_autochan_destroy(autochan);
+ iter = ast_channel_iterator_destroy(iter);
goto exit;
} else if (res > 1 && spec) {
struct ast_channel *next;
@@ -982,6 +1011,7 @@
}
}
} else if (res == 0 && ast_test_flag(flags, OPTION_EXITONHANGUP)) {
+ iter = ast_channel_iterator_destroy(iter);
goto exit;
}
}
@@ -1047,7 +1077,7 @@
if (strchr("0123456789*#", tmp) && tmp != '\0') {
user_options.exit = tmp;
} else {
- ast_log(LOG_NOTICE, "Argument for option 'x' must be a valid DTMF digit.");
+ ast_log(LOG_NOTICE, "Argument for option 'x' must be a valid DTMF digit.\n");
}
}
@@ -1056,7 +1086,7 @@
if (strchr("0123456789*#", tmp) && tmp != '\0') {
user_options.cycle = tmp;
} else {
- ast_log(LOG_NOTICE, "Argument for option 'c' must be a valid DTMF digit.");
+ ast_log(LOG_NOTICE, "Argument for option 'c' must be a valid DTMF digit.\n");
}
}
@@ -1172,7 +1202,7 @@
if (strchr("0123456789*#", tmp) && tmp != '\0') {
user_options.exit = tmp;
} else {
- ast_log(LOG_NOTICE, "Argument for option 'x' must be a valid DTMF digit.");
+ ast_log(LOG_NOTICE, "Argument for option 'x' must be a valid DTMF digit.\n");
}
}
@@ -1181,7 +1211,7 @@
if (strchr("0123456789*#", tmp) && tmp != '\0') {
user_options.cycle = tmp;
} else {
- ast_log(LOG_NOTICE, "Argument for option 'c' must be a valid DTMF digit.");
+ ast_log(LOG_NOTICE, "Argument for option 'c' must be a valid DTMF digit.\n");
}
}
Modified: team/oej/rana-manager-debug-1.8/apps/app_confbridge.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/rana-manager-debug-1.8/apps/app_confbridge.c?view=diff&rev=364160&r1=364159&r2=364160
==============================================================================
--- team/oej/rana-manager-debug-1.8/apps/app_confbridge.c (original)
+++ team/oej/rana-manager-debug-1.8/apps/app_confbridge.c Fri Apr 27 01:57:27 2012
@@ -86,7 +86,7 @@
<para>Do not play message when first person enters</para>
</option>
<option name="s">
- <para>Present menu (user or admin) when <literal>*</literal> is received
+ <para>Present menu (user or admin) when <literal>#</literal> is received
(send to menu).</para>
</option>
<option name="w">
Modified: team/oej/rana-manager-debug-1.8/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/rana-manager-debug-1.8/apps/app_dial.c?view=diff&rev=364160&r1=364159&r2=364160
==============================================================================
--- team/oej/rana-manager-debug-1.8/apps/app_dial.c (original)
+++ team/oej/rana-manager-debug-1.8/apps/app_dial.c Fri Apr 27 01:57:27 2012
@@ -203,8 +203,8 @@
<para>Asterisk will ignore any forwarding requests it may receive on this dial attempt.</para>
</option>
<option name="I">
- <para>Asterisk will ignore any connected line update requests or redirecting party update
- requests it may receiveon this dial attempt.</para>
+ <para>Asterisk will ignore any connected line update requests or any redirecting party
+ update requests it may receive on this dial attempt.</para>
</option>
<option name="k">
<para>Allow the called party to enable parking of the call by sending
@@ -288,15 +288,14 @@
<value name="CONTINUE">
Hangup the called party and allow the calling party to continue dialplan execution at the next priority
</value>
- <!-- TODO: Fix this syntax up, once we've figured out how to specify the GOTO syntax -->
- <value name="GOTO:<context>^<exten>^<priority>">
+ <value name="GOTO:[[<context>^]<exten>^]<priority>">
Transfer the call to the specified destination.
</value>
</variable>
</variablelist>
<note>
<para>You cannot use any additional action post answer options in conjunction
- with this option. Also, pbx services are not run on the peer (called) channel,
+ with this option. Also, pbx services are run on the peer (called) channel,
so you will not be able to set timeouts via the TIMEOUT() function in this macro.</para>
</note>
<warning><para>Be aware of the limitations that macros have, specifically with regards to use of
@@ -405,16 +404,14 @@
Hangup the called party and allow the calling party
to continue dialplan execution at the next priority.
</value>
- <!-- TODO: Fix this syntax up, once we've figured out how to specify the GOTO syntax -->
- <value name="GOTO:<context>^<exten>^<priority>">
- Transfer the call to the specified priority. Optionally, an extension, or
- extension and priority can be specified.
+ <value name="GOTO:[[<context>^]<exten>^]<priority>">
+ Transfer the call to the specified destination.
</value>
</variable>
</variablelist>
<note>
<para>You cannot use any additional action post answer options in conjunction
- with this option. Also, pbx services are not run on the peer (called) channel,
+ with this option. Also, pbx services are run on the peer (called) channel,
so you will not be able to set timeouts via the TIMEOUT() function in this routine.</para>
</note>
</option>
@@ -476,7 +473,7 @@
<para>If the <variable>OUTBOUND_GROUP</variable> variable is set, all peer channels created by this
application will be put into that group (as in Set(GROUP()=...).
If the <variable>OUTBOUND_GROUP_ONCE</variable> variable is set, all peer channels created by this
- application will be put into that group (as in Set(GROUP()=...). Unlike OUTBOUND_GROUP,
+ application will be put into that group (as in Set(GROUP()=...). Unlike <variable>OUTBOUND_GROUP</variable>,
however, the variable will be unset after use.</para>
<para>This application sets the following channel variables:</para>
@@ -823,13 +820,21 @@
/*!
* helper function for wait_for_answer()
*
+ * \param o Outgoing call channel list.
+ * \param num Incoming call channel cause accumulation
+ * \param peerflags Dial option flags
+ * \param single_caller_bored From wait_for_answer: single && !caller_entertained
+ * \param to Remaining call timeout time.
+ * \param forced_clid OPT_FORCECLID caller id to send
+ * \param stored_clid Caller id representing the called party if needed
+ *
* XXX this code is highly suspicious, as it essentially overwrites
* the outgoing channel without properly deleting it.
*
- * \todo eventually this function should be intergrated into and replaced by ast_call_forward()
+ * \todo eventually this function should be intergrated into and replaced by ast_call_forward()
*/
static void do_forward(struct chanlist *o,
- struct cause_args *num, struct ast_flags64 *peerflags, int single, int *to,
+ struct cause_args *num, struct ast_flags64 *peerflags, int single_caller_bored, int *to,
struct ast_party_id *forced_clid, struct ast_party_id *stored_clid)
{
char tmpchan[256];
@@ -871,8 +876,9 @@
/* Setup parameters */
c = o->chan = ast_request(tech, in->nativeformats, in, stuff, &cause);
if (c) {
- if (single)
+ if (single_caller_bored) {
ast_channel_make_compatible(o->chan, in);
+ }
ast_channel_inherit_variables(in, o->chan);
ast_channel_datastore_inherit(in, o->chan);
/* When a call is forwarded, we don't want to track new interfaces
@@ -893,7 +899,7 @@
} else {
struct ast_party_redirecting redirecting;
- if (single && CAN_EARLY_BRIDGE(peerflags, c, in)) {
+ if (single_caller_bored && CAN_EARLY_BRIDGE(peerflags, c, in)) {
ast_rtp_instance_early_bridge_make_compatible(c, in);
}
@@ -986,7 +992,7 @@
/* Hangup the original channel now, in case we needed it */
ast_hangup(original);
}
- if (single) {
+ if (single_caller_bored) {
ast_indicate(in, -1);
}
}
@@ -1015,6 +1021,8 @@
struct ast_channel *peer = NULL;
/* single is set if only one destination is enabled */
int single = outgoing && !outgoing->next;
+ int caller_entertained = outgoing
+ && ast_test_flag64(outgoing, OPT_MUSICBACK | OPT_RINGBACK);
#ifdef HAVE_EPOLL
struct chanlist *epollo;
#endif
@@ -1028,7 +1036,7 @@
ast_party_connected_line_init(&connected_caller);
if (single) {
/* Turn off hold music, etc */
- if (!ast_test_flag64(outgoing, OPT_MUSICBACK | OPT_RINGBACK)) {
+ if (!caller_entertained) {
ast_deactivate_generator(in);
/* If we are calling a single channel, and not providing ringback or music, */
/* then, make them compatible for in-band tone purpose */
@@ -1049,7 +1057,9 @@
ast_connected_line_copy_from_caller(&connected_caller, &outgoing->chan->caller);
ast_channel_unlock(outgoing->chan);
connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
- ast_channel_update_connected_line(in, &connected_caller, NULL);
+ if (ast_channel_connected_line_macro(outgoing->chan, in, &connected_caller, 1, 0)) {
+ ast_channel_update_connected_line(in, &connected_caller, NULL);
+ }
ast_party_connected_line_free(&connected_caller);
}
}
@@ -1113,7 +1123,9 @@
ast_connected_line_copy_from_caller(&connected_caller, &c->caller);
ast_channel_unlock(c);
connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
- ast_channel_update_connected_line(in, &connected_caller, NULL);
+ if (ast_channel_connected_line_macro(c, in, &connected_caller, 1, 0)) {
+ ast_channel_update_connected_line(in, &connected_caller, NULL);
+ }
ast_party_connected_line_free(&connected_caller);
}
}
@@ -1152,7 +1164,8 @@
}
ast_frfree(f);
}
- do_forward(o, &num, peerflags, single, to, forced_clid, stored_clid);
+ do_forward(o, &num, peerflags, single && !caller_entertained, to,
+ forced_clid, stored_clid);
continue;
}
f = ast_read(winner);
@@ -1167,7 +1180,8 @@
handle_cause(in->hangupcause, &num);
continue;
}
- if (f->frametype == AST_FRAME_CONTROL) {
+ switch (f->frametype) {
+ case AST_FRAME_CONTROL:
switch (f->subclass.integer) {
case AST_CONTROL_ANSWER:
/* This is our guy if someone answered. */
@@ -1183,7 +1197,9 @@
ast_connected_line_copy_from_caller(&connected_caller, &c->caller);
ast_channel_unlock(c);
connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
- ast_channel_update_connected_line(in, &connected_caller, NULL);
+ if (ast_channel_connected_line_macro(c, in, &connected_caller, 1, 0)) {
+ ast_channel_update_connected_line(in, &connected_caller, NULL);
+ }
ast_party_connected_line_free(&connected_caller);
}
}
@@ -1263,8 +1279,10 @@
if (ignore_cc || cc_frame_received || num_ringing == numlines) {
ast_verb(3, "%s is ringing\n", c->name);
/* Setup early media if appropriate */
- if (single && CAN_EARLY_BRIDGE(peerflags, in, c))
+ if (single && !caller_entertained
+ && CAN_EARLY_BRIDGE(peerflags, in, c)) {
ast_channel_early_bridge(in, c);
+ }
if (!(pa->sentringing) && !ast_test_flag64(outgoing, OPT_MUSICBACK) && ast_strlen_zero(opt_args[OPT_ARG_RINGBACK])) {
ast_indicate(in, AST_CONTROL_RINGING);
pa->sentringing++;
@@ -1274,8 +1292,10 @@
case AST_CONTROL_PROGRESS:
ast_verb(3, "%s is making progress passing it to %s\n", c->name, in->name);
/* Setup early media if appropriate */
- if (single && CAN_EARLY_BRIDGE(peerflags, in, c))
+ if (single && !caller_entertained
+ && CAN_EARLY_BRIDGE(peerflags, in, c)) {
ast_channel_early_bridge(in, c);
+ }
if (!ast_test_flag64(outgoing, OPT_RINGBACK)) {
if (single || (!single && !pa->sentringing)) {
ast_indicate(in, AST_CONTROL_PROGRESS);
@@ -1289,12 +1309,14 @@
}
break;
case AST_CONTROL_VIDUPDATE:
- ast_verb(3, "%s requested a video update, passing it to %s\n", c->name, in->name);
- ast_indicate(in, AST_CONTROL_VIDUPDATE);
- break;
case AST_CONTROL_SRCUPDATE:
- ast_verb(3, "%s requested a source update, passing it to %s\n", c->name, in->name);
- ast_indicate(in, AST_CONTROL_SRCUPDATE);
+ case AST_CONTROL_SRCCHANGE:
+ if (!single || caller_entertained) {
+ break;
+ }
+ ast_verb(3, "%s requested media update control %d, passing it to %s\n",
+ c->name, f->subclass.integer, in->name);
+ ast_indicate(in, f->subclass.integer);
break;
case AST_CONTROL_CONNECTED_LINE:
if (ast_test_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE)) {
@@ -1337,16 +1359,20 @@
break;
case AST_CONTROL_PROCEEDING:
ast_verb(3, "%s is proceeding passing it to %s\n", c->name, in->name);
- if (single && CAN_EARLY_BRIDGE(peerflags, in, c))
+ if (single && !caller_entertained
+ && CAN_EARLY_BRIDGE(peerflags, in, c)) {
ast_channel_early_bridge(in, c);
+ }
if (!ast_test_flag64(outgoing, OPT_RINGBACK))
ast_indicate(in, AST_CONTROL_PROCEEDING);
break;
case AST_CONTROL_HOLD:
+ /* XXX this should be saved like AST_CONTROL_CONNECTED_LINE for !single || caller_entertained */
ast_verb(3, "Call on %s placed on hold\n", c->name);
- ast_indicate(in, AST_CONTROL_HOLD);
+ ast_indicate_data(in, AST_CONTROL_HOLD, f->data.ptr, f->datalen);
break;
case AST_CONTROL_UNHOLD:
+ /* XXX this should be saved like AST_CONTROL_CONNECTED_LINE for !single || caller_entertained */
ast_verb(3, "Call on %s left from hold\n", c->name);
ast_indicate(in, AST_CONTROL_UNHOLD);
break;
@@ -1361,7 +1387,7 @@
}
break;
case -1:
- if (!ast_test_flag64(outgoing, OPT_RINGBACK | OPT_MUSICBACK)) {
+ if (single && !caller_entertained) {
ast_verb(3, "%s stopped sounds\n", c->name);
ast_indicate(in, -1);
pa->sentringing = 0;
@@ -1369,26 +1395,29 @@
break;
default:
ast_debug(1, "Dunno what to do with control type %d\n", f->subclass.integer);
- }
- } else if (single) {
- switch (f->frametype) {
- case AST_FRAME_VOICE:
- case AST_FRAME_IMAGE:
- case AST_FRAME_TEXT:
- if (!ast_test_flag64(outgoing, OPT_RINGBACK | OPT_MUSICBACK) && ast_write(in, f)) {
- ast_log(LOG_WARNING, "Unable to write frametype: %d\n",
- f->frametype);
- }
- break;
- case AST_FRAME_HTML:
- if (!ast_test_flag64(outgoing, DIAL_NOFORWARDHTML)
- && ast_channel_sendhtml(in, f->subclass.integer, f->data.ptr, f->datalen) == -1) {
- ast_log(LOG_WARNING, "Unable to send URL\n");
- }
- break;
- default:
break;
}
+ break;
+ case AST_FRAME_VOICE:
+ case AST_FRAME_IMAGE:
+ if (caller_entertained) {
+ break;
+ }
+ /* Fall through */
+ case AST_FRAME_TEXT:
+ if (single && ast_write(in, f)) {
+ ast_log(LOG_WARNING, "Unable to write frametype: %d\n",
+ f->frametype);
+ }
+ break;
+ case AST_FRAME_HTML:
+ if (single && !ast_test_flag64(outgoing, DIAL_NOFORWARDHTML)
+ && ast_channel_sendhtml(in, f->subclass.integer, f->data.ptr, f->datalen) == -1) {
+ ast_log(LOG_WARNING, "Unable to send URL\n");
+ }
+ break;
+ default:
+ break;
}
ast_frfree(f);
} /* end for */
@@ -1469,6 +1498,15 @@
break;
case AST_FRAME_VOICE:
case AST_FRAME_IMAGE:
+ if (!single || caller_entertained) {
+ /*
+ * We are calling multiple parties or caller is being
+ * entertained and has thus not been made compatible.
+ * No need to check any other called parties.
+ */
+ goto skip_frame;
+ }
+ /* Fall through */
case AST_FRAME_TEXT:
case AST_FRAME_DTMF_BEGIN:
case AST_FRAME_DTMF_END:
@@ -1480,12 +1518,27 @@
case AST_FRAME_CONTROL:
switch (f->subclass.integer) {
case AST_CONTROL_HOLD:
+ ast_verb(3, "Call on %s placed on hold\n", o->chan->name);
+ ast_indicate_data(o->chan, AST_CONTROL_HOLD, f->data.ptr, f->datalen);
+ break;
case AST_CONTROL_UNHOLD:
+ ast_verb(3, "Call on %s left from hold\n", o->chan->name);
+ ast_indicate(o->chan, AST_CONTROL_UNHOLD);
+ break;
case AST_CONTROL_VIDUPDATE:
case AST_CONTROL_SRCUPDATE:
- ast_verb(3, "%s requested special control %d, passing it to %s\n",
+ case AST_CONTROL_SRCCHANGE:
+ if (!single || caller_entertained) {
+ /*
+ * We are calling multiple parties or caller is being
+ * entertained and has thus not been made compatible.
+ * No need to check any other called parties.
+ */
+ goto skip_frame;
+ }
+ ast_verb(3, "%s requested media update control %d, passing it to %s\n",
in->name, f->subclass.integer, o->chan->name);
- ast_indicate_data(o->chan, f->subclass.integer, f->data.ptr, f->datalen);
+ ast_indicate(o->chan, f->subclass.integer);
break;
case AST_CONTROL_CONNECTED_LINE:
if (ast_channel_connected_line_macro(in, o->chan, f, 0, 1)) {
@@ -1498,13 +1551,16 @@
}
break;
default:
- break;
+ /* We are not going to do anything with this frame. */
+ goto skip_frame;
}
break;
default:
- break;
+ /* We are not going to do anything with this frame. */
+ goto skip_frame;
}
}
+skip_frame:;
ast_frfree(f);
}
if (!*to)
@@ -2307,7 +2363,7 @@
tc->dialed.transit_network_select = chan->dialed.transit_network_select;
if (!ast_strlen_zero(chan->accountcode)) {
- ast_string_field_set(tc, peeraccount, chan->accountcode);
+ ast_string_field_set(tc, accountcode, chan->accountcode);
}
if (ast_strlen_zero(tc->musicclass))
ast_string_field_set(tc, musicclass, chan->musicclass);
@@ -2708,7 +2764,6 @@
}
if (ast_autoservice_stop(chan) < 0) {
- ast_log(LOG_ERROR, "Could not stop autoservice on calling channel\n");
res9 = -1;
}
Modified: team/oej/rana-manager-debug-1.8/apps/app_directed_pickup.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/rana-manager-debug-1.8/apps/app_directed_pickup.c?view=diff&rev=364160&r1=364159&r2=364160
==============================================================================
--- team/oej/rana-manager-debug-1.8/apps/app_directed_pickup.c (original)
+++ team/oej/rana-manager-debug-1.8/apps/app_directed_pickup.c Fri Apr 27 01:57:27 2012
@@ -55,25 +55,37 @@
<synopsis>
Directed extension call pickup.
</synopsis>
- <syntax argsep="&">
- <parameter name="ext" argsep="@" required="true">
- <argument name="extension" required="true"/>
- <argument name="context" />
- </parameter>
- <parameter name="ext2" argsep="@" multiple="true">
- <argument name="extension2" required="true"/>
- <argument name="context2"/>
+ <syntax>
+ <parameter name="targets" argsep="&">
+ <argument name="extension" argsep="@" required="true">
+ <para>Specification of the pickup target.</para>
+ <argument name="extension" required="true"/>
+ <argument name="context" />
+ </argument>
+ <argument name="extension2" argsep="@" multiple="true">
+ <para>Additional specifications of pickup targets.</para>
+ <argument name="extension2" required="true"/>
+ <argument name="context2"/>
+ </argument>
</parameter>
</syntax>
<description>
- <para>This application can pickup any ringing channel that is calling
- the specified <replaceable>extension</replaceable>. If no <replaceable>context</replaceable>
- is specified, the current context will be used. If you use the special string <literal>PICKUPMARK</literal>
- for the context parameter, for example 10 at PICKUPMARK, this application
- tries to find a channel which has defined a <variable>PICKUPMARK</variable>
- channel variable with the same value as <replaceable>extension</replaceable>
- (in this example, <literal>10</literal>). When no parameter is specified, the application
- will pickup a channel matching the pickup group of the active channel.</para>
+ <para>This application can pickup a specified ringing channel. The channel
+ to pickup can be specified in the following ways.</para>
+ <para>1) If no <replaceable>extension</replaceable> targets are specified,
+ the application will pickup a channel matching the pickup group of the
+ requesting channel.</para>
+ <para>2) If the <replaceable>extension</replaceable> is specified with a
+ <replaceable>context</replaceable> of the special string
+ <literal>PICKUPMARK</literal> (for example 10 at PICKUPMARK), the application
+ will pickup a channel which has defined a channel variable
+ <variable>PICKUPMARK</variable> with the same value as
+ <replaceable>extension</replaceable> (in this example,
+ <literal>10</literal>).</para>
+ <para>3) If the <replaceable>extension</replaceable> is specified
+ with a <replaceable>context</replaceable>, the channel executing at that
+ dialplan location will be picked up. If no <replaceable>context</replaceable>
+ is specified, the current context will be used.</para>
</description>
</application>
<application name="PickupChan" language="en_US">
Modified: team/oej/rana-manager-debug-1.8/apps/app_forkcdr.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/rana-manager-debug-1.8/apps/app_forkcdr.c?view=diff&rev=364160&r1=364159&r2=364160
==============================================================================
--- team/oej/rana-manager-debug-1.8/apps/app_forkcdr.c (original)
+++ team/oej/rana-manager-debug-1.8/apps/app_forkcdr.c Fri Apr 27 01:57:27 2012
@@ -191,6 +191,14 @@
if (!(newcdr = ast_cdr_dup_unique(cdr)))
return;
+ /*
+ * End the original CDR if requested BEFORE appending the new CDR
+ * otherwise we incorrectly end the new CDR also.
+ */
+ if (ast_test_flag(&optflags, OPT_ENDCDR)) {
+ ast_cdr_end(cdr);
+ }
+
ast_cdr_append(cdr, newcdr);
if (!ast_test_flag(&optflags, OPT_NORESET))
@@ -218,9 +226,6 @@
if (ast_test_flag(&optflags, OPT_RESETDEST))
newcdr->dstchannel[0] = 0;
- if (ast_test_flag(&optflags, OPT_ENDCDR))
- ast_cdr_end(cdr);
-
if (ast_test_flag(&optflags, OPT_ANSLOCK))
ast_set_flag(cdr, AST_CDR_FLAG_ANSLOCKED);
Modified: team/oej/rana-manager-debug-1.8/apps/app_ices.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/rana-manager-debug-1.8/apps/app_ices.c?view=diff&rev=364160&r1=364159&r2=364160
==============================================================================
--- team/oej/rana-manager-debug-1.8/apps/app_ices.c (original)
+++ team/oej/rana-manager-debug-1.8/apps/app_ices.c Fri Apr 27 01:57:27 2012
@@ -97,7 +97,7 @@
execl(path_BIN "ices2", "ices", filename, SENTINEL);
execlp("ices2", "ices", filename, SENTINEL);
- ast_debug(1, "Couldn't find ices version 2, attempting to use ices version 1.");
+ ast_debug(1, "Couldn't find ices version 2, attempting to use ices version 1.\n");
execl(path_LOCAL "ices", "ices", filename, SENTINEL);
execl(path_BIN "ices", "ices", filename, SENTINEL);
Modified: team/oej/rana-manager-debug-1.8/apps/app_jack.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/rana-manager-debug-1.8/apps/app_jack.c?view=diff&rev=364160&r1=364159&r2=364160
==============================================================================
--- team/oej/rana-manager-debug-1.8/apps/app_jack.c (original)
+++ team/oej/rana-manager-debug-1.8/apps/app_jack.c Fri Apr 27 01:57:27 2012
@@ -904,8 +904,14 @@
return_error:
ast_channel_unlock(chan);
- if (jack_data)
+ if (jack_data) {
destroy_jack_data(jack_data);
+ }
+
+ if (datastore) {
+ datastore->data = NULL;
+ ast_datastore_free(datastore);
+ }
return -1;
}
Modified: team/oej/rana-manager-debug-1.8/apps/app_meetme.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/rana-manager-debug-1.8/apps/app_meetme.c?view=diff&rev=364160&r1=364159&r2=364160
==============================================================================
--- team/oej/rana-manager-debug-1.8/apps/app_meetme.c (original)
+++ team/oej/rana-manager-debug-1.8/apps/app_meetme.c Fri Apr 27 01:57:27 2012
@@ -142,10 +142,13 @@
</option>
<option name="p" hasparams="optional">
<para>Allow user to exit the conference by pressing <literal>#</literal> (default)
- or any of the defined keys. If keys contain <literal>*</literal> this will override
- option <literal>s</literal>. The key used is set to channel variable
+ or any of the defined keys. The key used is set to channel variable
<variable>MEETME_EXIT_KEY</variable>.</para>
<argument name="keys" required="true" />
+ <note>
+ <para>Option <literal>s</literal> has priority for <literal>*</literal>
+ since it cannot change its activation code.</para>
+ </note>
</option>
<option name="P">
<para>Always prompt for the pin even if it is specified.</para>
@@ -180,6 +183,10 @@
<para>Allow user to exit the conference by entering a valid single digit
extension <variable>MEETME_EXIT_CONTEXT</variable> or the current context
if that variable is not defined.</para>
+ <note>
+ <para>Option <literal>s</literal> has priority for <literal>*</literal>
+ since it cannot change its activation code.</para>
+ </note>
</option>
<option name="1">
<para>Do not play message when first person enters</para>
@@ -214,7 +221,7 @@
<para>Enters the user into a specified MeetMe conference. If the <replaceable>confno</replaceable>
is omitted, the user will be prompted to enter one. User can exit the conference by hangup, or
if the <literal>p</literal> option is specified, by pressing <literal>#</literal>.</para>
- <note><para>The DAHDI kernel modules and at least one hardware driver (or dahdi_dummy)
+ <note><para>The DAHDI kernel modules and a functional DAHDI timing source (see dahdi_test)
must be present for conferencing to operate properly. In addition, the chan_dahdi channel driver
must be loaded for the <literal>i</literal> and <literal>r</literal> options to operate at
all.</para></note>
@@ -3535,7 +3542,10 @@
}
conf_flush(fd, chan);
- /* Since this option could absorb DTMF meant for the previous (menu), we have to check this one last */
+ /*
+ * Since options using DTMF could absorb DTMF meant for the
+ * conference menu, we have to check them after the menu.
+ */
} else if ((f->frametype == AST_FRAME_DTMF) && ast_test_flag64(confflags, CONFFLAG_EXIT_CONTEXT) && ast_exists_extension(chan, exitcontext, dtmfstr, 1, "")) {
if (ast_test_flag64(confflags, CONFFLAG_PASS_DTMF)) {
conf_queue_dtmf(conf, user, f);
@@ -3647,7 +3657,7 @@
}
if (musiconhold && mohtempstopped && confsilence > MEETME_DELAYDETECTENDTALK) {
mohtempstopped = 0;
- ast_moh_start(chan, NULL, NULL);
+ conf_start_moh(chan, optargs[OPT_ARG_MOH_CLASS]);
}
}
} else {
@@ -3669,7 +3679,7 @@
}
if (musiconhold && mohtempstopped && confsilence > MEETME_DELAYDETECTENDTALK) {
mohtempstopped = 0;
- ast_moh_start(chan, NULL, NULL);
+ conf_start_moh(chan, optargs[OPT_ARG_MOH_CLASS]);
}
}
} else {
@@ -3917,8 +3927,12 @@
cnf->useropts = ast_strdup(useropts);
cnf->adminopts = ast_strdup(adminopts);
cnf->bookid = ast_strdup(bookid);
- cnf->recordingfilename = ast_strdup(recordingfilename);
- cnf->recordingformat = ast_strdup(recordingformat);
+ if (!ast_strlen_zero(recordingfilename)) {
+ cnf->recordingfilename = ast_strdup(recordingfilename);
+ }
+ if (!ast_strlen_zero(recordingformat)) {
+ cnf->recordingformat = ast_strdup(recordingformat);
+ }
/* Parse the other options into confflags -- need to do this in two
* steps, because the parse_options routine zeroes the buffer. */
@@ -4332,13 +4346,27 @@
res = -1;
}
} else {
- /* Check to see if the conference requires a pin
- * and we ALWAYS prompt or no pin was provided */
- if ((!ast_strlen_zero(cnf->pin) ||
+ /* Conference requires a pin for specified access level */
+ int req_pin = !ast_strlen_zero(cnf->pin) ||
(!ast_strlen_zero(cnf->pinadmin) &&
- ast_test_flag64(&confflags, CONFFLAG_ADMIN))) &&
- (ast_test_flag64(&confflags, CONFFLAG_ALWAYSPROMPT) ||
- ast_strlen_zero(args.pin))) {
+ ast_test_flag64(&confflags, CONFFLAG_ADMIN));
+ /* The following logic was derived from a
+ * 4 variable truth table and defines which
+ * circumstances are not exempt from pin
+ * checking.
+ * If this needs to be modified, write the
+ * truth table back out from the boolean
+ * expression AB+A'D+C', change the erroneous
+ * result, and rederive the expression.
+ * Variables:
+ * A: pin provided?
+ * B: always prompt?
+ * C: dynamic?
+ * D: has users? */
+ int not_exempt = !cnf->isdynamic;
+ not_exempt = not_exempt || (!ast_strlen_zero(args.pin) && ast_test_flag64(&confflags, CONFFLAG_ALWAYSPROMPT));
+ not_exempt = not_exempt || (ast_strlen_zero(args.pin) && cnf->users);
+ if (req_pin && not_exempt) {
[... 14992 lines stripped ...]
More information about the asterisk-commits
mailing list