[asterisk-commits] dlee: branch dlee/clean-shutdown r388837 - in /team/dlee/clean-shutdown: ./ a...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed May 15 10:41:01 CDT 2013


Author: dlee
Date: Wed May 15 10:40:59 2013
New Revision: 388837

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=388837
Log:
Merged revisions 388701-388818 from http://svn.asterisk.org/svn/asterisk/trunk

Added:
    team/dlee/clean-shutdown/include/asterisk/stasis_app_impl.h
      - copied unchanged from r388818, trunk/include/asterisk/stasis_app_impl.h
    team/dlee/clean-shutdown/res/res_stasis_answer.c
      - copied unchanged from r388818, trunk/res/res_stasis_answer.c
    team/dlee/clean-shutdown/res/stasis/   (props changed)
      - copied from r388818, trunk/res/stasis/
Modified:
    team/dlee/clean-shutdown/   (props changed)
    team/dlee/clean-shutdown/apps/app_stasis.c
    team/dlee/clean-shutdown/apps/app_voicemail.c
    team/dlee/clean-shutdown/configure
    team/dlee/clean-shutdown/configure.ac
    team/dlee/clean-shutdown/include/asterisk/astobj2.h
    team/dlee/clean-shutdown/include/asterisk/autoconfig.h.in
    team/dlee/clean-shutdown/include/asterisk/module.h
    team/dlee/clean-shutdown/include/asterisk/stasis.h
    team/dlee/clean-shutdown/include/asterisk/stasis_app.h
    team/dlee/clean-shutdown/main/app.c
    team/dlee/clean-shutdown/main/asterisk.c
    team/dlee/clean-shutdown/main/astobj2.c
    team/dlee/clean-shutdown/main/devicestate.c
    team/dlee/clean-shutdown/main/named_acl.c
    team/dlee/clean-shutdown/main/presencestate.c
    team/dlee/clean-shutdown/main/stasis.c
    team/dlee/clean-shutdown/main/stasis_cache.c
    team/dlee/clean-shutdown/main/stasis_endpoints.c
    team/dlee/clean-shutdown/main/test.c
    team/dlee/clean-shutdown/res/Makefile
    team/dlee/clean-shutdown/res/res_srtp.c
    team/dlee/clean-shutdown/res/res_stasis.c
    team/dlee/clean-shutdown/res/res_stasis_test.c

Propchange: team/dlee/clean-shutdown/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.

Propchange: team/dlee/clean-shutdown/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Wed May 15 10:40:59 2013
@@ -1,1 +1,1 @@
-/trunk:1-388689
+/trunk:1-388836

Modified: team/dlee/clean-shutdown/apps/app_stasis.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/apps/app_stasis.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/apps/app_stasis.c (original)
+++ team/dlee/clean-shutdown/apps/app_stasis.c Wed May 15 10:40:59 2013
@@ -35,7 +35,7 @@
 #include "asterisk/app.h"
 #include "asterisk/module.h"
 #include "asterisk/stasis.h"
-#include "asterisk/stasis_app.h"
+#include "asterisk/stasis_app_impl.h"
 
 /*** DOCUMENTATION
 	<application name="Stasis" language="en_US">

Modified: team/dlee/clean-shutdown/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/apps/app_voicemail.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/apps/app_voicemail.c (original)
+++ team/dlee/clean-shutdown/apps/app_voicemail.c Wed May 15 10:40:59 2013
@@ -15116,24 +15116,20 @@
 	mailbox_snapshot->folders = ARRAY_LEN(mailbox_folders);
 
 	for (i = 0; i < mailbox_snapshot->folders; i++) {
-		int combining_old = 0;
-		/* Assume we are combining folders if:
-		 *  - The current index is the old folder index OR
-		 *  - The current index is urgent and we were looking for INBOX or all folders OR
-		 *  - The current index is INBOX and we were looking for Urgent or all folders
+		int msg_folder_index = i;
+
+		/* We want this message in the snapshot if any of the following:
+		 *   No folder was specified.
+		 *   The specified folder matches the current folder.
+		 *   The specified folder is INBOX AND we were asked to combine messages AND the current folder is either Old or Urgent.
 		 */
-		if ((i == old_index ||
-			(i == urgent_index && (this_index_only == inbox_index || this_index_only == -1)) ||
-			(i == inbox_index && (this_index_only == urgent_index || this_index_only == -1))) && (combine_INBOX_and_OLD)) {
-			combining_old = 1;
-		}
-
-		/* This if statement is confusing looking.  Here is what it means in english.
-		 * - If a folder is given to the function and that folder's index is not the one we are iterating over, skip it...
-		 * - Unless the folder provided is the INBOX folder and the current index is the OLD folder and we are combining OLD and INBOX msgs.
-		 */
-		if ((this_index_only != -1) && (this_index_only != i) && !(combining_old && i == old_index && this_index_only == inbox_index)) {
+		if (!(this_index_only == -1 || this_index_only == i || (this_index_only == inbox_index && combine_INBOX_and_OLD && (i == old_index || i == urgent_index)))) {
 			continue;
+		}
+
+		/* Make sure that Old or Urgent messages are marked as being in INBOX. */
+		if (combine_INBOX_and_OLD && (i == old_index || i == urgent_index)) {
+			msg_folder_index = inbox_index;
 		}
 
 		memset(&vms, 0, sizeof(vms));
@@ -15150,7 +15146,7 @@
 
 		/* Iterate through each msg, storing off info */
 		if (vms.lastmsg != -1) {
-			if ((vm_msg_snapshot_create(vmu, &vms, mailbox_snapshot, combining_old ? inbox_index : i, i, descending, sort_val))) {
+			if ((vm_msg_snapshot_create(vmu, &vms, mailbox_snapshot, msg_folder_index, i, descending, sort_val))) {
 				ast_log(LOG_WARNING, "Failed to create msg snapshots for %s@%s\n", mailbox, context);
 				goto snapshot_cleanup;
 			}

Modified: team/dlee/clean-shutdown/configure.ac
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/configure.ac?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/configure.ac (original)
+++ team/dlee/clean-shutdown/configure.ac Wed May 15 10:40:59 2013
@@ -469,6 +469,7 @@
 AST_EXT_LIB_SETUP([SQLITE], [SQLite], [sqlite])
 AST_EXT_LIB_SETUP([SQLITE3], [SQLite], [sqlite3])
 AST_EXT_LIB_SETUP([SRTP], [Secure RTP], [srtp])
+AST_EXT_LIB_SETUP_OPTIONAL([SRTP_SHUTDOWN], [SRTP Library Shutdown Function], [SRTP], [srtp])
 AST_EXT_LIB_SETUP([OPENSSL], [OpenSSL Secure Sockets Layer], [ssl])
 AST_EXT_LIB_SETUP([SUPPSERV], [mISDN Supplemental Services], [suppserv])
 AST_EXT_LIB_SETUP([FREETDS], [FreeTDS], [tds])
@@ -2179,6 +2180,7 @@
     CFLAGS="${saved_cflags}"
 fi
 
+AST_EXT_LIB_CHECK([SRTP_SHUTDOWN], [srtp], [srtp_shutdown], [srtp/srtp.h])
 
 for ver in 2.0 2.2 2.4 2.6; do
 	AST_PKG_CONFIG_CHECK([GMIME], gmime-$ver)

Modified: team/dlee/clean-shutdown/include/asterisk/astobj2.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/include/asterisk/astobj2.h?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/include/asterisk/astobj2.h (original)
+++ team/dlee/clean-shutdown/include/asterisk/astobj2.h Wed May 15 10:40:59 2013
@@ -635,11 +635,20 @@
  *
  * \return Nothing
  */
+#ifdef REF_DEBUG
 #define ao2_t_global_obj_release(holder, tag)	\
 	__ao2_global_obj_release(&holder, (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 #define ao2_global_obj_release(holder)	\
 	__ao2_global_obj_release(&holder, "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 
+#else
+
+#define ao2_t_global_obj_release(holder, tag)	\
+	__ao2_global_obj_release(&holder, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#define ao2_global_obj_release(holder)	\
+	__ao2_global_obj_release(&holder, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#endif
+
 void __ao2_global_obj_release(struct ao2_global_obj *holder, const char *tag, const char *file, int line, const char *func, const char *name);
 
 /*!
@@ -657,11 +666,20 @@
  * \retval Reference to previous global ao2 object stored.
  * \retval NULL if no object available.
  */
+#ifdef REF_DEBUG
 #define ao2_t_global_obj_replace(holder, obj, tag)	\
 	__ao2_global_obj_replace(&holder, (obj), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 #define ao2_global_obj_replace(holder, obj)	\
 	__ao2_global_obj_replace(&holder, (obj), "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 
+#else
+
+#define ao2_t_global_obj_replace(holder, obj, tag)	\
+	__ao2_global_obj_replace(&holder, (obj), NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#define ao2_global_obj_replace(holder, obj)	\
+	__ao2_global_obj_replace(&holder, (obj), NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#endif
+
 void *__ao2_global_obj_replace(struct ao2_global_obj *holder, void *obj, const char *tag, const char *file, int line, const char *func, const char *name);
 
 /*!
@@ -680,10 +698,20 @@
  * \retval 0 The global object was previously empty
  * \retval 1 The global object was not previously empty
  */
+#ifdef REF_DEBUG
 #define ao2_t_global_obj_replace_unref(holder, obj, tag)	\
 	__ao2_global_obj_replace_unref(&holder, (obj), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 #define ao2_global_obj_replace_unref(holder, obj)	\
 	__ao2_global_obj_replace_unref(&holder, (obj), "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+
+#else
+
+#define ao2_t_global_obj_replace_unref(holder, obj, tag)	\
+	__ao2_global_obj_replace_unref(&holder, (obj), NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#define ao2_global_obj_replace_unref(holder, obj)	\
+	__ao2_global_obj_replace_unref(&holder, (obj), NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#endif
+
 int __ao2_global_obj_replace_unref(struct ao2_global_obj *holder, void *obj, const char *tag, const char *file, int line, const char *func, const char *name);
 
 /*!
@@ -696,10 +724,19 @@
  * \retval Reference to current ao2 object stored in the holder.
  * \retval NULL if no object available.
  */
+#ifdef REF_DEBUG
 #define ao2_t_global_obj_ref(holder, tag)	\
 	__ao2_global_obj_ref(&holder, (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 #define ao2_global_obj_ref(holder)	\
 	__ao2_global_obj_ref(&holder, "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+
+#else
+
+#define ao2_t_global_obj_ref(holder, tag)	\
+	__ao2_global_obj_ref(&holder, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#define ao2_global_obj_ref(holder)	\
+	__ao2_global_obj_ref(&holder, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#endif
 
 void *__ao2_global_obj_ref(struct ao2_global_obj *holder, const char *tag, const char *file, int line, const char *func, const char *name);
 

Modified: team/dlee/clean-shutdown/include/asterisk/autoconfig.h.in
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/include/asterisk/autoconfig.h.in?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/include/asterisk/autoconfig.h.in (original)
+++ team/dlee/clean-shutdown/include/asterisk/autoconfig.h.in Wed May 15 10:40:59 2013
@@ -294,7 +294,7 @@
 /* Define if your system has the GLOB_NOMAGIC headers. */
 #undef HAVE_GLOB_NOMAGIC
 
-/* Define to 1 if you have the GMime library. */
+/* Define if your system has the GMIME libraries. */
 #undef HAVE_GMIME
 
 /* Define to indicate the GSM library */
@@ -306,7 +306,7 @@
 /* Define to indicate that gsm.h has no prefix for its location */
 #undef HAVE_GSM_HEADER
 
-/* Define to 1 if you have the gtk2 library. */
+/* Define if your system has the GTK2 libraries. */
 #undef HAVE_GTK2
 
 /* Define to 1 if you have the Hoard Memory Allocator library. */
@@ -324,7 +324,7 @@
 /* Define to 1 if you have the Iksemel Jabber library. */
 #undef HAVE_IKSEMEL
 
-/* Define to 1 if you have the System iLBC library. */
+/* Define if your system has the ILBC libraries. */
 #undef HAVE_ILBC
 
 /* Define if your system has the UW IMAP Toolkit c-client library. */
@@ -376,7 +376,7 @@
 /* Define to 1 if you have the OpenLDAP library. */
 #undef HAVE_LDAP
 
-/* Define to 1 if you have the NetBSD Editline library library. */
+/* Define if your system has the LIBEDIT libraries. */
 #undef HAVE_LIBEDIT
 
 /* Define to 1 if you have the <libintl.h> header file. */
@@ -551,7 +551,7 @@
 /* Define to indicate presence of the pg_encoding_to_char API. */
 #undef HAVE_PGSQL_pg_encoding_to_char
 
-/* Define to 1 if you have the PJPROJECT library. */
+/* Define if your system has the PJPROJECT libraries. */
 #undef HAVE_PJPROJECT
 
 /* Define to 1 if your system defines IP_PKTINFO. */
@@ -765,6 +765,9 @@
 /* Define to 1 if you have the Secure RTP library. */
 #undef HAVE_SRTP
 
+/* Define to 1 if SRTP has the SRTP Library Shutdown Function feature. */
+#undef HAVE_SRTP_SHUTDOWN
+
 /* Define to 1 if you have the ISDN SS7 library. */
 #undef HAVE_SS7
 
@@ -854,19 +857,19 @@
 /* Define to 1 if you have the `strtoq' function. */
 #undef HAVE_STRTOQ
 
-/* Define to 1 if `ifr_ifru.ifru_hwaddr' is member of `struct ifreq'. */
+/* Define to 1 if `ifr_ifru.ifru_hwaddr' is a member of `struct ifreq'. */
 #undef HAVE_STRUCT_IFREQ_IFR_IFRU_IFRU_HWADDR
 
-/* Define to 1 if `uid' is member of `struct sockpeercred'. */
+/* Define to 1 if `uid' is a member of `struct sockpeercred'. */
 #undef HAVE_STRUCT_SOCKPEERCRED_UID
 
-/* Define to 1 if `st_blksize' is member of `struct stat'. */
+/* Define to 1 if `st_blksize' is a member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_BLKSIZE
 
-/* Define to 1 if `cr_uid' is member of `struct ucred'. */
+/* Define to 1 if `cr_uid' is a member of `struct ucred'. */
 #undef HAVE_STRUCT_UCRED_CR_UID
 
-/* Define to 1 if `uid' is member of `struct ucred'. */
+/* Define to 1 if `uid' is a member of `struct ucred'. */
 #undef HAVE_STRUCT_UCRED_UID
 
 /* Define to 1 if you have the mISDN Supplemental Services library. */
@@ -1144,11 +1147,11 @@
 /* Define to the one symbol short name of this package. */
 #undef PACKAGE_TARNAME
 
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
-
-/* Define to 1 if the C compiler supports function prototypes. */
-#undef PROTOTYPES
 
 /* Define to necessary symbol if this constant uses a non-standard name on
    your system. */
@@ -1168,11 +1171,6 @@
 
 /* Define to the type of arg 5 for `select'. */
 #undef SELECT_TYPE_ARG5
-
-/* Define to 1 if the `setvbuf' function takes the buffering type as its
-   second argument and the buffer pointer as the third, as on System V before
-   release 3. */
-#undef SETVBUF_REVERSED
 
 /* The size of `char *', as computed by sizeof. */
 #undef SIZEOF_CHAR_P
@@ -1209,23 +1207,38 @@
 /* Define to a type of the same size as fd_set.fds_bits[[0]] */
 #undef TYPEOF_FD_SET_FDS_BITS
 
-/* Define to 1 if on AIX 3.
-   System headers sometimes define this.
-   We just want to avoid a redefinition error message.  */
+/* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
 #endif
-
-/* Define to 1 if running on Darwin. */
-#undef _DARWIN_UNLIMITED_SELECT
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
 /* Enable GNU extensions on systems that have them.  */
 #ifndef _GNU_SOURCE
 # undef _GNU_SOURCE
 #endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if running on Darwin. */
+#undef _DARWIN_UNLIMITED_SELECT
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
 
 /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
 #undef _LARGEFILE_SOURCE
@@ -1242,20 +1255,6 @@
 
 /* Define to 1 if you need to in order for `stat' and other things to work. */
 #undef _POSIX_SOURCE
-
-/* Enable extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-
-/* Define like PROTOTYPES; this can be used by system headers. */
-#undef __PROTOTYPES
 
 /* Define to empty if `const' does not conform to ANSI C. */
 #undef const

Modified: team/dlee/clean-shutdown/include/asterisk/module.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/include/asterisk/module.h?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/include/asterisk/module.h (original)
+++ team/dlee/clean-shutdown/include/asterisk/module.h Wed May 15 10:40:59 2013
@@ -478,6 +478,9 @@
  */
 int ast_unregister_application(const char *app);
 
+/*! Macro to safely ref and unref the self module for the current scope */
+#define SCOPED_MODULE_USE(module) \
+	RAII_VAR(struct ast_module *, __self__ ## __LINE__, ast_module_ref(module), ast_module_unref)
 
 #if defined(__cplusplus) || defined(c_plusplus)
 }

Modified: team/dlee/clean-shutdown/include/asterisk/stasis.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/include/asterisk/stasis.h?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/include/asterisk/stasis.h (original)
+++ team/dlee/clean-shutdown/include/asterisk/stasis.h Wed May 15 10:40:59 2013
@@ -655,10 +655,17 @@
  */
 #define STASIS_MESSAGE_TYPE_INIT(name)					\
 	({								\
+		ast_assert(_priv_ ## name == NULL);			\
 		_priv_ ## name = stasis_message_type_create(#name);	\
 			_priv_ ## name ? 0 : -1;			\
 	})
 
+/*!
+ * \brief Boiler-plate removing macro for cleaning up message types.
+ *
+ * \param name Name of message type.
+ * \since 12
+ */
 #define STASIS_MESSAGE_TYPE_CLEANUP(name)	\
 	({					\
 		ao2_cleanup(_priv_ ## name);	\

Modified: team/dlee/clean-shutdown/include/asterisk/stasis_app.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/include/asterisk/stasis_app.h?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/include/asterisk/stasis_app.h (original)
+++ team/dlee/clean-shutdown/include/asterisk/stasis_app.h Wed May 15 10:40:59 2013
@@ -53,27 +53,6 @@
 #include "asterisk/channel.h"
 #include "asterisk/json.h"
 
-struct ast_channel_snapshot;
-
-/*! @{ */
-
-/*!
- * \brief Control a channel using \c stasis_app.
- *
- * This function blocks until the channel hangs up, or
- * stasis_app_control_continue() is called on the channel's \ref
- * stasis_app_control struct.
- *
- * \param chan Channel to control with Stasis.
- * \param app_name Application controlling the channel.
- * \param argc Number of arguments for the application.
- * \param argv Arguments for the application.
- */
-int stasis_app_exec(struct ast_channel *chan, const char *app_name, int argc,
-	char *argv[]);
-
-/*! @} */
-
 /*! @{ */
 
 /*!
@@ -87,7 +66,7 @@
  * \param message Message to handle. (borrowed copy)
  */
 typedef void (*stasis_app_cb)(void *data, const char *app_name,
-			      struct ast_json *message);
+	struct ast_json *message);
 
 /*!
  * \brief Register a new Stasis application.
@@ -148,6 +127,16 @@
 	const char *channel_id);
 
 /*!
+ * \brief Returns the uniqueid of the channel associated with this control
+ *
+ * \param control Control object.
+ * \return Uniqueid of the associate channel.
+ * \return \c NULL if \a control is \c NULL.
+ */
+const char *stasis_app_control_get_channel_id(
+	const struct stasis_app_control *control);
+
+/*!
  * \brief Exit \c res_stasis and continue execution in the dialplan.
  *
  * If the channel is no longer in \c res_stasis, this function does nothing.
@@ -160,20 +149,30 @@
  * \brief Answer the channel associated with this control.
  * \param control Control for \c res_stasis.
  * \return 0 for success.
- * \return -1 for error.
+ * \return Non-zero for error.
  */
 int stasis_app_control_answer(struct stasis_app_control *control);
 
-/*! @} */
-
-/*! @{ */
+/*!
+ * \brief Returns the most recent snapshot for the associated channel.
+ *
+ * The returned pointer is AO2 managed, so ao2_cleanup() when you're done.
+ *
+ * \param control Control for \c res_stasis.
+ * \return Most recent snapshot. ao2_cleanup() when done.
+ * \return \c NULL if channel isn't in cache.
+ */
+struct ast_channel_snapshot *stasis_app_control_get_snapshot(
+	const struct stasis_app_control *control);
 
 /*!
- * \brief Build a JSON object from a \ref ast_channel_snapshot.
- * \return JSON object representing channel snapshot.
- * \return \c NULL on error
+ * \brief Publish a message to the \a control's channel's topic.
+ *
+ * \param control Control to publish to
+ * \param message Message to publish
  */
-struct ast_json *ast_channel_snapshot_to_json(const struct ast_channel_snapshot *snapshot);
+void stasis_app_control_publish(
+	struct stasis_app_control *control, struct stasis_message *message);
 
 /*!
  * \brief Increment the res_stasis reference count.

Modified: team/dlee/clean-shutdown/main/app.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/app.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/app.c (original)
+++ team/dlee/clean-shutdown/main/app.c Wed May 15 10:40:59 2013
@@ -84,8 +84,9 @@
 
 static struct stasis_topic *mwi_topic_all;
 static struct stasis_caching_topic *mwi_topic_cached;
-static struct stasis_message_type *mwi_state_type;
 static struct stasis_topic_pool *mwi_topic_pool;
+
+STASIS_MESSAGE_TYPE_DEFN(stasis_mwi_state_type);
 
 static void *shaun_of_the_dead(void *data)
 {
@@ -2659,11 +2660,6 @@
 	return mwi_topic_cached;
 }
 
-struct stasis_message_type *stasis_mwi_state_type(void)
-{
-	return mwi_state_type;
-}
-
 struct stasis_topic *stasis_mwi_topic(const char *uniqueid)
 {
 	return stasis_topic_pool_get_topic(mwi_topic_pool, uniqueid);
@@ -2732,8 +2728,7 @@
 	ao2_cleanup(mwi_topic_all);
 	mwi_topic_all = NULL;
 	mwi_topic_cached = stasis_caching_unsubscribe_and_join(mwi_topic_cached);
-	ao2_cleanup(mwi_state_type);
-	mwi_state_type = NULL;
+	STASIS_MESSAGE_TYPE_CLEANUP(stasis_mwi_state_type);
 	ao2_cleanup(mwi_topic_pool);
 	mwi_topic_pool = NULL;
 }
@@ -2748,8 +2743,7 @@
 	if (!mwi_topic_cached) {
 		return -1;
 	}
-	mwi_state_type = stasis_message_type_create("stasis_mwi_state");
-	if (!mwi_state_type) {
+	if (STASIS_MESSAGE_TYPE_INIT(stasis_mwi_state_type) != 0) {
 		return -1;
 	}
 	mwi_topic_pool = stasis_topic_pool_create(mwi_topic_all);

Modified: team/dlee/clean-shutdown/main/asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/asterisk.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/asterisk.c (original)
+++ team/dlee/clean-shutdown/main/asterisk.c Wed May 15 10:40:59 2013
@@ -415,7 +415,7 @@
 static struct stasis_topic *system_topic;
 
 /*!\ brief The \ref stasis_message_type for network changes */
-static struct stasis_message_type *network_change_type;
+STASIS_MESSAGE_TYPE_DEFN(ast_network_change_type);
 
 #if !defined(LOW_MEMORY)
 struct file_version {
@@ -1063,18 +1063,12 @@
 	return system_topic;
 }
 
-struct stasis_message_type *ast_network_change_type(void)
-{
-	return network_change_type;
-}
-
 /*! \brief Cleanup the \ref stasis system level items */
 static void stasis_system_topic_cleanup(void)
 {
 	ao2_ref(system_topic, -1);
 	system_topic = NULL;
-	ao2_ref(network_change_type, -1);
-	network_change_type = NULL;
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_network_change_type);
 }
 
 /*! \brief Initialize the system level items for \ref stasis */
@@ -1087,8 +1081,7 @@
 		return 1;
 	}
 
-	network_change_type = stasis_message_type_create("network_change");
-	if (!network_change_type) {
+	if (STASIS_MESSAGE_TYPE_INIT(ast_network_change_type) != 0) {
 		return -1;
 	}
 	return 0;

Modified: team/dlee/clean-shutdown/main/astobj2.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/astobj2.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/astobj2.c (original)
+++ team/dlee/clean-shutdown/main/astobj2.c Wed May 15 10:40:59 2013
@@ -684,7 +684,11 @@
 
 	/* Release the held ao2 object. */
 	if (holder->obj) {
-		__ao2_ref_debug(holder->obj, -1, tag, file, line, func);
+		if (tag) {
+			__ao2_ref_debug(holder->obj, -1, tag, file, line, func);
+		} else {
+			__ao2_ref(holder->obj, -1);
+		}
 		holder->obj = NULL;
 	}
 
@@ -708,7 +712,11 @@
 	}
 
 	if (obj) {
-		__ao2_ref_debug(obj, +1, tag, file, line, func);
+		if (tag) {
+			__ao2_ref_debug(obj, +1, tag, file, line, func);
+		} else {
+			__ao2_ref(obj, +1);
+		}
 	}
 	obj_old = holder->obj;
 	holder->obj = obj;
@@ -724,7 +732,11 @@
 
 	obj_old = __ao2_global_obj_replace(holder, obj, tag, file, line, func, name);
 	if (obj_old) {
-		__ao2_ref_debug(obj_old, -1, tag, file, line, func);
+		if (tag) {
+			__ao2_ref_debug(obj_old, -1, tag, file, line, func);
+		} else {
+			__ao2_ref(obj_old, -1);
+		}
 		return 1;
 	}
 	return 0;
@@ -749,7 +761,11 @@
 
 	obj = holder->obj;
 	if (obj) {
-		__ao2_ref_debug(obj, +1, tag, file, line, func);
+		if (tag) {
+			__ao2_ref_debug(obj, +1, tag, file, line, func);
+		} else {
+			__ao2_ref(obj, +1);
+		}
 	}
 
 	__ast_rwlock_unlock(file, line, func, &holder->lock, name);

Modified: team/dlee/clean-shutdown/main/devicestate.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/devicestate.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/devicestate.c (original)
+++ team/dlee/clean-shutdown/main/devicestate.c Wed May 15 10:40:59 2013
@@ -197,8 +197,9 @@
 
 static struct stasis_topic *device_state_topic_all;
 static struct stasis_caching_topic *device_state_topic_cached;
-static struct stasis_message_type *device_state_message_type;
 static struct stasis_topic_pool *device_state_topic_pool;
+
+STASIS_MESSAGE_TYPE_DEFN(ast_device_state_message_type);
 
 /* Forward declarations */
 static int getproviderstate(const char *provider, const char *address);
@@ -723,11 +724,6 @@
 	return device_state_topic_cached;
 }
 
-struct stasis_message_type *ast_device_state_message_type(void)
-{
-	return device_state_message_type;
-}
-
 struct stasis_topic *ast_device_state_topic(const char *device)
 {
 	return stasis_topic_pool_get_topic(device_state_topic_pool, device);
@@ -781,8 +777,7 @@
 	ao2_cleanup(device_state_topic_all);
 	device_state_topic_all = NULL;
 	device_state_topic_cached = stasis_caching_unsubscribe_and_join(device_state_topic_cached);
-	ao2_cleanup(device_state_message_type);
-	device_state_message_type = NULL;
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_device_state_message_type);
 	ao2_cleanup(device_state_topic_pool);
 	device_state_topic_pool = NULL;
 }
@@ -797,8 +792,7 @@
 	if (!device_state_topic_cached) {
 		return -1;
 	}
-	device_state_message_type = stasis_message_type_create("ast_device_state_message");
-	if (!device_state_message_type) {
+	if (STASIS_MESSAGE_TYPE_INIT(ast_device_state_message_type) != 0) {
 		return -1;
 	}
 	device_state_topic_pool = stasis_topic_pool_create(ast_device_state_topic_all());

Modified: team/dlee/clean-shutdown/main/named_acl.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/named_acl.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/named_acl.c (original)
+++ team/dlee/clean-shutdown/main/named_acl.c Wed May 15 10:40:59 2013
@@ -360,7 +360,14 @@
 static struct stasis_topic *acl_topic;
 
 /*! \brief Message type for named ACL changes */
-static struct stasis_message_type *named_acl_change_type;
+STASIS_MESSAGE_TYPE_DEFN(ast_named_acl_change_type);
+
+static void acl_stasis_shutdown(void)
+{
+	ao2_cleanup(acl_topic);
+	acl_topic = NULL;
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_named_acl_change_type);
+}
 
 /*!
  * \internal
@@ -368,18 +375,14 @@
  */
 static void ast_acl_stasis_init(void)
 {
+	ast_register_atexit(acl_stasis_shutdown);
 	acl_topic = stasis_topic_create("ast_acl");
-	named_acl_change_type = stasis_message_type_create("ast_named_acl_change");
+	STASIS_MESSAGE_TYPE_INIT(ast_named_acl_change_type);
 }
 
 struct stasis_topic *ast_acl_topic(void)
 {
 	return acl_topic;
-}
-
-struct stasis_message_type *ast_named_acl_change_type(void)
-{
-	return named_acl_change_type;
 }
 
 /*!

Modified: team/dlee/clean-shutdown/main/presencestate.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/presencestate.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/presencestate.c (original)
+++ team/dlee/clean-shutdown/main/presencestate.c Wed May 15 10:40:59 2013
@@ -53,7 +53,7 @@
 	{ "dnd", AST_PRESENCE_DND},
 };
 
-struct stasis_message_type *presence_state_type;
+STASIS_MESSAGE_TYPE_DEFN(ast_presence_state_message_type);
 struct stasis_topic *presence_state_topic_all;
 struct stasis_caching_topic *presence_state_topic_cached;
 
@@ -289,11 +289,6 @@
 	return ast_presence_state_changed_literal(state, subtype, message, buf);
 }
 
-struct stasis_message_type *ast_presence_state_message_type(void)
-{
-	return presence_state_type;
-}
-
 struct stasis_topic *ast_presence_state_topic_all(void)
 {
 	return presence_state_topic_all;
@@ -321,14 +316,12 @@
 	presence_state_topic_all = NULL;
 	ao2_cleanup(presence_state_topic_cached);
 	presence_state_topic_cached = NULL;
-	ao2_cleanup(presence_state_type);
-	presence_state_type = NULL;
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_presence_state_message_type);
 }
 
 int ast_presence_state_engine_init(void)
 {
-	presence_state_type = stasis_message_type_create("ast_presence_state_message");
-	if (!presence_state_type) {
+	if (STASIS_MESSAGE_TYPE_INIT(ast_presence_state_message_type) != 0) {
 		return -1;
 	}
 

Modified: team/dlee/clean-shutdown/main/stasis.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/stasis.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/stasis.c (original)
+++ team/dlee/clean-shutdown/main/stasis.c Wed May 15 10:40:59 2013
@@ -47,7 +47,7 @@
 /*! Threadpool for dispatching notifications to subscribers */
 static struct ast_threadpool *pool;
 
-static struct stasis_message_type *__subscription_change_message_type;
+STASIS_MESSAGE_TYPE_DEFN(stasis_subscription_change_type);
 
 /*! \internal */
 struct stasis_topic {
@@ -509,11 +509,6 @@
 	return change;
 }
 
-struct stasis_message_type *stasis_subscription_change_type(void)
-{
-	return __subscription_change_message_type;
-}
-
 static void send_subscription_change_message(struct stasis_topic *topic, char *uniqueid, char *description)
 {
 	RAII_VAR(struct stasis_subscription_change *, change, NULL, ao2_cleanup);
@@ -627,10 +622,9 @@
 /*! \brief Cleanup function */
 static void stasis_exit(void)
 {
-	ao2_cleanup(__subscription_change_message_type);
-	__subscription_change_message_type = NULL;
 	ast_threadpool_shutdown(pool);
 	pool = NULL;
+	STASIS_MESSAGE_TYPE_CLEANUP(stasis_subscription_change_type);
 }
 
 int stasis_init(void)
@@ -664,8 +658,7 @@
 		return -1;
 	}
 
-	__subscription_change_message_type = stasis_message_type_create("stasis_subscription_change");
-	if (!__subscription_change_message_type) {
+	if (STASIS_MESSAGE_TYPE_INIT(stasis_subscription_change_type) != 0) {
 		return -1;
 	}
 

Modified: team/dlee/clean-shutdown/main/stasis_cache.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/stasis_cache.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/stasis_cache.c (original)
+++ team/dlee/clean-shutdown/main/stasis_cache.c Wed May 15 10:40:59 2013
@@ -259,21 +259,8 @@
 	return cache_dump.cached;
 }
 
-static struct stasis_message_type *cache_clear_type;
-
-struct stasis_message_type *stasis_cache_clear_type(void)
-{
-	ast_assert(cache_clear_type != NULL);
-	return cache_clear_type;
-}
-
-static struct stasis_message_type *cache_update_type;
-
-struct stasis_message_type *stasis_cache_update_type(void)
-{
-	ast_assert(cache_update_type != NULL);
-	return cache_update_type;
-}
+STASIS_MESSAGE_TYPE_DEFN(stasis_cache_clear_type);
+STASIS_MESSAGE_TYPE_DEFN(stasis_cache_update_type);
 
 static void cache_clear_dtor(void *obj)
 {
@@ -461,30 +448,22 @@
 
 static void stasis_cache_exit(void)
 {
-	ao2_cleanup(cache_clear_type);
-	cache_clear_type = NULL;
-	ao2_cleanup(cache_update_type);
-	cache_update_type = NULL;
+	STASIS_MESSAGE_TYPE_CLEANUP(stasis_cache_clear_type);
+	STASIS_MESSAGE_TYPE_CLEANUP(stasis_cache_update_type);
 }
 
 int stasis_cache_init(void)
 {
 	ast_register_atexit(stasis_cache_exit);
 
-	if (cache_clear_type || cache_update_type) {
-		ast_log(LOG_ERROR, "Stasis cache double initialized\n");
+	if (STASIS_MESSAGE_TYPE_INIT(stasis_cache_clear_type) != 0) {
 		return -1;
 	}
 
-	cache_update_type = stasis_message_type_create("stasis_cache_update");
-	if (!cache_update_type) {
+	if (STASIS_MESSAGE_TYPE_INIT(stasis_cache_update_type) != 0) {
 		return -1;
 	}
 
-	cache_clear_type = stasis_message_type_create("StasisCacheClear");
-	if (!cache_clear_type) {
-		return -1;
-	}
 	return 0;
 }
 

Modified: team/dlee/clean-shutdown/main/stasis_endpoints.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/stasis_endpoints.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/stasis_endpoints.c (original)
+++ team/dlee/clean-shutdown/main/stasis_endpoints.c Wed May 15 10:40:59 2013
@@ -35,16 +35,11 @@
 #include "asterisk/stasis.h"
 #include "asterisk/stasis_endpoints.h"
 
-static struct stasis_message_type *endpoint_snapshot_type;
+STASIS_MESSAGE_TYPE_DEFN(ast_endpoint_snapshot_type);
 
 static struct stasis_topic *endpoint_topic_all;
 
 static struct stasis_caching_topic *endpoint_topic_all_cached;
-
-struct stasis_message_type *ast_endpoint_snapshot_type(void)
-{
-	return endpoint_snapshot_type;
-}
 
 struct stasis_topic *ast_endpoint_topic_all(void)
 {
@@ -176,12 +171,7 @@
 		return -1;
 	}
 
-	if (!endpoint_snapshot_type) {
-		endpoint_snapshot_type = stasis_message_type_create(
-			"ast_endpoint_snapshot");
-	}
-
-	if (!endpoint_snapshot_type) {
+	if (STASIS_MESSAGE_TYPE_INIT(ast_endpoint_snapshot_type) != 0) {
 		return -1;
 	}
 

Modified: team/dlee/clean-shutdown/main/test.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/main/test.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/main/test.c (original)
+++ team/dlee/clean-shutdown/main/test.c Wed May 15 10:40:59 2013
@@ -57,7 +57,7 @@
 /*! \since 12
  * \brief The message type for test suite messages
  */
-static struct stasis_message_type *test_suite_type;
+STASIS_MESSAGE_TYPE_DEFN(ast_test_suite_message_type);
 
 /*! This array corresponds to the values defined in the ast_test_state enum */
 static const char * const test_result2str[] = {
@@ -927,11 +927,6 @@
 	return test_suite_topic;
 }
 
-struct stasis_message_type *ast_test_suite_message_type(void)
-{
-	return test_suite_type;
-}
-
 /*!
  * \since 12
  * \brief A wrapper object that can be ao2 ref counted around an \ref ast_json blob
@@ -1002,8 +997,7 @@
 {
 	ao2_cleanup(test_suite_topic);
 	test_suite_topic = NULL;
-	ao2_cleanup(test_suite_type);
-	test_suite_type = NULL;
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_test_suite_message_type);
 }
 
 #endif
@@ -1013,10 +1007,14 @@
 #ifdef TEST_FRAMEWORK
 	/* Create stasis topic */
 	test_suite_topic = stasis_topic_create("test_suite_topic");
-	test_suite_type = stasis_message_type_create("test_suite_type");
-	if (!test_suite_topic || !test_suite_type) {
+	if (!test_suite_topic) {
 		return -1;
 	}
+
+	if (STASIS_MESSAGE_TYPE_INIT(ast_test_suite_message_type) != 0) {
+		return -1;
+	}
+
 	/* Register cli commands */
 	ast_cli_register_multiple(test_cli, ARRAY_LEN(test_cli));
 	ast_register_atexit(test_cleanup);

Modified: team/dlee/clean-shutdown/res/Makefile
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/res/Makefile?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/res/Makefile (original)
+++ team/dlee/clean-shutdown/res/Makefile Wed May 15 10:40:59 2013
@@ -46,6 +46,9 @@
 $(if $(filter res_sip,$(EMBEDDED_MODS)),modules.link,res_sip.so): $(subst .c,.o,$(wildcard res_sip/*.c))
 $(subst .c,.o,$(wildcard res_sip/*.c)): _ASTCFLAGS+=$(call MOD_ASTCFLAGS,res_sip)
 
+$(if $(filter res_stasis,$(EMBEDDED_MODS)),modules.link,res_stasis.so): $(subst .c,.o,$(wildcard stasis/*.c))
+$(subst .c,.o,$(wildcard stasis/*.c)): _ASTCFLAGS+=$(call MOD_ASTCFLAGS,res_stasis)
+
 ifneq ($(findstring REBUILD_PARSERS,$(MENUSELECT_CFLAGS)),)
 ael/ael_lex.c: ael/ael.flex
 else
@@ -70,7 +73,8 @@
 ael/pval.o: ael/pval.c
 
 clean::
-	rm -f snmp/*.[oi] ael/*.[oi] ais/*.[oi] stasis_http/*.[oi] res_sip/*.[oi]
+	rm -f snmp/*.[oi] ael/*.[oi] ais/*.[oi] stasis_http/*.[oi]
+	rm -f res_sip/*.[oi] stasis/*.[oi]
 
 # Dependencies for res_stasis_http_*.so are generated, so they're in this file
 include stasis_http.make

Modified: team/dlee/clean-shutdown/res/res_srtp.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/res/res_srtp.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/res/res_srtp.c (original)
+++ team/dlee/clean-shutdown/res/res_srtp.c Wed May 15 10:40:59 2013
@@ -546,6 +546,9 @@
 {
 	srtp_install_event_handler(NULL);
 	ast_rtp_engine_unregister_srtp();
+#ifdef HAVE_SRTP_SHUTDOWN
+	srtp_shutdown();
+#endif
 	g_initialized = 0;
 }
 

Modified: team/dlee/clean-shutdown/res/res_stasis.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/clean-shutdown/res/res_stasis.c?view=diff&rev=388837&r1=388836&r2=388837
==============================================================================
--- team/dlee/clean-shutdown/res/res_stasis.c (original)
+++ team/dlee/clean-shutdown/res/res_stasis.c Wed May 15 10:40:59 2013
@@ -21,6 +21,30 @@
  * \brief Stasis application support.
  *
  * \author David M. Lee, II <dlee at digium.com>
+ *
+ * <code>res_stasis.so</code> brings together the various components of the
+ * Stasis application infrastructure.
+ *
+ * First, there's the Stasis application handler, stasis_app_exec(). This is
+ * called by <code>app_stasis.so</code> to give control of a channel to the
+ * Stasis application code from the dialplan.
+ *
+ * While a channel is in stasis_app_exec(), it has a \ref stasis_app_control
+ * object, which may be used to control the channel.
+ *
+ * To control the channel, commands may be sent to channel using
+ * stasis_app_send_command() and stasis_app_send_async_command().
+ *
+ * Alongside this, applications may be registered/unregistered using
+ * stasis_app_register()/stasis_app_unregister(). While a channel is in Stasis,
+ * events received on the channel's topic are converted to JSON and forwarded to

[... 1107 lines stripped ...]



More information about the asterisk-commits mailing list