[svn-commits] dlee: branch dlee/amqp-cdr-cel r431095 - in /team/dlee/amqp-cdr-cel: ./ addon...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Jan 26 09:13:13 CST 2015


Author: dlee
Date: Mon Jan 26 09:13:08 2015
New Revision: 431095

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=431095
Log:
Merged revisions 430902-431092 from http://svn.asterisk.org/svn/asterisk/branches/13

Modified:
    team/dlee/amqp-cdr-cel/   (props changed)
    team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c
    team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c
    team/dlee/amqp-cdr-cel/apps/app_confbridge.c
    team/dlee/amqp-cdr-cel/apps/app_minivm.c
    team/dlee/amqp-cdr-cel/apps/app_voicemail.c
    team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c
    team/dlee/amqp-cdr-cel/channels/chan_iax2.c
    team/dlee/amqp-cdr-cel/channels/chan_misdn.c
    team/dlee/amqp-cdr-cel/channels/chan_sip.c
    team/dlee/amqp-cdr-cel/channels/chan_unistim.c
    team/dlee/amqp-cdr-cel/channels/sip/include/route.h
    team/dlee/amqp-cdr-cel/configure
    team/dlee/amqp-cdr-cel/configure.ac
    team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c
    team/dlee/amqp-cdr-cel/funcs/func_groupcount.c
    team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c
    team/dlee/amqp-cdr-cel/funcs/func_presencestate.c
    team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in
    team/dlee/amqp-cdr-cel/include/asterisk/bridge.h
    team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h
    team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h
    team/dlee/amqp-cdr-cel/include/asterisk/channel.h
    team/dlee/amqp-cdr-cel/include/asterisk/sem.h
    team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h
    team/dlee/amqp-cdr-cel/main/app.c
    team/dlee/amqp-cdr-cel/main/asterisk.c
    team/dlee/amqp-cdr-cel/main/bridge.c
    team/dlee/amqp-cdr-cel/main/bridge_channel.c
    team/dlee/amqp-cdr-cel/main/config.c
    team/dlee/amqp-cdr-cel/main/manager_bridges.c
    team/dlee/amqp-cdr-cel/main/rtp_engine.c
    team/dlee/amqp-cdr-cel/main/sem.c
    team/dlee/amqp-cdr-cel/res/parking/parking_applications.c
    team/dlee/amqp-cdr-cel/res/res_ari_channels.c
    team/dlee/amqp-cdr-cel/res/res_ari_endpoints.c
    team/dlee/amqp-cdr-cel/res/res_ari_events.c
    team/dlee/amqp-cdr-cel/res/res_fax.c
    team/dlee/amqp-cdr-cel/res/res_pjsip/pjsip_global_headers.c
    team/dlee/amqp-cdr-cel/res/res_pjsip_mwi.c
    team/dlee/amqp-cdr-cel/res/res_pjsip_outbound_registration.c
    team/dlee/amqp-cdr-cel/res/res_pjsip_pubsub.c
    team/dlee/amqp-cdr-cel/res/res_stasis.c
    team/dlee/amqp-cdr-cel/res/res_timing_kqueue.c
    team/dlee/amqp-cdr-cel/res/stasis/app.c
    team/dlee/amqp-cdr-cel/res/stasis/stasis_bridge.c
    team/dlee/amqp-cdr-cel/rest-api-templates/param_parsing.mustache

Propchange: team/dlee/amqp-cdr-cel/
------------------------------------------------------------------------------
--- branch-11-merged (original)
+++ branch-11-merged Mon Jan 26 09:13:08 2015
@@ -1,1 +1,1 @@
-/branches/11:1-429517,429539,429632,429783,429804,429825,429867,429893,429982,430009,430126,430415,430487,430506,430564,430589,430795,430798
+/branches/11:1-429517,429539,429632,429783,429804,429825,429867,429893,429982,430009,430126,430415,430487,430506,430564,430589,430795,430798,430920,430993,430996-430997,431049

Propchange: team/dlee/amqp-cdr-cel/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Jan 26 09:13:08 2015
@@ -1,1 +1,1 @@
-/branches/13:1-430898
+/branches/13:1-431094

Modified: team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c (original)
+++ team/dlee/amqp-cdr-cel/addons/ooh323c/src/ooh245.c Mon Jan 26 09:13:08 2015
@@ -1909,7 +1909,7 @@
                                      T_H245TransportAddress_unicastAddress)
    	{
       	 OOTRACEERR3("Error: Processing OpenLogicalChannelAck - media control "
-                  "channel addres type is not unicast (%s, %s)\n", 
+                  "channel address type is not unicast (%s, %s)\n", 
                    call->callType, call->callToken);
       	 return OO_FAILED;
    	}

Modified: team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c (original)
+++ team/dlee/amqp-cdr-cel/apps/app_alarmreceiver.c Mon Jan 26 09:13:08 2015
@@ -484,7 +484,7 @@
 }
 
 /*!
- * \brief Send a single tone burst for a specifed duration and frequency.
+ * \brief Send a single tone burst for a specified duration and frequency.
  * \since 11.0
  *
  * \param chan Asterisk Channel

Modified: team/dlee/amqp-cdr-cel/apps/app_confbridge.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/app_confbridge.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/apps/app_confbridge.c (original)
+++ team/dlee/amqp-cdr-cel/apps/app_confbridge.c Mon Jan 26 09:13:08 2015
@@ -557,29 +557,31 @@
 static void set_rec_filename(struct confbridge_conference *conference, struct ast_str **filename, int is_new)
 {
 	char *rec_file = conference->b_profile.rec_file;
+	char *ext;
 	time_t now;
-	char *ext;
-
-	if (ast_str_strlen(*filename) && ast_test_flag(&conference->b_profile, BRIDGE_OPT_RECORD_FILE_APPEND) && !is_new) {
-		    return;
+
+	if (ast_str_strlen(*filename)
+		&& ast_test_flag(&conference->b_profile, BRIDGE_OPT_RECORD_FILE_APPEND)
+		&& !is_new) {
+		return;
 	}
 
 	time(&now);
 
 	ast_str_reset(*filename);
 	if (ast_strlen_zero(rec_file)) {
-		ast_str_set(filename, 0, "confbridge-%s-%u.wav", conference->name, (unsigned int)now);
+		ast_str_set(filename, 0, "confbridge-%s-%u.wav", conference->name,
+			(unsigned int) now);
 	} else {
 		/* insert time before file extension */
 		ext = strrchr(rec_file, '.');
 		if (ext) {
 			ast_str_set_substr(filename, 0, rec_file, ext - rec_file);
-			ast_str_append(filename, 0, "-%u%s", (unsigned int)now, ext);
+			ast_str_append(filename, 0, "-%u%s", (unsigned int) now, ext);
 		} else {
-			ast_str_set(filename, 0, "%s-%u", rec_file, (unsigned int)now);
-		}
-	}
-
+			ast_str_set(filename, 0, "%s-%u", rec_file, (unsigned int) now);
+		}
+	}
 	if (ast_test_flag(&conference->b_profile, BRIDGE_OPT_RECORD_FILE_APPEND)) {
 		ast_str_append(filename, 0, ",a");
 	}

Modified: team/dlee/amqp-cdr-cel/apps/app_minivm.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/app_minivm.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/apps/app_minivm.c (original)
+++ team/dlee/amqp-cdr-cel/apps/app_minivm.c Mon Jan 26 09:13:08 2015
@@ -1366,7 +1366,7 @@
 	prep_email_sub_vars(ast, vmu, cidnum, cidname, dur, date, counter);
 
 	/* Find email address to use */
-	/* If there's a server e-mail adress in the account, user that, othterwise template */
+	/* If there's a server e-mail address in the account, use that, othterwise template */
 	fromemail = ast_strlen_zero(vmu->serveremail) ?  template->serveremail : vmu->serveremail;
 
 	/* Find name to user for server e-mail */

Modified: team/dlee/amqp-cdr-cel/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/app_voicemail.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/apps/app_voicemail.c (original)
+++ team/dlee/amqp-cdr-cel/apps/app_voicemail.c Mon Jan 26 09:13:08 2015
@@ -1098,6 +1098,8 @@
 static int write_password_to_file(const char *secretfn, const char *password);
 static const char *substitute_escapes(const char *value);
 static int message_range_and_existence_check(struct vm_state *vms, const char *msg_ids [], size_t num_msgs, int *msg_nums, struct ast_vm_user *vmu);
+static void notify_new_state(struct ast_vm_user *vmu);
+
 /*!
  * Place a message in the indicated folder
  *
@@ -3741,7 +3743,7 @@
 
 /*!
  * \brief Retrieves a file from an ODBC data store.
- * \param dir the path to the file to be retreived.
+ * \param dir the path to the file to be retrieved.
  * \param msgnum the message number, such as within a mailbox folder.
  * 
  * This method is used by the RETRIEVE macro when mailboxes are stored in an ODBC back end.
@@ -6373,6 +6375,7 @@
 		}
 
 		STORE(dir, recipient->mailbox, recipient->context, msgnum, NULL, recipient, fmt, 0, vms, "", msg_id);
+		notify_new_state(recipient);
 	}
 
 	free_user(recipient);
@@ -8011,7 +8014,7 @@
  *   - attempt to determine the context and and mailbox, and then invoke leave_message() function to record and store the message.
  *
  * When in the forward message mode (is_new_message == 0):
- *   - retreives the current message to be forwarded
+ *   - retrieves the current message to be forwarded
  *   - copies the original message to a temporary file, so updates to the envelope can be done.
  *   - determines the target mailbox and folders
  *   - copies the message into the target mailbox, using copy_message() or by generating the message into an email attachment if using imap folders.

Modified: team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c (original)
+++ team/dlee/amqp-cdr-cel/apps/confbridge/conf_chan_record.c Mon Jan 26 09:13:08 2015
@@ -38,6 +38,8 @@
 
 /* ------------------------------------------------------------------- */
 
+static unsigned int name_sequence = 0;
+
 static int rec_call(struct ast_channel *chan, const char *addr, int timeout)
 {
 	/* Make sure anyone calling ast_call() for this channel driver is going to fail. */
@@ -59,6 +61,7 @@
 	struct ast_channel *chan;
 	const char *conf_name = data;
 	RAII_VAR(struct ast_format_cap *, capabilities, NULL, ao2_cleanup);
+	int generated_seqno = ast_atomic_fetchadd_int((int *) &name_sequence, +1);
 
 	capabilities = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
 	if (!capabilities) {
@@ -67,8 +70,8 @@
 	ast_format_cap_append_by_type(capabilities, AST_MEDIA_TYPE_UNKNOWN);
 
 	chan = ast_channel_alloc(1, AST_STATE_UP, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0,
-		"CBRec/conf-%s-uid-%d",
-		conf_name, (int) ast_random());
+		"CBRec/conf-%s-uid-%08x",
+		conf_name, (unsigned) generated_seqno);
 	if (!chan) {
 		return NULL;
 	}

Modified: team/dlee/amqp-cdr-cel/channels/chan_iax2.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/chan_iax2.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/channels/chan_iax2.c (original)
+++ team/dlee/amqp-cdr-cel/channels/chan_iax2.c Mon Jan 26 09:13:08 2015
@@ -4364,7 +4364,7 @@
 		if (var && !ast_sockaddr_isnull(addr)) {
 			for (tmp = var; tmp; tmp = tmp->next) {
 				if (!strcasecmp(tmp->name, "host")) {
-					struct ast_sockaddr *hostaddr;
+					struct ast_sockaddr *hostaddr = NULL;
 
 					if (!ast_sockaddr_resolve(&hostaddr, tmp->value, PARSE_PORT_FORBID, AST_AF_UNSPEC)
 						|| ast_sockaddr_cmp_addr(hostaddr, addr)) {
@@ -4372,6 +4372,7 @@
 						ast_variables_destroy(var);
 						var = NULL;
 					}
+					ast_free(hostaddr);
 					break;
 				}
 			}
@@ -4486,7 +4487,7 @@
 		if (var) {
 			for (tmp = var; tmp; tmp = tmp->next) {
 				if (!strcasecmp(tmp->name, "host")) {
-					struct ast_sockaddr *hostaddr;
+					struct ast_sockaddr *hostaddr = NULL;
 
 					if (!ast_sockaddr_resolve(&hostaddr, tmp->value, PARSE_PORT_FORBID, AST_AF_UNSPEC)
 						|| ast_sockaddr_cmp_addr(hostaddr, addr)) {
@@ -4494,6 +4495,7 @@
 						ast_variables_destroy(var);
 						var = NULL;
 					}
+					ast_free(hostaddr);
 					break;
 				}
 			}

Modified: team/dlee/amqp-cdr-cel/channels/chan_misdn.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/chan_misdn.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/channels/chan_misdn.c (original)
+++ team/dlee/amqp-cdr-cel/channels/chan_misdn.c Mon Jan 26 09:13:08 2015
@@ -9450,11 +9450,11 @@
 		break;
 #endif	/* We don't handle this yet */
 	case Fac_SubaddressTransfer:
-		/* We do not have anything to do for this message since we do not handle subaddreses. */
+		/* We do not have anything to do for this message since we do not handle subaddresses. */
 		break;
 	case Fac_RequestSubaddress:
 		/*
-		 * We do not have anything to do for this message since we do not handle subaddreses.
+		 * We do not have anything to do for this message since we do not handle subaddresses.
 		 * However, we do care about some other ie's that should be present.
 		 */
 		if (bc->redirecting.to_changed) {

Modified: team/dlee/amqp-cdr-cel/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/chan_sip.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/channels/chan_sip.c (original)
+++ team/dlee/amqp-cdr-cel/channels/chan_sip.c Mon Jan 26 09:13:08 2015
@@ -8808,7 +8808,7 @@
  * This function will update the destination of the response according to the
  * Via header in the request and RFC 3261 section 18.2.2. We do not have a
  * transport layer so we ignore certain values like the 'received' param (we
- * set the destination address to the addres the request came from in the
+ * set the destination address to the address the request came from in the
  * respprep() function).
  *
  * \retval -1 error
@@ -30578,7 +30578,7 @@
 				if (peer->callingpres == -1) {
 					peer->callingpres = atoi(v->value);
 				}
-			} else if (!strcasecmp(v->name, "username") || !strcmp(v->name, "defaultuser")) {	/* "username" is deprecated */
+			} else if (!strcasecmp(v->name, "username") || !strcasecmp(v->name, "defaultuser")) {	/* "username" is deprecated */
 				ast_string_field_set(peer, username, v->value);
 				if (!strcasecmp(v->name, "username")) {
 					if (deprecation_warning) {

Modified: team/dlee/amqp-cdr-cel/channels/chan_unistim.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/chan_unistim.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/channels/chan_unistim.c (original)
+++ team/dlee/amqp-cdr-cel/channels/chan_unistim.c Mon Jan 26 09:13:08 2015
@@ -468,7 +468,7 @@
 	int state;				      /*!< state of the phone (see phone_state) */
 	int size_buff_entry;	    /*!< size of the buffer used to enter datas */
 	char buff_entry[16];	    /*!< Buffer for temporary datas */
-	char macaddr[18];		       /*!< mac adress of the phone (not always available) */
+	char macaddr[18];		       /*!< mac address of the phone (not always available) */
 	char firmware[8];		       /*!< firmware of the phone (not always available) */
 	struct wsabuf wsabufsend[MAX_BUF_NUMBER];      /*!< Size of each paquet stored in the buffer array & pointer to this buffer */
 	unsigned char buf[MAX_BUF_NUMBER][MAX_BUF_SIZE];	/*!< Buffer array used to keep the lastest non-acked paquets */

Modified: team/dlee/amqp-cdr-cel/channels/sip/include/route.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/channels/sip/include/route.h?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/channels/sip/include/route.h (original)
+++ team/dlee/amqp-cdr-cel/channels/sip/include/route.h Mon Jan 26 09:13:08 2015
@@ -98,7 +98,7 @@
  * \retval NULL on failure
  */
 struct ast_str *sip_route_list(const struct sip_route *route, int formatcli, int skip)
-		__attribute_malloc__ __attribute_warn_unused_result__;
+	__attribute__((__malloc__)) __attribute__((__warn_unused_result__));
 
 /*!
  * \brief Check if the route is strict

Modified: team/dlee/amqp-cdr-cel/configure.ac
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/configure.ac?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/configure.ac (original)
+++ team/dlee/amqp-cdr-cel/configure.ac Mon Jan 26 09:13:08 2015
@@ -661,7 +661,25 @@
 AC_FUNC_STRTOD
 AC_FUNC_UTIME_NULL
 AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([asprintf atexit closefrom dup2 eaccess endpwent euidaccess ffsll ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday glob htonll ioperm inet_ntoa isascii memchr memmove memset mkdir mkdtemp munmap ntohll newlocale ppoll putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtod strtol strtold strtoq unsetenv utime vasprintf getpeereid sysctl swapctl])
+AC_CHECK_FUNCS([asprintf atexit closefrom dup2 eaccess endpwent euidaccess ffsll ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday glob ioperm inet_ntoa isascii memchr memmove memset mkdir mkdtemp munmap newlocale ppoll putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtod strtol strtold strtoq unsetenv utime vasprintf getpeereid sysctl swapctl])
+
+AC_MSG_CHECKING(for htonll)
+AC_LINK_IFELSE(
+	[AC_LANG_PROGRAM([#include <arpa/inet.h>],
+		[return htonll(0);])],
+	AC_MSG_RESULT(yes)
+	AC_DEFINE(HAVE_HTONLL, 1, [Define to 1 if arpa/inet.h includes a htonll definition.]),
+	AC_MSG_RESULT(no)
+)
+
+AC_MSG_CHECKING(for ntohll)
+AC_LINK_IFELSE(
+	[AC_LANG_PROGRAM([#include <arpa/inet.h>],
+		[return ntohll(0);])],
+	AC_MSG_RESULT(yes)
+	AC_DEFINE(HAVE_NTOHLL, 1, [Define to 1 if arpa/inet.h includes a ntohll definition.]),
+	AC_MSG_RESULT(no)
+)
 
 # NOTE: we use AC_CHECK_LIB to get -lm into the arguments for later checks,
 # so that AC_CHECK_FUNCS can detect functions in that library.
@@ -2435,10 +2453,9 @@
 PBX_LAUNCHD=0
 if test "${cross_compiling}" = "no";
 then
-  AC_CHECK_FILE(/sbin/launchd, AC_DEFINE([HAVE_SBIN_LAUNCHD], 1, [Define to 1 if your system has /sbin/launchd.]))
-  if test "${HAVE_SBIN_LAUNCHD}" = 1; then
-    PBX_LAUNCHD=1
-  fi
+  AC_CHECK_FILE(/sbin/launchd,
+    [PBX_LAUNCHD=1]
+    AC_DEFINE([HAVE_SBIN_LAUNCHD], 1, [Define to 1 if your system has /sbin/launchd.]))
 fi
 AC_SUBST(PBX_LAUNCHD)
 

Modified: team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c (original)
+++ team/dlee/amqp-cdr-cel/contrib/utils/eagi_proxy.c Mon Jan 26 09:13:08 2015
@@ -223,7 +223,7 @@
 	struct sockaddr_in host;
 	
 
-	/* get adress */	
+	/* get address */	
 	if(!strcmp(name,"localhost"))
 		address=htonl(2130706433); /*127.0.0.1*/
 	else

Modified: team/dlee/amqp-cdr-cel/funcs/func_groupcount.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/funcs/func_groupcount.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/funcs/func_groupcount.c (original)
+++ team/dlee/amqp-cdr-cel/funcs/func_groupcount.c Mon Jan 26 09:13:08 2015
@@ -50,7 +50,7 @@
 		</syntax>
 		<description>
 			<para>Calculates the group count for the specified group, or uses the
-			channel's current group if not specifed (and non-empty).</para>
+			channel's current group if not specified (and non-empty).</para>
 		</description>
 	</function>
 	<function name="GROUP_MATCH_COUNT" language="en_US">

Modified: team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c (original)
+++ team/dlee/amqp-cdr-cel/funcs/func_hangupcause.c Mon Jan 26 09:13:08 2015
@@ -48,7 +48,7 @@
 		</synopsis>
 		<syntax>
 			<parameter name="channel" required="true">
-				<para>The name of the channel for which to retreive cause information.</para>
+				<para>The name of the channel for which to retrieve cause information.</para>
 			</parameter>
 			<parameter name="type" required="true">
 				<para>Parameter describing which type of information is requested. Types are:</para>

Modified: team/dlee/amqp-cdr-cel/funcs/func_presencestate.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/funcs/func_presencestate.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/funcs/func_presencestate.c (original)
+++ team/dlee/amqp-cdr-cel/funcs/func_presencestate.c Mon Jan 26 09:13:08 2015
@@ -41,7 +41,7 @@
 #include "asterisk/app.h"
 #ifdef TEST_FRAMEWORK
 #include "asterisk/test.h"
-#include <semaphore.h>
+#include "asterisk/sem.h"
 #endif
 
 /*** DOCUMENTATION
@@ -664,7 +664,7 @@
 struct test_cb_data {
 	struct ast_presence_state_message *presence_state;
 	/* That's right. I'm using a semaphore */
-	sem_t sem;
+	struct ast_sem sem;
 };
 
 static struct test_cb_data *test_cb_data_alloc(void)
@@ -675,7 +675,7 @@
 		return NULL;
 	}
 
-	if (sem_init(&cb_data->sem, 0, 0)) {
+	if (ast_sem_init(&cb_data->sem, 0, 0)) {
 		ast_free(cb_data);
 		return NULL;
 	}
@@ -686,7 +686,7 @@
 static void test_cb_data_destroy(struct test_cb_data *cb_data)
 {
 	ao2_cleanup(cb_data->presence_state);
-	sem_destroy(&cb_data->sem);
+	ast_sem_destroy(&cb_data->sem);
 	ast_free(cb_data);
 }
 
@@ -699,7 +699,7 @@
 	cb_data->presence_state = stasis_message_data(msg);
 	ao2_ref(cb_data->presence_state, +1);
 
-	sem_post(&cb_data->sem);
+	ast_sem_post(&cb_data->sem);
 }
 
 static enum ast_test_result_state presence_change_common(struct ast_test *test,
@@ -727,7 +727,7 @@
 		return AST_TEST_FAIL;
 	}
 
-	sem_wait(&cb_data->sem);
+	ast_sem_wait(&cb_data->sem);
 
 	ast_copy_string(out_state, ast_presence_state2str(cb_data->presence_state->state), out_state_size);
 	ast_copy_string(out_subtype, cb_data->presence_state->subtype, out_subtype_size);

Modified: team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in (original)
+++ team/dlee/amqp-cdr-cel/include/asterisk/autoconfig.h.in Mon Jan 26 09:13:08 2015
@@ -324,7 +324,7 @@
 /* Define to 1 if you have the Hoard Memory Allocator library. */
 #undef HAVE_HOARD
 
-/* Define to 1 if you have the `htonll' function. */
+/* Define to 1 if arpa/inet.h includes a htonll definition. */
 #undef HAVE_HTONLL
 
 /* Define to 1 if you have the iCal library. */
@@ -524,7 +524,7 @@
 /* Define to 1 if you have the newt library. */
 #undef HAVE_NEWT
 
-/* Define to 1 if you have the `ntohll' function. */
+/* Define to 1 if arpa/inet.h includes a ntohll definition. */
 #undef HAVE_NTOHLL
 
 /* Define to 1 if your C library can safely print NULL to string formats. */

Modified: team/dlee/amqp-cdr-cel/include/asterisk/bridge.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/bridge.h?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/include/asterisk/bridge.h (original)
+++ team/dlee/amqp-cdr-cel/include/asterisk/bridge.h Mon Jan 26 09:13:08 2015
@@ -444,14 +444,18 @@
 };
 
 /*!
- * \brief Join (blocking) a channel to a bridge
+ * \brief Join a channel to a bridge (blocking)
  *
  * \param bridge Bridge to join
  * \param chan Channel to join
- * \param swap Channel to swap out if swapping
+ * \param swap Channel to swap out if swapping (A channel reference is stolen.)
  * \param features Bridge features structure
  * \param tech_args Optional Bridging tech optimization parameters for this channel.
  * \param flags defined by enum ast_bridge_join_flags.
+ *
+ * \note The passed in swap channel is always unreffed on return.  It is not a
+ * good idea to access the swap channel on return or for the caller to keep a
+ * reference to it.
  *
  * \note Absolutely _NO_ locks should be held before calling
  * this function since it blocks.
@@ -495,7 +499,7 @@
 };
 
 /*!
- * \brief Impart (non-blocking) a channel onto a bridge
+ * \brief Impart a channel to a bridge (non-blocking)
  *
  * \param bridge Bridge to impart on
  * \param chan Channel to impart (The channel reference is stolen if impart successful.)

Modified: team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h (original)
+++ team/dlee/amqp-cdr-cel/include/asterisk/bridge_channel_internal.h Mon Jan 26 09:13:08 2015
@@ -103,6 +103,9 @@
  *
  * \param bridge_channel Channel to push.
  *
+ * \note A ref is not held by bridge_channel->swap when calling because the
+ * push with swap happens immediately.
+ *
  * \note On entry, bridge_channel->bridge is already locked.
  *
  * \retval 0 on success.
@@ -128,16 +131,22 @@
 
 /*!
  * \internal
- * \brief Join the bridge_channel to the bridge
+ * \brief Join the bridge_channel to the bridge (blocking)
  *
  * \param bridge_channel The Channel in the bridge
+ *
+ * \note The bridge_channel->swap holds a channel reference for the swap
+ * channel going into the bridging system.  The ref ensures that the swap
+ * pointer is valid for the bridge subclass push callbacks.  The pointer
+ * will be NULL on return if the ref was consumed.
+ *
+ * \details
+ * This API call puts the bridge_channel into the bridge and handles the
+ * bridge_channel's processing of events while it is in the bridge.  It
+ * will return when the channel has been instructed to leave the bridge.
  *
  * \retval 0 bridge channel successfully joined the bridge
  * \retval -1 bridge channel failed to join the bridge
- *
- * \note This API call starts the bridge_channel's processing of events while
- * it is in the bridge. It will return when the channel has been instructed to
- * leave the bridge.
  */
 int bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel);
 

Modified: team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h (original)
+++ team/dlee/amqp-cdr-cel/include/asterisk/bridge_internal.h Mon Jan 26 09:13:08 2015
@@ -117,6 +117,9 @@
  * \param attempt_recovery TRUE if failure attempts to push channel back into original bridge.
  * \param optimized Indicates whether the move is part of an unreal channel optimization.
  *
+ * \note A ref is not held by bridge_channel->swap when calling because the
+ * move with swap happens immediately.
+ *
  * \note The dst_bridge and bridge_channel->bridge are assumed already locked.
  *
  * \retval 0 on success.

Modified: team/dlee/amqp-cdr-cel/include/asterisk/channel.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/channel.h?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/include/asterisk/channel.h (original)
+++ team/dlee/amqp-cdr-cel/include/asterisk/channel.h Mon Jan 26 09:13:08 2015
@@ -4186,13 +4186,13 @@
 
 /*!
  * \since 11
- * \brief Retreive a comma-separated list of channels for which dialed cause information is available
+ * \brief Retrieve a comma-separated list of channels for which dialed cause information is available
  *
  * \details
  * This function makes use of datastore operations on the channel, so
  * it is important to lock the channel before calling this function.
  *
- * \param chan The channel from which to retreive information
+ * \param chan The channel from which to retrieve information
  * \retval NULL on allocation failure
  * \retval Pointer to an ast_str object containing the desired information which must be freed
  */
@@ -4200,7 +4200,7 @@
 
 /*!
  * \since 11
- * \brief Retreive a ref-counted cause code information structure
+ * \brief Retrieve a ref-counted cause code information structure
  *
  * \details
  * This function makes use of datastore operations on the channel, so
@@ -4209,8 +4209,8 @@
  * calling function must decrease the reference count when it is finished
  * with the object.
  *
- * \param chan The channel from which to retreive information
- * \param chan_name The name of the channel about which to retreive information
+ * \param chan The channel from which to retrieve information
+ * \param chan_name The name of the channel about which to retrieve information
  * \retval NULL on search failure
  * \retval Pointer to a ref-counted ast_control_pvt_cause_code object containing the desired information
  */

Modified: team/dlee/amqp-cdr-cel/include/asterisk/sem.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/sem.h?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/include/asterisk/sem.h (original)
+++ team/dlee/amqp-cdr-cel/include/asterisk/sem.h Mon Jan 26 09:13:08 2015
@@ -57,6 +57,11 @@
 static force_inline int ast_sem_wait(struct ast_sem *sem)
 {
 	return sem_wait(&sem->real_sem);
+}
+
+static force_inline int ast_sem_timedwait(struct ast_sem *sem, const struct timespec *abs_timeout)
+{
+	return sem_timedwait(&sem->real_sem, abs_timeout);
 }
 
 static force_inline int ast_sem_getvalue(struct ast_sem *sem, int *sval)
@@ -137,6 +142,20 @@
 int ast_sem_wait(struct ast_sem *sem);
 
 /*!
+ * \brief Decrements the semaphore, waiting until abs_timeout.
+ *
+ * If the semaphore's current value is zero, this function blocks until another
+ * thread posts (ast_sem_post()) to the semaphore (or is interrupted by a signal
+ * handler, which sets errno to EINTR).
+ *
+ * \param sem Semaphore to decrement.
+ *
+ * \return 0 on success.
+ * \return -1 on error, errno set to indicate error.
+ */
+int ast_sem_timedwait(struct ast_sem *sem, const struct timespec *abs_timeout);
+
+/*!
  * \brief Gets the current value of the semaphore.
  *
  * If threads are blocked on this semaphore, POSIX allows the return value to be

Modified: team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h (original)
+++ team/dlee/amqp-cdr-cel/include/asterisk/stasis_app.h Mon Jan 26 09:13:08 2015
@@ -245,8 +245,7 @@
  * \param event_name Name of the Userevent.
  * \param source_uris URIs for the source objects to attach to event.
  * \param sources_count Array size of source_uris.
- * \param userevent_data Custom parameters for the user event
- * \param userevents_count Array size of userevent_data
+ * \param json_variables event blob variables.
  *
  * \return \ref stasis_app_user_event_res return code.
  */

Modified: team/dlee/amqp-cdr-cel/main/app.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/main/app.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/main/app.c (original)
+++ team/dlee/amqp-cdr-cel/main/app.c Mon Jan 26 09:13:08 2015
@@ -2911,7 +2911,9 @@
 		ast_replace_sigchld();
 	}
 
-	sigfillset(&signal_set);
+	/* GCC 4.9 gives a bogus "right-hand operand of comma expression has
+	 * no effect" warning */
+	(void) sigfillset(&signal_set);
 	pthread_sigmask(SIG_BLOCK, &signal_set, &old_set);
 
 	pid = fork();

Modified: team/dlee/amqp-cdr-cel/main/asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/main/asterisk.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/main/asterisk.c (original)
+++ team/dlee/amqp-cdr-cel/main/asterisk.c Mon Jan 26 09:13:08 2015
@@ -4366,12 +4366,14 @@
 	}
 
 	ast_makesocket();
-	sigemptyset(&sigs);
-	sigaddset(&sigs, SIGHUP);
-	sigaddset(&sigs, SIGTERM);
-	sigaddset(&sigs, SIGINT);
-	sigaddset(&sigs, SIGPIPE);
-	sigaddset(&sigs, SIGWINCH);
+	/* GCC 4.9 gives a bogus "right-hand operand of comma expression has
+	 * no effect" warning */
+	(void) sigemptyset(&sigs);
+	(void) sigaddset(&sigs, SIGHUP);
+	(void) sigaddset(&sigs, SIGTERM);
+	(void) sigaddset(&sigs, SIGINT);
+	(void) sigaddset(&sigs, SIGPIPE);
+	(void) sigaddset(&sigs, SIGWINCH);
 	pthread_sigmask(SIG_BLOCK, &sigs, NULL);
 	sigaction(SIGURG, &urg_handler, NULL);
 	signal(SIGINT, __quit_handler);

Modified: team/dlee/amqp-cdr-cel/main/bridge.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/main/bridge.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/main/bridge.c (original)
+++ team/dlee/amqp-cdr-cel/main/bridge.c Mon Jan 26 09:13:08 2015
@@ -1560,6 +1560,7 @@
 		ao2_ref(bridge, -1);
 	}
 	if (!bridge_channel) {
+		ao2_t_cleanup(swap, "Error exit: bridge_channel alloc failed");
 		res = -1;
 		goto join_exit;
 	}
@@ -1567,6 +1568,7 @@
 	ast_assert(features != NULL);
 	if (!features) {
 		ao2_ref(bridge_channel, -1);
+		ao2_t_cleanup(swap, "Error exit: features is NULL");
 		res = -1;
 		goto join_exit;
 	}
@@ -1596,6 +1598,8 @@
 	ast_channel_internal_bridge_channel_set(chan, NULL);
 	ast_channel_unlock(chan);
 	bridge_channel->chan = NULL;
+	/* If bridge_channel->swap is not NULL then the join failed. */
+	ao2_t_cleanup(bridge_channel->swap, "Bridge complete: join failed");
 	bridge_channel->swap = NULL;
 	bridge_channel->features = NULL;
 
@@ -1624,7 +1628,12 @@
 
 	bridge_channel_internal_join(bridge_channel);
 
-	/* cleanup */
+	/*
+	 * cleanup
+	 *
+	 * If bridge_channel->swap is not NULL then the join failed.
+	 */
+	ao2_t_cleanup(bridge_channel->swap, "Bridge complete: Departable impart join failed");
 	bridge_channel->swap = NULL;
 	ast_bridge_features_destroy(bridge_channel->features);
 	bridge_channel->features = NULL;
@@ -1653,6 +1662,8 @@
 	ast_channel_internal_bridge_channel_set(chan, NULL);
 	ast_channel_unlock(chan);
 	bridge_channel->chan = NULL;
+	/* If bridge_channel->swap is not NULL then the join failed. */
+	ao2_t_cleanup(bridge_channel->swap, "Bridge complete: Independent impart join failed");
 	bridge_channel->swap = NULL;
 	ast_bridge_features_destroy(bridge_channel->features);
 	bridge_channel->features = NULL;
@@ -1706,7 +1717,7 @@
 	}
 	ast_channel_unlock(chan);
 	bridge_channel->chan = chan;
-	bridge_channel->swap = swap;
+	bridge_channel->swap = ao2_t_bump(swap, "Setting up bridge impart");
 	bridge_channel->features = features;
 	bridge_channel->inhibit_colp = !!(flags & AST_BRIDGE_IMPART_INHIBIT_JOIN_COLP);
 	bridge_channel->depart_wait =
@@ -1730,6 +1741,7 @@
 		ast_channel_internal_bridge_channel_set(chan, NULL);
 		ast_channel_unlock(chan);
 		bridge_channel->chan = NULL;
+		ao2_t_cleanup(bridge_channel->swap, "Bridge complete: Impart failed");
 		bridge_channel->swap = NULL;
 		ast_bridge_features_destroy(bridge_channel->features);
 		bridge_channel->features = NULL;
@@ -2171,7 +2183,11 @@
 		/*
 		 * The channel died as a result of being pulled.  Leave it
 		 * pointing to the original bridge.
+		 *
+		 * Clear out the swap channel pointer.  A ref is not held
+		 * by bridge_channel->swap at this point.
 		 */
+		bridge_channel->swap = NULL;
 		bridge_reconfigured(orig_bridge, 0);
 		return -1;
 	}

Modified: team/dlee/amqp-cdr-cel/main/bridge_channel.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/amqp-cdr-cel/main/bridge_channel.c?view=diff&rev=431095&r1=431094&r2=431095
==============================================================================
--- team/dlee/amqp-cdr-cel/main/bridge_channel.c (original)
+++ team/dlee/amqp-cdr-cel/main/bridge_channel.c Mon Jan 26 09:13:08 2015
@@ -35,7 +35,6 @@
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 #include <signal.h>
-#include <semaphore.h>
 
 #include "asterisk/heap.h"
 #include "asterisk/astobj2.h"
@@ -56,6 +55,7 @@
 #include "asterisk/parking.h"
 #include "asterisk/causes.h"
 #include "asterisk/test.h"
+#include "asterisk/sem.h"
 
 /*!
  * \brief Used to queue an action frame onto a bridge channel and write an action frame into a bridge.
@@ -101,7 +101,7 @@
 	/*! Unique ID of this synchronization object. Corresponds with ID in synchronous frame payload */
 	unsigned int id;
 	/*! Semaphore used for synchronization */
-	sem_t sem;
+	struct ast_sem sem;
 	/*! Pointer to next entry in the list */
 	AST_LIST_ENTRY(bridge_sync) list;
 };
@@ -124,7 +124,7 @@
 {
 	memset(sync_struct, 0, sizeof(*sync_struct));
 	sync_struct->id = id;
-	sem_init(&sync_struct->sem, 0, 0);
+	ast_sem_init(&sync_struct->sem, 0, 0);
 
 	AST_RWLIST_WRLOCK(&sync_structs);
 	AST_RWLIST_INSERT_TAIL(&sync_structs, sync_struct, list);
@@ -157,7 +157,7 @@
 	AST_LIST_TRAVERSE_SAFE_END;
 	AST_RWLIST_UNLOCK(&sync_structs);
 
-	sem_destroy(&sync_struct->sem);
+	ast_sem_destroy(&sync_struct->sem);
 }
 
 /*!
@@ -189,7 +189,7 @@
 		.tv_nsec = timeout_val.tv_usec * 1000,
 	};
 
-	sem_timedwait(&sync_struct->sem, &timeout_spec);
+	ast_sem_timedwait(&sync_struct->sem, &timeout_spec);
 }
 
 /*!
@@ -204,7 +204,7 @@
  */
 static void bridge_sync_signal(struct bridge_sync *sync_struct)
 {
-	sem_post(&sync_struct->sem);
+	ast_sem_post(&sync_struct->sem);
 }
 
 void ast_bridge_channel_lock_bridge(struct ast_bridge_channel *bridge_channel)
@@ -2490,11 +2490,11 @@
 	ao2_iterator_destroy(&iter);
 }
 
-/*! \brief Join a channel to a bridge and handle anything the bridge may want us to do */
 int bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel)
 {
 	int res = 0;
 	struct ast_bridge_features *channel_features;
+	struct ast_channel *swap;
 
 	ast_debug(1, "Bridge %s: %p(%s) is joining\n",
 		bridge_channel->bridge->uniqueid,
@@ -2538,6 +2538,9 @@
 		bridge_channel->bridge->callid = ast_read_threadstorage_callid();
 	}
 
+	/* Take the swap channel ref from the bridge_channel struct. */
+	swap = bridge_channel->swap;
+
 	if (bridge_channel_internal_push(bridge_channel)) {
 		int cause = bridge_channel->bridge->cause;
 
@@ -2563,6 +2566,11 @@
 		}
 
 		ast_bridge_unlock(bridge_channel->bridge);
+
+		/* Must release any swap ref after unlocking the bridge. */
+		ao2_t_cleanup(swap, "Bridge push with swap successful");
+		swap = NULL;
+

[... 569 lines stripped ...]



More information about the svn-commits mailing list