[asterisk-commits] oej: branch group/bufo-manager-setvar-trunk r338041 - in /team/group/bufo-man...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Sep 27 07:10:21 CDT 2011


Author: oej
Date: Tue Sep 27 07:10:13 2011
New Revision: 338041

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=338041
Log:
Reset, resolve 

Added:
    team/group/bufo-manager-setvar-trunk/channels/sip/include/security_events.h
      - copied unchanged from r337975, trunk/channels/sip/include/security_events.h
    team/group/bufo-manager-setvar-trunk/channels/sip/security_events.c
      - copied unchanged from r337975, trunk/channels/sip/security_events.c
Modified:
    team/group/bufo-manager-setvar-trunk/   (props changed)
    team/group/bufo-manager-setvar-trunk/CHANGES
    team/group/bufo-manager-setvar-trunk/Makefile
    team/group/bufo-manager-setvar-trunk/apps/app_confbridge.c
    team/group/bufo-manager-setvar-trunk/apps/app_dial.c
    team/group/bufo-manager-setvar-trunk/apps/app_echo.c
    team/group/bufo-manager-setvar-trunk/apps/app_followme.c
    team/group/bufo-manager-setvar-trunk/apps/app_meetme.c
    team/group/bufo-manager-setvar-trunk/apps/app_minivm.c
    team/group/bufo-manager-setvar-trunk/apps/app_mixmonitor.c
    team/group/bufo-manager-setvar-trunk/apps/app_morsecode.c
    team/group/bufo-manager-setvar-trunk/apps/app_mp3.c
    team/group/bufo-manager-setvar-trunk/apps/app_originate.c
    team/group/bufo-manager-setvar-trunk/apps/app_queue.c
    team/group/bufo-manager-setvar-trunk/apps/app_saycounted.c
    team/group/bufo-manager-setvar-trunk/apps/app_voicemail.c
    team/group/bufo-manager-setvar-trunk/cel/cel_custom.c
    team/group/bufo-manager-setvar-trunk/cel/cel_sqlite3_custom.c
    team/group/bufo-manager-setvar-trunk/channels/chan_h323.c
    team/group/bufo-manager-setvar-trunk/channels/chan_sip.c
    team/group/bufo-manager-setvar-trunk/channels/sig_pri.c
    team/group/bufo-manager-setvar-trunk/channels/sig_ss7.c
    team/group/bufo-manager-setvar-trunk/channels/sip/include/sdp_crypto.h
    team/group/bufo-manager-setvar-trunk/channels/sip/include/sip.h
    team/group/bufo-manager-setvar-trunk/channels/sip/include/srtp.h
    team/group/bufo-manager-setvar-trunk/channels/sip/sdp_crypto.c
    team/group/bufo-manager-setvar-trunk/codecs/gsm/Makefile
    team/group/bufo-manager-setvar-trunk/configs/extensions.conf.sample
    team/group/bufo-manager-setvar-trunk/configs/logger.conf.sample
    team/group/bufo-manager-setvar-trunk/configs/res_pktccops.conf.sample
    team/group/bufo-manager-setvar-trunk/configs/rtp.conf.sample
    team/group/bufo-manager-setvar-trunk/configs/sip.conf.sample
    team/group/bufo-manager-setvar-trunk/configure
    team/group/bufo-manager-setvar-trunk/configure.ac
    team/group/bufo-manager-setvar-trunk/funcs/func_curl.c
    team/group/bufo-manager-setvar-trunk/funcs/func_odbc.c
    team/group/bufo-manager-setvar-trunk/funcs/func_strings.c
    team/group/bufo-manager-setvar-trunk/include/asterisk/app.h
    team/group/bufo-manager-setvar-trunk/include/asterisk/autoconfig.h.in
    team/group/bufo-manager-setvar-trunk/include/asterisk/cel.h
    team/group/bufo-manager-setvar-trunk/include/asterisk/channel.h
    team/group/bufo-manager-setvar-trunk/include/asterisk/event_defs.h
    team/group/bufo-manager-setvar-trunk/include/asterisk/optional_api.h
    team/group/bufo-manager-setvar-trunk/include/asterisk/security_events_defs.h
    team/group/bufo-manager-setvar-trunk/main/Makefile
    team/group/bufo-manager-setvar-trunk/main/app.c
    team/group/bufo-manager-setvar-trunk/main/cel.c
    team/group/bufo-manager-setvar-trunk/main/channel.c
    team/group/bufo-manager-setvar-trunk/main/event.c
    team/group/bufo-manager-setvar-trunk/main/logger.c
    team/group/bufo-manager-setvar-trunk/main/manager.c
    team/group/bufo-manager-setvar-trunk/main/pbx.c
    team/group/bufo-manager-setvar-trunk/main/security_events.c
    team/group/bufo-manager-setvar-trunk/res/res_musiconhold.c
    team/group/bufo-manager-setvar-trunk/res/res_rtp_asterisk.c
    team/group/bufo-manager-setvar-trunk/res/res_srtp.c
    team/group/bufo-manager-setvar-trunk/tests/test_gosub.c
    team/group/bufo-manager-setvar-trunk/tests/test_pbx.c

Propchange: team/group/bufo-manager-setvar-trunk/
            ('svnmerge-integrated' removed)

Modified: team/group/bufo-manager-setvar-trunk/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/CHANGES?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/CHANGES (original)
+++ team/group/bufo-manager-setvar-trunk/CHANGES Tue Sep 27 07:10:13 2011
@@ -217,6 +217,8 @@
 SIP Changes
 -----------
  * Add T38 support for REJECTED state where T.38 Negotiation is explicitly rejected.
+ * Add option encryption_taglen to set auth taglen only 32 and 80 are supported currently.
+ * SIP now generates security events using the Security Events Framework for REGISTER and INVITE.
 
 Queue changes
 -------------
@@ -236,6 +238,7 @@
    a MeetMe conference
  * Added 'k' option to MeetMe to automatically kill the conference when there's only
    one participant left (much like a normal call bridge)
+ * Added extra argument to Originate to set timeout.
 
 Asterisk Database
 -----------------
@@ -252,8 +255,28 @@
 
 IAX2 Changes
 ------------
-* authdebug is now disabled by default. To enable this functionaility again
+ * authdebug is now disabled by default. To enable this functionaility again
    set authdebug = yes in iax.conf.
+
+RTP Changes
+-----------
+ * The rtp.conf setting "strictrtp" is now enabled by default. In previous
+   releases it was disabled.
+
+PBX Core
+--------
+ * The PBX core previously made a call with a non-existing extension test for
+   extension s at default and jump there if the extension existed.
+   This was a bad default behaviour and violated the principle of least surprise.
+   It has therefore been changed in this release. It may affect some
+   applications and configurations that rely on this behaviour. Most channel
+   drivers have avoided this for many releases by testing whether the extension
+   called exists before starting the PBX and generating a local error.
+   This behaviour still exists and works as before.
+
+   Extension "s" is used when no extension is given in a channel driver,
+   like immediate answer in DAHDI or calling to a domain with no user part
+   in a SIP uri.
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 1.6.2 to Asterisk 1.8 ----------------

Modified: team/group/bufo-manager-setvar-trunk/Makefile
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/Makefile?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/Makefile (original)
+++ team/group/bufo-manager-setvar-trunk/Makefile Tue Sep 27 07:10:13 2011
@@ -286,7 +286,7 @@
 ifneq ($(findstring darwin,$(OSARCH)),)
   _ASTCFLAGS+=-D__Darwin__
   SOLINK=-bundle -Xlinker -macosx_version_min -Xlinker 10.4 -Xlinker -undefined -Xlinker dynamic_lookup -force_flat_namespace
-  ifeq ($(shell /usr/bin/sw_vers -productVersion | cut -c1-4),10.7)
+  ifeq ($(shell if test `/usr/bin/sw_vers -productVersion | cut -c4` -gt 5; then echo 6; else echo 0; fi),6)
     SOLINK+=/usr/lib/bundle1.o
   endif
   _ASTLDFLAGS+=-L/usr/local/lib

Modified: team/group/bufo-manager-setvar-trunk/apps/app_confbridge.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_confbridge.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_confbridge.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_confbridge.c Tue Sep 27 07:10:13 2011
@@ -1283,6 +1283,7 @@
 		10,
 		"sln",
 		&duration,
+		NULL,
 		ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE),
 		0,
 		NULL);

Modified: team/group/bufo-manager-setvar-trunk/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_dial.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_dial.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_dial.c Tue Sep 27 07:10:13 2011
@@ -1772,7 +1772,7 @@
 			*/
 			silencethreshold = ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE);
 			ast_answer(chan);
-			res = ast_play_and_record(chan, "priv-recordintro", pa->privintro, 4, "sln", &duration, silencethreshold, 2000, 0);  /* NOTE: I've reduced the total time to 4 sec */
+			res = ast_play_and_record(chan, "priv-recordintro", pa->privintro, 4, "sln", &duration, NULL, silencethreshold, 2000, 0);  /* NOTE: I've reduced the total time to 4 sec */
 									/* don't think we'll need a lock removed, we took care of
 									   conflicts by naming the pa.privintro file */
 			if (res == -1) {
@@ -2325,7 +2325,9 @@
 			ast_copy_string(tc->exten, chan->exten, sizeof(tc->exten));
 
 		ast_channel_unlock(tc);
+		ast_channel_unlock(chan);
 		res = ast_call(tc, numsubst, 0); /* Place the call, but don't wait on the answer */
+		ast_channel_lock(chan);
 
 		/* Save the info in cdr's that we called them */
 		if (chan->cdr)

Modified: team/group/bufo-manager-setvar-trunk/apps/app_echo.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_echo.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_echo.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_echo.c Tue Sep 27 07:10:13 2011
@@ -46,6 +46,8 @@
 		<description>
 			<para>Echos back any audio, video or DTMF frames read from the calling 
 			channel back to itself. Note: If '#' detected application exits</para>
+			<para>This application does not automatically answer and should be
+			preceeded by an application such as Answer() or Progress().</para>
 		</description>
 	</application>
  ***/

Modified: team/group/bufo-manager-setvar-trunk/apps/app_followme.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_followme.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_followme.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_followme.c Tue Sep 27 07:10:13 2011
@@ -1123,7 +1123,7 @@
 			ast_stream_and_wait(chan, targs.statusprompt, "");
 
 		if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_RECORDNAME)) 
-			if (ast_play_and_record(chan, "vm-rec-name", namerecloc, 5, "sln", &duration, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE), 0, NULL) < 0)
+			if (ast_play_and_record(chan, "vm-rec-name", namerecloc, 5, "sln", &duration, NULL, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE), 0, NULL) < 0)
 				goto outrun;
 
 		if (!ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_DISABLEHOLDPROMPT)) {

Modified: team/group/bufo-manager-setvar-trunk/apps/app_meetme.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_meetme.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_meetme.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_meetme.c Tue Sep 27 07:10:13 2011
@@ -2548,7 +2548,7 @@
 
 		res = 0;
 		if (ast_test_flag64(confflags, CONFFLAG_INTROUSERNOREVIEW) && !ast_fileexists(user->namerecloc, NULL, NULL))
-			res = ast_play_and_record(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE), 0, NULL);
+			res = ast_play_and_record(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, NULL, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE), 0, NULL);
 		else if (ast_test_flag64(confflags, CONFFLAG_INTROUSER) && !ast_fileexists(user->namerecloc, NULL, NULL))
 			res = ast_record_review(chan, "vm-rec-name", user->namerecloc, 10, "sln", &duration, NULL);
 		if (res == -1)

Modified: team/group/bufo-manager-setvar-trunk/apps/app_minivm.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_minivm.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_minivm.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_minivm.c Tue Sep 27 07:10:13 2011
@@ -1313,6 +1313,9 @@
 	}
 	/* Allocate channel used for chanvar substitution */
 	ast = ast_dummy_channel_alloc();
+	if (!ast) {
+		return -1;
+	}
 
 	snprintf(dur, sizeof(dur), "%d:%02d", duration / 60, duration % 60);
 
@@ -1473,8 +1476,7 @@
 	ast_safe_system(tmp2);
 	ast_debug(1, "Sent message to %s with command '%s' - %s\n", vmu->email, global_mailcmd, template->attachment ? "(media attachment)" : "");
 	ast_debug(3, "Actual command used: %s\n", tmp2);
-	if (ast)
-		ast = ast_channel_release(ast);
+	ast = ast_channel_unref(ast);
 	ast_free(str1);
 	ast_free(str2);
 	return 0;
@@ -1603,7 +1605,7 @@
 /*!\internal
  * \brief Record voicemail message & let caller review or re-record it, or set options if applicable */
 static int play_record_review(struct ast_channel *chan, char *playfile, char *recordfile, int maxtime, char *fmt,
-			      int outsidecaller, struct minivm_account *vmu, int *duration, const char *unlockdir,
+			      int outsidecaller, struct minivm_account *vmu, int *duration, int *sound_duration, const char *unlockdir,
 			      signed char record_gain)
 {
 	int cmd = 0;
@@ -1653,7 +1655,7 @@
 				ast_channel_setoption(chan, AST_OPTION_RXGAIN, &record_gain, sizeof(record_gain), 0);
 			if (ast_test_flag(vmu, MVM_OPERATOR))
 				canceldtmf = "0";
-			cmd = ast_play_and_record_full(chan, playfile, recordfile, maxtime, fmt, duration, global_silencethreshold, global_maxsilence, unlockdir, acceptdtmf, canceldtmf);
+			cmd = ast_play_and_record_full(chan, playfile, recordfile, maxtime, fmt, duration, sound_duration, global_silencethreshold, global_maxsilence, unlockdir, acceptdtmf, canceldtmf);
 			if (record_gain)
 				ast_channel_setoption(chan, AST_OPTION_RXGAIN, &zero_gain, sizeof(zero_gain), 0);
 			if (cmd == -1) /* User has hung up, no options to give */
@@ -1842,6 +1844,7 @@
 	FILE *txt;
 	int res = 0, txtdes;
 	int duration = 0;
+	int sound_duration = 0;
 	char date[256];
 	char tmpdir[PATH_MAX];
 	char ext_context[256] = "";
@@ -1917,7 +1920,7 @@
 	/* Store information */
 	ast_debug(2, "Open file for metadata: %s\n", tmptxtfile);
 
-	res = play_record_review(chan, NULL, tmptxtfile, global_vmmaxmessage, fmt, 1, vmu, &duration, NULL, options->record_gain);
+	res = play_record_review(chan, NULL, tmptxtfile, global_vmmaxmessage, fmt, 1, vmu, &duration, &sound_duration, NULL, options->record_gain);
 
 	txt = fdopen(txtdes, "w+");
 	if (!txt) {
@@ -1958,8 +1961,8 @@
 			ast_mutex_unlock(&minivmloglock);
 		}
 
-		if (duration < global_vmminmessage) {
-			ast_verb(3, "Recording was %d seconds long but needs to be at least %d - abandoning\n", duration, global_vmminmessage);
+		if (sound_duration < global_vmminmessage) {
+			ast_verb(3, "Recording was %d seconds long but needs to be at least %d - abandoning\n", sound_duration, global_vmminmessage);
 			fclose(txt);
 			ast_filedelete(tmptxtfile, NULL);
 			unlink(tmptxtfile);
@@ -2536,7 +2539,7 @@
 	}
 	snprintf(filename,sizeof(filename), "%s%s/%s/%s", MVM_SPOOL_DIR, vmu->domain, vmu->username, message);
 	/* Maybe we should check the result of play_record_review ? */
-	play_record_review(chan, prompt, filename, global_maxgreet, default_vmformat, 0, vmu, &duration, NULL, FALSE);
+	play_record_review(chan, prompt, filename, global_maxgreet, default_vmformat, 0, vmu, &duration, NULL, NULL, FALSE);
 
 	ast_debug(1, "Recorded new %s message in %s (duration %d)\n", message, filename, duration);
 

Modified: team/group/bufo-manager-setvar-trunk/apps/app_mixmonitor.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_mixmonitor.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_mixmonitor.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_mixmonitor.c Tue Sep 27 07:10:13 2011
@@ -117,6 +117,8 @@
 		</syntax>
 		<description>
 			<para>Records the audio on the current channel to the specified file.</para>
+			<para>This application does not automatically answer and should be preceeded by
+			an application such as Answer or Progress().</para>
 			<variablelist>
 				<variable name="MIXMONITOR_FILENAME">
 					<para>Will contain the filename used to record.</para>

Modified: team/group/bufo-manager-setvar-trunk/apps/app_morsecode.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_morsecode.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_morsecode.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_morsecode.c Tue Sep 27 07:10:13 2011
@@ -50,7 +50,8 @@
 		</syntax>
 		<description>
 			<para>Plays the Morse code equivalent of the passed string.</para>
-
+			<para>This application does not automatically answer and should be preceeded by
+			an application such as Answer() or Progress().</para>
 			<para>This application uses the following variables:</para>
 			<variablelist>
 				<variable name="MORSEDITLEN">

Modified: team/group/bufo-manager-setvar-trunk/apps/app_mp3.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_mp3.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_mp3.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_mp3.c Tue Sep 27 07:10:13 2011
@@ -65,9 +65,11 @@
 		<description>
 			<para>Executes mpg123 to play the given location, which typically would be a mp3 filename
 			or m3u playlist filename or a URL. Please read http://en.wikipedia.org/wiki/M3U
-			to see how M3U playlist file format is like, Example usage would be 
+			to see how M3U playlist file format is like, Example usage would be
 			exten => 1234,1,MP3Player(/var/lib/asterisk/playlist.m3u)
 			User can exit by pressing any key on the dialpad, or by hanging up.</para>
+			<para>This application does not automatically answer and should be preceeded by an
+			application such as Answer() or Progress().</para>
 		</description>
 	</application>
 

Modified: team/group/bufo-manager-setvar-trunk/apps/app_originate.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_originate.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_originate.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_originate.c Tue Sep 27 07:10:13 2011
@@ -69,6 +69,9 @@
 			</parameter>
 			<parameter name="arg3" required="false">
 				<para>If the type is <literal>exten</literal>, then this is the priority that the channel is sent to.  If the type is <literal>app</literal>, then this parameter is ignored.</para>
+			</parameter>
+			<parameter name="timeout" required="false">
+				<para>Timeout in seconds. Default is 30 seconds.</para>
 			</parameter>
 		</syntax>
 		<description>
@@ -101,12 +104,13 @@
 		AST_APP_ARG(arg1);
 		AST_APP_ARG(arg2);
 		AST_APP_ARG(arg3);
+		AST_APP_ARG(timeout);
 	);
 	char *parse;
 	char *chantech, *chandata;
 	int res = -1;
 	int outgoing_status = 0;
-	static const unsigned int timeout = 30;
+	unsigned int timeout = 30;
 	static const char default_exten[] = "s";
 	struct ast_format tmpfmt;
 	struct ast_format_cap *cap_slin = ast_format_cap_alloc_nolock();
@@ -129,6 +133,13 @@
 	if (args.argc < 3) {
 		ast_log(LOG_ERROR, "Incorrect number of arguments\n");
 		goto return_cleanup;
+	}
+
+	if (!ast_strlen_zero(args.timeout)) {
+		if(sscanf(args.timeout, "%u", &timeout) != 1) {
+			ast_log(LOG_NOTICE, "Invalid timeout: '%s'. Setting timeout to 30 seconds\n", args.timeout);
+			timeout = 30;
+		}
 	}
 
 	chandata = ast_strdupa(args.tech_data);

Modified: team/group/bufo-manager-setvar-trunk/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_queue.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_queue.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_queue.c Tue Sep 27 07:10:13 2011
@@ -224,6 +224,8 @@
 			up by another user.</para>
 			<para>This application will return to the dialplan if the queue does not exist, or
 			any of the join options cause the caller to not enter the queue.</para>
+			<para>This application does not automatically answer and should be preceeded
+			by an application such as Answer(), Progress(), or Ringing().</para>
 			<para>This application sets the following channel variable upon completion:</para>
 			<variablelist>
 				<variable name="QUEUESTATUS">
@@ -5075,8 +5077,34 @@
 		qe->handled++;
 		ast_queue_log(queuename, qe->chan->uniqueid, member->membername, "CONNECT", "%ld|%s|%ld", (long) time(NULL) - qe->start, peer->uniqueid,
 													(long)(orig - to > 0 ? (orig - to) / 1000 : 0));
-		if (update_cdr && qe->chan->cdr) 
-			ast_copy_string(qe->chan->cdr->dstchannel, member->membername, sizeof(qe->chan->cdr->dstchannel));
+
+		if (qe->chan->cdr) {
+			struct ast_cdr *cdr;
+			struct ast_cdr *newcdr;
+
+			/* Only work with the last CDR in the stack*/
+			cdr = qe->chan->cdr;
+			while (cdr->next) {
+				cdr = cdr->next;
+			}
+
+			/* If this CDR is not related to us add new one*/
+			if ((strcasecmp(cdr->uniqueid, qe->chan->uniqueid)) &&
+			    (strcasecmp(cdr->linkedid, qe->chan->uniqueid)) &&
+			    (newcdr = ast_cdr_dup(cdr))) {
+				ast_cdr_init(newcdr, qe->chan);
+				ast_cdr_reset(newcdr, 0);
+				ast_channel_lock(qe->chan);
+				cdr = ast_cdr_append(cdr, newcdr);
+				cdr = cdr->next;
+				ast_channel_unlock(qe->chan);
+			}
+
+			if (update_cdr) {
+				ast_copy_string(cdr->dstchannel, member->membername, sizeof(cdr->dstchannel));
+			}
+		}
+
 		if (qe->parent->eventwhencalled)
 			manager_event(EVENT_FLAG_AGENT, "AgentConnect",
 					"Queue: %s\r\n"

Modified: team/group/bufo-manager-setvar-trunk/apps/app_saycounted.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_saycounted.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_saycounted.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_saycounted.c Tue Sep 27 07:10:13 2011
@@ -62,6 +62,8 @@
 			file name is never seen by the end user, there is no need to
 			implement complicated spelling rules.  We simply record the word
 			"men" in the sound file named "mans".</para>
+			<para>This application does not automatically answer and should be
+			preceeded by an application such as Answer() or Progress.</para>
 		</description>
 		<see-also>
 			<ref type="application">SayCountedAdj</ref>
@@ -99,6 +101,9 @@
 			will play sound file "newa" (containing the word "novaya"), but
 			SayCountedAdj(5,new,f) will play sound file "newx" (containing the
 			word "novikh").</para>
+			<para>This application does not automatically answer and should be
+			preceeded by an application such as Answer(), Progress(), or
+			Proceeding().</para>
 		</description>
 		<see-also>
 			<ref type="application">SayCountedNoun</ref>

Modified: team/group/bufo-manager-setvar-trunk/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/apps/app_voicemail.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/apps/app_voicemail.c (original)
+++ team/group/bufo-manager-setvar-trunk/apps/app_voicemail.c Tue Sep 27 07:10:13 2011
@@ -435,8 +435,8 @@
 #define ASTERISK_USERNAME "asterisk"
 
 /* Define fast-forward, pause, restart, and reverse keys
-   while listening to a voicemail message - these are
-   strings, not characters */
+ * while listening to a voicemail message - these are
+ * strings, not characters */
 #define DEFAULT_LISTEN_CONTROL_FORWARD_KEY "#"
 #define DEFAULT_LISTEN_CONTROL_REVERSE_KEY "*"
 #define DEFAULT_LISTEN_CONTROL_PAUSE_KEY "0"
@@ -445,7 +445,7 @@
 #define VALID_DTMF "1234567890*#" /* Yes ABCD are valid dtmf but what phones have those? */
 
 /* Default mail command to mail voicemail. Change it with the
-    mailcmd= command in voicemail.conf */
+ * mailcmd= command in voicemail.conf */
 #define SENDMAIL "/usr/sbin/sendmail -t"
 
 #define INTRO "vm-intro"
@@ -905,7 +905,7 @@
 static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms, int msg, int option, signed char record_gain);
 static int dialout(struct ast_channel *chan, struct ast_vm_user *vmu, char *num, char *outgoing_context);
 static int play_record_review(struct ast_channel *chan, char *playfile, char *recordfile, int maxtime,
-			char *fmt, int outsidecaller, struct ast_vm_user *vmu, int *duration, const char *unlockdir,
+			char *fmt, int outsidecaller, struct ast_vm_user *vmu, int *duration, int *sound_duration, const char *unlockdir,
 			signed char record_gain, struct vm_state *vms, char *flag);
 static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, struct vm_state *vms, char *fmtc, signed char record_gain);
 static int vm_play_folder_name(struct ast_channel *chan, char *mbox);
@@ -3245,9 +3245,9 @@
 #endif /* IMAP_STORAGE */
 
 /*! \brief Lock file path
-    only return failure if ast_lock_path returns 'timeout',
-   not if the path does not exist or any other reason
-*/
+ * only return failure if ast_lock_path returns 'timeout',
+ * not if the path does not exist or any other reason
+ */
 static int vm_lock_path(const char *path)
 {
 	switch (ast_lock_path(path)) {
@@ -4573,7 +4573,7 @@
 			} else {
 				fprintf(p, "From: %s <%s>" ENDL, ast_str_quote(&str2, 0, ast_str_buffer(str1)), who);
 			}
-			ast = ast_channel_release(ast);
+			ast = ast_channel_unref(ast);
 		} else {
 			ast_log(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
 		}
@@ -4618,7 +4618,7 @@
 			} else {
 				fprintf(p, "Subject: %s" ENDL, ast_str_buffer(str1));
 			}
-			ast = ast_channel_release(ast);
+			ast = ast_channel_unref(ast);
 		} else {
 			ast_log(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
 		}
@@ -4704,7 +4704,7 @@
 #else
 			fprintf(p, "%s" ENDL, ast_str_buffer(str1));
 #endif
-			ast = ast_channel_release(ast);
+			ast = ast_channel_unref(ast);
 		} else {
 			ast_log(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
 		}
@@ -4931,7 +4931,7 @@
 			} else {
 				fprintf(p, "From: %s <%s>" ENDL, ast_str_quote(&str2, 0, ast_str_buffer(str1)), who);
 			}
-			ast = ast_channel_release(ast);
+			ast = ast_channel_unref(ast);
 		} else {
 			ast_log(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
 		}
@@ -4975,7 +4975,7 @@
 			} else {
 				fprintf(p, "Subject: %s" ENDL, ast_str_buffer(str1));
 			}
-			ast = ast_channel_release(ast);
+			ast = ast_channel_unref(ast);
 		} else {
 			ast_log(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
 		}
@@ -4993,7 +4993,7 @@
 			prep_email_sub_vars(ast, vmu, msgnum + 1, context, mailbox, fromfolder, cidnum, cidname, dur, date, category, flag);
 			ast_str_substitute_variables(&str1, 0, ast, pagerbody);
 			fprintf(p, "%s" ENDL, ast_str_buffer(str1));
-			ast = ast_channel_release(ast);
+			ast = ast_channel_unref(ast);
 		} else {
 			ast_log(AST_LOG_WARNING, "Cannot allocate the channel for variables substitution\n");
 		}
@@ -5577,6 +5577,7 @@
 	int res = 0;
 	int msgnum;
 	int duration = 0;
+	int sound_duration = 0;
 	int ausemacro = 0;
 	int ousemacro = 0;
 	int ouseexten = 0;
@@ -5964,13 +5965,13 @@
 			res = ast_streamfile(chan, "vm-mailboxfull", chan->language);
 			goto leave_vm_out;
 		}
-		res = play_record_review(chan, NULL, tmptxtfile, vmu->maxsecs, fmt, 1, vmu, &duration, NULL, options->record_gain, vms, flag);
+		res = play_record_review(chan, NULL, tmptxtfile, vmu->maxsecs, fmt, 1, vmu, &duration, &sound_duration, NULL, options->record_gain, vms, flag);
 
 		if (txt) {
 			fprintf(txt, "flag=%s\n", flag);
-			if (duration < vmu->minsecs) {
+			if (sound_duration < vmu->minsecs) {
 				fclose(txt);
-				ast_verb(3, "Recording was %d seconds long but needs to be at least %d - abandoning\n", duration, vmu->minsecs);
+				ast_verb(3, "Recording was %d seconds long but needs to be at least %d - abandoning\n", sound_duration, vmu->minsecs);
 				ast_filedelete(tmptxtfile, NULL);
 				unlink(tmptxtfile);
 				if (ast_check_realtime("voicemail_data")) {
@@ -6092,7 +6093,7 @@
 		} else if (res > 0 && res != 't')
 			res = 0;
 
-		if (duration < vmu->minsecs)
+		if (sound_duration < vmu->minsecs)
 			/* XXX We should really give a prompt too short/option start again, with leave_vm_out called only after a timeout XXX */
 			pbx_builtin_setvar_helper(chan, "VMSTATUS", "FAILED");
 		else
@@ -6124,30 +6125,31 @@
 #if !defined(IMAP_STORAGE)
 static int resequence_mailbox(struct ast_vm_user *vmu, char *dir, int stopcount)
 {
-    /* we know the actual number of messages, so stop process when number is hit */
-
-    int x, dest;
-    char sfn[PATH_MAX];
-    char dfn[PATH_MAX];
-
-    if (vm_lock_path(dir))
-        return ERROR_LOCK_PATH;
-
-    for (x = 0, dest = 0; dest != stopcount && x < vmu->maxmsg + 10; x++) {
-        make_file(sfn, sizeof(sfn), dir, x);
-        if (EXISTS(dir, x, sfn, NULL)) {
-
-            if (x != dest) {
-                make_file(dfn, sizeof(dfn), dir, dest);
-                RENAME(dir, x, vmu->mailbox, vmu->context, dir, dest, sfn, dfn);
-            }
-
-            dest++;
-        }
-    }
-    ast_unlock_path(dir);
-
-    return dest;
+	/* we know the actual number of messages, so stop process when number is hit */
+
+	int x, dest;
+	char sfn[PATH_MAX];
+	char dfn[PATH_MAX];
+
+	if (vm_lock_path(dir)) {
+		return ERROR_LOCK_PATH;
+	}
+
+	for (x = 0, dest = 0; dest != stopcount && x < vmu->maxmsg + 10; x++) {
+		make_file(sfn, sizeof(sfn), dir, x);
+		if (EXISTS(dir, x, sfn, NULL)) {
+
+			if (x != dest) {
+				make_file(dfn, sizeof(dfn), dir, dest);
+				RENAME(dir, x, vmu->mailbox, vmu->context, dir, dest, sfn, dfn);
+			}
+
+			dest++;
+		}
+	}
+	ast_unlock_path(dir);
+
+	return dest;
 }
 #endif
 
@@ -6870,7 +6872,7 @@
 			strncat(vms->introfn, "intro", sizeof(vms->introfn));
 			res = ast_play_and_wait(chan, INTRO);
 			res = ast_play_and_wait(chan, "beep");
-			res = play_record_review(chan, NULL, vms->introfn, vmu->maxsecs, vm_fmts, 1, vmu, (int *) duration, NULL, record_gain, vms, flag);
+			res = play_record_review(chan, NULL, vms->introfn, vmu->maxsecs, vm_fmts, 1, vmu, (int *) duration, NULL, NULL, record_gain, vms, flag);
 			cmd = 't';
 #else
 
@@ -6903,7 +6905,7 @@
 			if (record_gain)
 				ast_channel_setoption(chan, AST_OPTION_RXGAIN, &record_gain, sizeof(record_gain), 0);
 
-			cmd = ast_play_and_prepend(chan, NULL, msgfile, 0, vm_fmts, &prepend_duration, 1, silencethreshold, maxsilence);
+			cmd = ast_play_and_prepend(chan, NULL, msgfile, 0, vm_fmts, &prepend_duration, NULL, 1, silencethreshold, maxsilence);
 
 			if (cmd == 'S') { /* If we timed out, tell the user it didn't work properly and clean up the files */
 				ast_stream_and_wait(chan, vm_pls_try_again, ""); /* this might be removed if a proper vm_prepend_timeout is ever recorded */
@@ -9237,7 +9239,7 @@
 	if (ast_test_flag(vmu, VM_FORCENAME)) {
 		snprintf(prefile, sizeof(prefile), "%s%s/%s/greet", VM_SPOOL_DIR, vmu->context, vms->username);
 		if (ast_fileexists(prefile, NULL, NULL) < 1) {
-			cmd = play_record_review(chan, "vm-rec-name", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain, vms, NULL);
+			cmd = play_record_review(chan, "vm-rec-name", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
 			if (cmd < 0 || cmd == 't' || cmd == '#')
 				return cmd;
 		}
@@ -9247,14 +9249,14 @@
 	if (ast_test_flag(vmu, VM_FORCEGREET)) {
 		snprintf(prefile, sizeof(prefile), "%s%s/%s/unavail", VM_SPOOL_DIR, vmu->context, vms->username);
 		if (ast_fileexists(prefile, NULL, NULL) < 1) {
-			cmd = play_record_review(chan, "vm-rec-unv", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain, vms, NULL);
+			cmd = play_record_review(chan, "vm-rec-unv", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
 			if (cmd < 0 || cmd == 't' || cmd == '#')
 				return cmd;
 		}
 
 		snprintf(prefile, sizeof(prefile), "%s%s/%s/busy", VM_SPOOL_DIR, vmu->context, vms->username);
 		if (ast_fileexists(prefile, NULL, NULL) < 1) {
-			cmd = play_record_review(chan, "vm-rec-busy", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain, vms, NULL);
+			cmd = play_record_review(chan, "vm-rec-busy", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
 			if (cmd < 0 || cmd == 't' || cmd == '#')
 				return cmd;
 		}
@@ -9289,15 +9291,15 @@
 		switch (cmd) {
 		case '1': /* Record your unavailable message */
 			snprintf(prefile, sizeof(prefile), "%s%s/%s/unavail", VM_SPOOL_DIR, vmu->context, vms->username);
-			cmd = play_record_review(chan, "vm-rec-unv", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain, vms, NULL);
+			cmd = play_record_review(chan, "vm-rec-unv", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
 			break;
 		case '2':  /* Record your busy message */
 			snprintf(prefile, sizeof(prefile), "%s%s/%s/busy", VM_SPOOL_DIR, vmu->context, vms->username);
-			cmd = play_record_review(chan, "vm-rec-busy", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain, vms, NULL);
+			cmd = play_record_review(chan, "vm-rec-busy", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
 			break;
 		case '3': /* Record greeting */
 			snprintf(prefile, sizeof(prefile), "%s%s/%s/greet", VM_SPOOL_DIR, vmu->context, vms->username);
-			cmd = play_record_review(chan, "vm-rec-name", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain, vms, NULL);
+			cmd = play_record_review(chan, "vm-rec-name", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
 			break;
 		case '4':  /* manage the temporary greeting */
 			cmd = vm_tempgreeting(chan, vmu, vms, fmtc, record_gain);
@@ -9431,12 +9433,12 @@
 			retries = 0;
 		RETRIEVE(prefile, -1, vmu->mailbox, vmu->context);
 		if (ast_fileexists(prefile, NULL, NULL) <= 0) {
-			play_record_review(chan, "vm-rec-temp", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain, vms, NULL);
+			play_record_review(chan, "vm-rec-temp", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
 			cmd = 't';	
 		} else {
 			switch (cmd) {
 			case '1':
-				cmd = play_record_review(chan, "vm-rec-temp", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain, vms, NULL);
+				cmd = play_record_review(chan, "vm-rec-temp", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, NULL, record_gain, vms, NULL);
 				break;
 			case '2':
 				DELETE(prefile, -1, prefile, vmu);
@@ -12687,6 +12689,9 @@
 		!(vmu = find_or_create(testcontext, testmailbox))) {
 		ast_test_status_update(test, "Cannot create vmu structure\n");
 		ast_unreplace_sigchld();
+#ifdef IMAP_STORAGE
+		chan = ast_channel_unref(chan);
+#endif
 		return AST_TEST_FAIL;
 	}
 
@@ -12706,6 +12711,9 @@
 				ast_test_status_update(test, "Unable to create test voicemail: %s\n",
 					syserr > 0 ? strerror(syserr) : "unable to fork()");
 				ast_unreplace_sigchld();
+#ifdef IMAP_STORAGE
+				chan = ast_channel_unref(chan);
+#endif
 				return AST_TEST_FAIL;
 			}
 		}
@@ -12779,7 +12787,7 @@
 	}
 
 #ifdef IMAP_STORAGE
-	chan = ast_channel_release(chan);
+	chan = ast_channel_unref(chan);
 #endif
 
 	/* And remove test directory */
@@ -13252,7 +13260,7 @@
 }
 
 static int play_record_review(struct ast_channel *chan, char *playfile, char *recordfile, int maxtime, char *fmt,
-			int outsidecaller, struct ast_vm_user *vmu, int *duration, const char *unlockdir,
+			int outsidecaller, struct ast_vm_user *vmu, int *duration, int *sound_duration, const char *unlockdir,
 			signed char record_gain, struct vm_state *vms, char *flag)
 {
 	/* Record message & let caller review or re-record it, or set options if applicable */
@@ -13327,7 +13335,7 @@
 				ast_channel_setoption(chan, AST_OPTION_RXGAIN, &record_gain, sizeof(record_gain), 0);
 			if (ast_test_flag(vmu, VM_OPERATOR))
 				canceldtmf = "0";
-			cmd = ast_play_and_record_full(chan, playfile, tempfile, maxtime, fmt, duration, silencethreshold, maxsilence, unlockdir, acceptdtmf, canceldtmf);
+			cmd = ast_play_and_record_full(chan, playfile, tempfile, maxtime, fmt, duration, sound_duration, silencethreshold, maxsilence, unlockdir, acceptdtmf, canceldtmf);
 			if (strchr(canceldtmf, cmd)) {
 			/* need this flag here to distinguish between pressing '0' during message recording or after */
 				canceleddtmf = 1;
@@ -13347,13 +13355,13 @@
 			} else if (cmd == '*') {
 				break;
 #if 0
-			} else if (vmu->review && (*duration < 5)) {
+			} else if (vmu->review && sound_duration && (*sound_duration < 5)) {
 				/* Message is too short */
 				ast_verb(3, "Message too short\n");
 				cmd = ast_play_and_wait(chan, "vm-tooshort");
 				cmd = ast_filedelete(tempfile, NULL);
 				break;
-			} else if (vmu->review && (cmd == 2 && *duration < (maxsilence + 3))) {
+			} else if (vmu->review && (cmd == 2 && sound_duration && *sound_duration < (maxsilence + 3))) {
 				/* Message is all silence */
 				ast_verb(3, "Nothing recorded\n");
 				cmd = ast_filedelete(tempfile, NULL);

Modified: team/group/bufo-manager-setvar-trunk/cel/cel_custom.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/cel/cel_custom.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/cel/cel_custom.c (original)
+++ team/group/bufo-manager-setvar-trunk/cel/cel_custom.c Tue Sep 27 07:10:13 2011
@@ -128,7 +128,6 @@
 	}
 
 	dummy = ast_cel_fabricate_channel_from_event(event);
-
 	if (!dummy) {
 		ast_log(LOG_ERROR, "Unable to fabricate channel from CEL event.\n");
 		return;
@@ -163,7 +162,7 @@
 
 	AST_RWLIST_UNLOCK(&sinks);
 
-	ast_channel_release(dummy);
+	ast_channel_unref(dummy);
 }
 
 static int unload_module(void)

Modified: team/group/bufo-manager-setvar-trunk/cel/cel_sqlite3_custom.c
URL: http://svnview.digium.com/svn/asterisk/team/group/bufo-manager-setvar-trunk/cel/cel_sqlite3_custom.c?view=diff&rev=338041&r1=338040&r2=338041
==============================================================================
--- team/group/bufo-manager-setvar-trunk/cel/cel_sqlite3_custom.c (original)
+++ team/group/bufo-manager-setvar-trunk/cel/cel_sqlite3_custom.c Tue Sep 27 07:10:13 2011
@@ -262,7 +262,7 @@
 		}
 		sql = sqlite3_mprintf("INSERT INTO %q (%s) VALUES (%s)", table, columns, ast_str_buffer(value_string));
 		ast_debug(1, "About to log: %s\n", sql);
-		dummy = ast_channel_release(dummy);

[... 4771 lines stripped ...]



More information about the asterisk-commits mailing list