[svn-commits] bebuild: tag 12.1.0-rc2 r409153 - in /tags/12.1.0-rc2: ./ configs/ funcs/ mai...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Feb 27 16:15:18 CST 2014


Author: bebuild
Date: Thu Feb 27 16:15:11 2014
New Revision: 409153

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=409153
Log:
Merge changes for -rc2

Merge the following:
 * r407676
 * r407747
 * r407750
 * r407937
 * r408855
 * r409054
 * r409131

Modified:
    tags/12.1.0-rc2/   (props changed)
    tags/12.1.0-rc2/ChangeLog
    tags/12.1.0-rc2/configs/res_fax.conf.sample
    tags/12.1.0-rc2/funcs/func_cdr.c
    tags/12.1.0-rc2/main/asterisk.c
    tags/12.1.0-rc2/main/security_events.c
    tags/12.1.0-rc2/res/ari/resource_channels.c
    tags/12.1.0-rc2/res/res_fax.c
    tags/12.1.0-rc2/res/res_rtp_asterisk.c

Propchange: tags/12.1.0-rc2/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Thu Feb 27 16:15:11 2014
@@ -1,0 +1,1 @@
+/branches/12:407676,407747,407750,407937,408555,408855,409054,409131

Modified: tags/12.1.0-rc2/ChangeLog
URL: http://svnview.digium.com/svn/asterisk/tags/12.1.0-rc2/ChangeLog?view=diff&rev=409153&r1=409152&r2=409153
==============================================================================
--- tags/12.1.0-rc2/ChangeLog (original)
+++ tags/12.1.0-rc2/ChangeLog Thu Feb 27 16:15:11 2014
@@ -1,3 +1,103 @@
+2013-02-27  Asterisk Development Team <asteriskteam at digium.com>
+
+	* Asterisk 12.1.0-rc2 Released.
+
+	* res_rtp_asterisk: Fix checklist creating problems in ICE sessions
+	  
+	  Prior to this patch, local candidate lists including SRFLX would
+	  fail to start properly when building ICE candidate check lists. This
+	  patch fixes that problem by making sure that each SRFLX candidate is
+	  associated with the proper base address so that the check list can
+	  create matches properly.
+
+	  This patch was written by jcolp. The issue will be left open to await
+	  testing by the issue participants.       
+
+	  (issue ASTERISK-23213)
+	  Reported by: Andrea Suisani
+	  Review: https://reviewboard.asterisk.org/r/3256/
+
+	* res_fax: Warn that minrate=2400 is not valid for V.27 instead of
+	  failing load.
+
+	  Change minrate from 2400 to 4800 on config reload in response to
+	  changes from ASTERISK-22790 only.  Any config with minrate of
+	  2400 that would fail before r405693 will still fail.
+
+	  Comment out many settings in res_fax.conf.sample. The defaults are
+	  set in res_fax.c, so setting the same value in sample config does
+	  nothing but make the sample config more fragile.
+
+	  (closes issue ASTERISK-23231)
+	  Reported by: David Brillert
+	  Review: https://reviewboard.asterisk.org/r/3261/
+
+	* main: Initialize dialplan providing core components prior to module
+	  pre-load
+
+	  It is possible to pre-load pbx_config. As a result, pbx_config -
+	  which will load and parse the dialplan - will attempt to use various
+	  dialplan components, such as device state providers and presence
+	  state providers, prior to them being initialized by the core. This
+	  would lead to a crash, as the components had not created their Stasis
+	  cache entries.
+
+	  This patch moves a number of core component initializations before
+	  the module pre-load. This guarantees that if someone does pre-load
+	  pbx_config - or other pbx modules - that the Stasis caches for the
+	  various core components are created.
+
+	  (closes issue ASTERISK-23320)
+	  Reported by: xrobau
+
+	  (closes issue ASTERISK-23265)
+	  Reported by: Andrew Nagy
+	  Tested by: Andrew Nagy, Rusty Newton
+
+	* ari/resource_channels: Add channel variables earlier in the creation
+	  process
+
+	  This patch tweaks the behaviour of POST /channels with channel
+	  variables such that the variables are passed into the pbx.c routines
+	  that perform the origination. This allows the variables to be
+	  assigned to the newly	created	channels immediately upon their
+	  construction, as opposed to be assigned after the originate has
+	  completed.
+
+	  The upshot of this is that the variables are available on the
+	  channels if they execute in the dialplan, as opposed to only being
+	  available once the channels are answered.
+
+	* security_events: Fix assertion failure in dev-mode on optional IE
+	  parsing
+
+	  When formatting an optional IE, the value is, of course, optional. As
+	  such, it is entirely appropriate for ast_json_object_get to return
+	  NULL. If that occurs, we now simply skip the IE that was requested,
+	  as it was not provided by the entity that raised the event.
+
+	  Thanks to George Joseph (gtjoseph) for catching this and reporting it
+	  in #asterisk-dev
+
+	* funcs/func_cdr: Handle empty time values when extracting parsed
+	  values
+
+	  When extracting timestamps that are parsed, time stamp values that
+	  are not set (time values of 0.000000) should not actually result in
+	  a parsed string. The value should be skipped, and the result of the
+	  CDR function should be an empty string.
+
+	  Prior to this patch, the result was fed to the time formatting, which
+	  would result in an output of a date/time in 1969.
+
+	* security_events: Fix error caused by DTD validation error
+
+	  The appdocsxml.dtd specifies that a "required" attribute in a
+	  parameter may have a value of yes, no, true, or false. On some
+	  systems, specifying "False" instead of "false" would cause a
+	  validation error. This patch fixes the casing to explicitly match
+	  the DTD.
+
 2013-02-06  Asterisk Development Team <asteriskteam at digium.com>
 
 	* Asterisk 12.1.0-rc1 Released.

Modified: tags/12.1.0-rc2/configs/res_fax.conf.sample
URL: http://svnview.digium.com/svn/asterisk/tags/12.1.0-rc2/configs/res_fax.conf.sample?view=diff&rev=409153&r1=409152&r2=409153
==============================================================================
--- tags/12.1.0-rc2/configs/res_fax.conf.sample (original)
+++ tags/12.1.0-rc2/configs/res_fax.conf.sample Thu Feb 27 16:15:11 2014
@@ -4,12 +4,12 @@
 ; Maximum Transmission Rate
 ; Possible values are { 2400 | 4800 | 7200 | 9600 | 12000 | 14400 }
 ; Set this value to the maximum desired transfer rate.  Default: 14400
-maxrate=14400
+;maxrate=14400
 
 ; Minimum Transmission Rate
 ; Possible values are { 2400 | 4800 | 7200 | 9600 | 12000 | 14400 }
 ; Set this value to the minimum desired transfer rate.  Default: 4800
-minrate=4800
+;minrate=4800
 
 ; Send Progress/Status events to manager session
 ; Manager events with 'call' class permissions will receive events indicating the
@@ -21,8 +21,8 @@
 ; modem capabilities
 ; Possible values are { v17 | v27 | v29 }
 ; Set this value to modify the default modem options.  Default: v17,v27,v29
-modems=v17,v27,v29
+;modems=v17,v27,v29
 
 ; Enable/disable T.30 ECM (error correction mode) by default.
 ; Default: Enabled
-ecm=yes
+;ecm=yes

Modified: tags/12.1.0-rc2/funcs/func_cdr.c
URL: http://svnview.digium.com/svn/asterisk/tags/12.1.0-rc2/funcs/func_cdr.c?view=diff&rev=409153&r1=409152&r2=409153
==============================================================================
--- tags/12.1.0-rc2/funcs/func_cdr.c (original)
+++ tags/12.1.0-rc2/funcs/func_cdr.c Thu Feb 27 16:15:11 2014
@@ -291,9 +291,13 @@
 					args.variable, tempbuf, ast_channel_name(payload->chan));
 				return;
 			}
-			fmt_time.tv_usec = tv_usec;
-			ast_localtime(&fmt_time, &tm, NULL);
-			ast_strftime(tempbuf, sizeof(tempbuf), "%Y-%m-%d %T", &tm);
+			if (fmt_time.tv_sec) {
+				fmt_time.tv_usec = tv_usec;
+				ast_localtime(&fmt_time, &tm, NULL);
+				ast_strftime(tempbuf, sizeof(tempbuf), "%Y-%m-%d %T", &tm);
+			} else {
+				tempbuf[0] = '\0';
+			}
 		} else if (!strcasecmp("disposition", args.variable)) {
 			int disposition;
 

Modified: tags/12.1.0-rc2/main/asterisk.c
URL: http://svnview.digium.com/svn/asterisk/tags/12.1.0-rc2/main/asterisk.c?view=diff&rev=409153&r1=409152&r2=409153
==============================================================================
--- tags/12.1.0-rc2/main/asterisk.c (original)
+++ tags/12.1.0-rc2/main/asterisk.c Thu Feb 27 16:15:11 2014
@@ -4427,6 +4427,36 @@
 		exit(1);
 	}
 
+	if (ast_features_init()) {
+		printf("%s", term_quit());
+		exit(1);
+	}
+
+	if (ast_pickup_init()) {
+		printf("%s", term_quit());
+		exit(1);
+	}
+
+	if (ast_bridging_init()) {
+		printf("%s", term_quit());
+		exit(1);
+	}
+
+	if (ast_parking_stasis_init()) {
+		printf("%s", term_quit());
+		exit(1);
+	}
+
+	if (ast_device_state_engine_init()) {
+		printf("%s", term_quit());
+		exit(1);
+	}
+
+	if (ast_presence_state_engine_init()) {
+		printf("%s", term_quit());
+		exit(1);
+	}
+
 	if ((moduleresult = load_modules(1))) {		/* Load modules, pre-load only */
 		printf("%s", term_quit());
 		exit(moduleresult == -2 ? 2 : 1);
@@ -4454,37 +4484,7 @@
 		exit(1);
 	}
 
-	if (ast_features_init()) {
-		printf("%s", term_quit());
-		exit(1);
-	}
-
-	if (ast_pickup_init()) {
-		printf("%s", term_quit());
-		exit(1);
-	}
-
-	if (ast_bridging_init()) {
-		printf("%s", term_quit());
-		exit(1);
-	}
-
-	if (ast_parking_stasis_init()) {
-		printf("%s", term_quit());
-		exit(1);
-	}
-
 	if (ast_cdr_engine_init()) {
-		printf("%s", term_quit());
-		exit(1);
-	}
-
-	if (ast_device_state_engine_init()) {
-		printf("%s", term_quit());
-		exit(1);
-	}
-
-	if (ast_presence_state_engine_init()) {
 		printf("%s", term_quit());
 		exit(1);
 	}

Modified: tags/12.1.0-rc2/main/security_events.c
URL: http://svnview.digium.com/svn/asterisk/tags/12.1.0-rc2/main/security_events.c?view=diff&rev=409153&r1=409152&r2=409153
==============================================================================
--- tags/12.1.0-rc2/main/security_events.c (original)
+++ tags/12.1.0-rc2/main/security_events.c Thu Feb 27 16:15:11 2014
@@ -65,13 +65,13 @@
 					<para>The remote address of the entity that caused the
 					security event to be raised.</para>
 				</parameter>
-				<parameter name="Module" required="False">
+				<parameter name="Module" required="false">
 					<para>If available, the name of the module that raised the event.</para>
 				</parameter>
-				<parameter name="ACLName" required="False">
+				<parameter name="ACLName" required="false">
 					<para>If available, the name of the ACL that failed.</para>
 				</parameter>
-				<parameter name="SessionTV" required="False">
+				<parameter name="SessionTV" required="false">
 					<para>The timestamp reported by the session.</para>
 				</parameter>
 			</syntax>
@@ -180,7 +180,7 @@
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='RequestNotSupported']/managerEventInstance/syntax/parameter[@name='RequestType'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='FailedACL']/managerEventInstance/syntax/parameter[@name='Module'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='FailedACL']/managerEventInstance/syntax/parameter[@name='SessionTV'])" />
-				<parameter name="RequestParams" required="False">
+				<parameter name="RequestParams" required="false">
 					<para>Parameters provided to the rejected request.</para>
 				</parameter>
 			</syntax>
@@ -221,7 +221,7 @@
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='RequestNotSupported']/managerEventInstance/syntax/parameter[@name='RequestType'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='FailedACL']/managerEventInstance/syntax/parameter[@name='Module'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='FailedACL']/managerEventInstance/syntax/parameter[@name='SessionTV'])" />
-				<parameter name="AccountID" required="False">
+				<parameter name="AccountID" required="false">
 					<para>The account ID associated with the rejected request.</para>
 				</parameter>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='RequestNotAllowed']/managerEventInstance/syntax/parameter[@name='RequestParams'])" />
@@ -308,13 +308,13 @@
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='FailedACL']/managerEventInstance/syntax/parameter[@name='RemoteAddress'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='FailedACL']/managerEventInstance/syntax/parameter[@name='Module'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='FailedACL']/managerEventInstance/syntax/parameter[@name='SessionTV'])" />
-				<parameter name="Challenge" required="False">
+				<parameter name="Challenge" required="false">
 					<para>The challenge that was sent.</para>
 				</parameter>
-				<parameter name="ReceivedChallenge" required="False">
+				<parameter name="ReceivedChallenge" required="false">
 					<para>The challenge that was received.</para>
 				</parameter>
-				<parameter name="RecievedHash" required="False">
+				<parameter name="RecievedHash" required="false">
 					<para>The hash that was received.</para>
 				</parameter>
 			</syntax>
@@ -390,7 +390,9 @@
 	const char *ie_type_key = ast_event_get_ie_type_name(ie_type);
 	struct ast_json *json_string = ast_json_object_get(json, ie_type_key);
 
-	ast_assert(json_string != NULL);
+	if (!json_string) {
+		return 0;
+	}
 
 	if (ast_str_append(str, 0, "%s: %s\r\n", ie_type_key, S_OR(ast_json_string_get(json_string), "")) == -1) {
 		return -1;

Modified: tags/12.1.0-rc2/res/ari/resource_channels.c
URL: http://svnview.digium.com/svn/asterisk/tags/12.1.0-rc2/res/ari/resource_channels.c?view=diff&rev=409153&r1=409152&r2=409153
==============================================================================
--- tags/12.1.0-rc2/res/ari/resource_channels.c (original)
+++ tags/12.1.0-rc2/res/ari/resource_channels.c Thu Feb 27 16:15:11 2014
@@ -687,37 +687,30 @@
 	ast_ari_response_ok(response, ast_json_ref(json));
 }
 
-static int ari_channels_set_channel_var(struct ast_channel *chan,
-	const char *variable, const char *value, struct ast_ari_response *response)
-{
-	if (pbx_builtin_setvar_helper(chan, variable, value)) {
-		ast_ari_response_error(
-			response, 400, "Bad Request",
-			"Unable to set channel variable %s=%s", variable, value);
-		return -1;
-	}
-
-	return 0;
-}
-
-static int ari_channels_set_channel_vars(struct ast_channel *chan,
-	struct ast_json *variables, struct ast_ari_response *response)
-{
-	struct ast_json_iter *i;
-
-	if (!variables) {
-		/* nothing to do */
-		return 0;
-	}
-
-	for (i = ast_json_object_iter(variables); i;
-	     i = ast_json_object_iter_next(variables, i)) {
-		if (ari_channels_set_channel_var(
-			chan, ast_json_object_iter_key(i),
-			ast_json_string_get(ast_json_object_iter_value(i)),
-			response)) {
-			/* response filled in by called function */
-			return -1;
+static int json_to_ast_variables(struct ast_json *json_variables, struct ast_variable **variables)
+{
+	struct ast_variable *current = NULL;
+	struct ast_json_iter *it_json_var;
+
+	for (it_json_var = ast_json_object_iter(json_variables); it_json_var;
+		 it_json_var = ast_json_object_iter_next(json_variables, it_json_var)) {
+		struct ast_variable *new_var;
+
+		new_var = ast_variable_new(ast_json_object_iter_key(it_json_var),
+		                           ast_json_string_get(ast_json_object_iter_value(it_json_var)),
+		                           "");
+		if (!new_var) {
+			ast_variables_destroy(*variables);
+			*variables = NULL;
+			return 1;
+		}
+
+		if (!current) {
+			*variables = new_var;
+			current = *variables;
+		} else {
+			current->next = new_var;
+			current = new_var;
 		}
 	}
 
@@ -737,11 +730,10 @@
 	RAII_VAR(struct ast_format_cap *, cap,
 		ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_NOLOCK), ast_format_cap_destroy);
 	struct ast_format tmp_fmt;
-
+	RAII_VAR(struct ast_variable *, variables, NULL, ast_variables_destroy);
 	char *stuff;
 	struct ast_channel *chan;
 	RAII_VAR(struct ast_channel_snapshot *, snapshot, NULL, ao2_cleanup);
-	struct ast_json *variable_list = NULL;
 
 	if (!cap) {
 		ast_ari_response_alloc_failed(response);
@@ -751,8 +743,17 @@
 
 	/* Parse any query parameters out of the body parameter */
 	if (args->variables) {
+		struct ast_json *json_variables;
+
 		ast_ari_channels_originate_parse_body(args->variables, args);
-		variable_list = ast_json_object_get(args->variables, "variables");
+		json_variables = ast_json_object_get(args->variables, "variables");
+		if (json_variables) {
+			if (json_to_ast_variables(json_variables, &variables)) {
+				ast_log(AST_LOG_ERROR, "Unable to convert 'variables' in JSON body to channel variables\n");
+				ast_ari_response_alloc_failed(response);
+				return;
+			}
+		}
 	}
 
 	if (ast_strlen_zero(args->endpoint)) {
@@ -804,24 +805,19 @@
 		}
 
 		/* originate a channel, putting it into an application */
-		if (ast_pbx_outgoing_app(dialtech, cap, dialdevice, timeout, app, ast_str_buffer(appdata), NULL, 0, cid_num, cid_name, NULL, NULL, &chan)) {
+		if (ast_pbx_outgoing_app(dialtech, cap, dialdevice, timeout, app, ast_str_buffer(appdata), NULL, 0, cid_num, cid_name, variables, NULL, &chan)) {
 			ast_ari_response_alloc_failed(response);
 			return;
 		}
 	} else if (!ast_strlen_zero(args->extension)) {
 		/* originate a channel, sending it to an extension */
-		if (ast_pbx_outgoing_exten(dialtech, cap, dialdevice, timeout, S_OR(args->context, "default"), args->extension, args->priority ? args->priority : 1, NULL, 0, cid_num, cid_name, NULL, NULL, &chan, 0)) {
+		if (ast_pbx_outgoing_exten(dialtech, cap, dialdevice, timeout, S_OR(args->context, "default"), args->extension, args->priority ? args->priority : 1, NULL, 0, cid_num, cid_name, variables, NULL, &chan, 0)) {
 			ast_ari_response_alloc_failed(response);
 			return;
 		}
 	} else {
 		ast_ari_response_error(response, 400, "Bad Request",
 			"Application or extension must be specified");
-		return;
-	}
-
-	if (ari_channels_set_channel_vars(chan, variable_list, response)) {
-		/* response filled in by called function */
 		return;
 	}
 

Modified: tags/12.1.0-rc2/res/res_fax.c
URL: http://svnview.digium.com/svn/asterisk/tags/12.1.0-rc2/res/res_fax.c?view=diff&rev=409153&r1=409152&r2=409153
==============================================================================
--- tags/12.1.0-rc2/res/res_fax.c (original)
+++ tags/12.1.0-rc2/res/res_fax.c Thu Feb 27 16:15:11 2014
@@ -3952,6 +3952,13 @@
 		goto end;
 	}
 
+	if (options.minrate == 2400 && (options.modems & AST_FAX_MODEM_V27) && !(options.modems & (AST_FAX_MODEM_V34))) {
+		ast_fax_modem_to_str(options.modems, modems, sizeof(modems));
+		ast_log(LOG_WARNING, "'modems' setting '%s' is no longer accepted with 'minrate' setting %d\n", modems, options.minrate);
+		ast_log(LOG_WARNING, "'minrate' has been reset to 4800, please update res_fax.conf.\n");
+		options.minrate = 4800;
+	}
+
 	if (check_modem_rate(options.modems, options.minrate)) {
 		ast_fax_modem_to_str(options.modems, modems, sizeof(modems));
 		ast_log(LOG_ERROR, "'modems' setting '%s' is incompatible with 'minrate' setting %d\n", modems, options.minrate);

Modified: tags/12.1.0-rc2/res/res_rtp_asterisk.c
URL: http://svnview.digium.com/svn/asterisk/tags/12.1.0-rc2/res/res_rtp_asterisk.c?view=diff&rev=409153&r1=409152&r2=409153
==============================================================================
--- tags/12.1.0-rc2/res/res_rtp_asterisk.c (original)
+++ tags/12.1.0-rc2/res/res_rtp_asterisk.c Thu Feb 27 16:15:11 2014
@@ -679,7 +679,7 @@
 		return;
 	}
 
-	if (pj_ice_sess_add_cand(rtp->ice, comp_id, transport_id, type, local_pref, &foundation, addr, addr, rel_addr, addr_len, NULL) != PJ_SUCCESS) {
+	if (pj_ice_sess_add_cand(rtp->ice, comp_id, transport_id, type, local_pref, &foundation, addr, base_addr, rel_addr, addr_len, NULL) != PJ_SUCCESS) {
 		ao2_ref(candidate, -1);
 		return;
 	}
@@ -1684,15 +1684,19 @@
 	}
 
 	/* If configured to use a STUN server to get our external mapped address do so */
-	if (stunaddr.sin_addr.s_addr && ast_sockaddr_is_ipv4(addr)) {
+	if (stunaddr.sin_addr.s_addr && ast_sockaddr_is_ipv4(addr) && count) {
 		struct sockaddr_in answer;
 
-		if (!ast_stun_request(rtp->s, &stunaddr, NULL, &answer)) {
+		if (!ast_stun_request(component == AST_RTP_ICE_COMPONENT_RTCP ? rtp->rtcp->s : rtp->s, &stunaddr, NULL, &answer)) {
+			pj_sockaddr base;
 			pj_str_t mapped = pj_str(ast_strdupa(ast_inet_ntoa(answer.sin_addr)));
 
+			/* Use the first local host candidate as the base */
+			pj_sockaddr_cp(&base, &address[0]);
+
 			pj_sockaddr_init(pj_AF_INET(), &address[0], &mapped, ntohs(answer.sin_port));
 
-			ast_rtp_ice_add_cand(rtp, component, transport, PJ_ICE_CAND_TYPE_SRFLX, 65535, &address[0], &address[0],
+			ast_rtp_ice_add_cand(rtp, component, transport, PJ_ICE_CAND_TYPE_SRFLX, 65535, &address[0], &base,
 					     NULL, pj_sockaddr_get_len(&address[0]));
 		}
 	}




More information about the svn-commits mailing list