[asterisk-commits] eliel: branch eliel/data_api_providers_gsoc2010 r266284 - in /team/eliel/data...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri May 28 08:16:16 CDT 2010


Author: eliel
Date: Fri May 28 08:16:14 2010
New Revision: 266284

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=266284
Log:
Add the cdr description to the channel data structure.
Add channel flags to the data structure.
Fix boolean problem while being defined as 1 bit.
Add descriptions to the channel values xxxxx2str().

Modified:
    team/eliel/data_api_providers_gsoc2010/apps/app_meetme.c
    team/eliel/data_api_providers_gsoc2010/apps/app_queue.c
    team/eliel/data_api_providers_gsoc2010/include/asterisk/cdr.h
    team/eliel/data_api_providers_gsoc2010/include/asterisk/channel.h
    team/eliel/data_api_providers_gsoc2010/main/cdr.c
    team/eliel/data_api_providers_gsoc2010/main/channel.c
    team/eliel/data_api_providers_gsoc2010/main/data.c

Modified: team/eliel/data_api_providers_gsoc2010/apps/app_meetme.c
URL: http://svnview.digium.com/svn/asterisk/team/eliel/data_api_providers_gsoc2010/apps/app_meetme.c?view=diff&rev=266284&r1=266283&r2=266284
==============================================================================
--- team/eliel/data_api_providers_gsoc2010/apps/app_meetme.c (original)
+++ team/eliel/data_api_providers_gsoc2010/apps/app_meetme.c Fri May 28 08:16:14 2010
@@ -6767,7 +6767,7 @@
 					continue;
 				}
 
-				ast_channel_data_add_structure(data_meetme_user_channel, user->chan);
+				ast_channel_data_add_structure(data_meetme_user_channel, user->chan, 1);
 
 				/* volume structure */
 				data_meetme_user_volume = ast_data_add_node(data_meetme_user, "listen-volume");

Modified: team/eliel/data_api_providers_gsoc2010/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/eliel/data_api_providers_gsoc2010/apps/app_queue.c?view=diff&rev=266284&r1=266283&r2=266284
==============================================================================
--- team/eliel/data_api_providers_gsoc2010/apps/app_queue.c (original)
+++ team/eliel/data_api_providers_gsoc2010/apps/app_queue.c Fri May 28 08:16:14 2010
@@ -7875,7 +7875,7 @@
 				continue;
 			}
 
-			ast_channel_data_add_structure(data_caller_channel, qe->chan);
+			ast_channel_data_add_structure(data_caller_channel, qe->chan, 1);
 		}
 	}
 

Modified: team/eliel/data_api_providers_gsoc2010/include/asterisk/cdr.h
URL: http://svnview.digium.com/svn/asterisk/team/eliel/data_api_providers_gsoc2010/include/asterisk/cdr.h?view=diff&rev=266284&r1=266283&r2=266284
==============================================================================
--- team/eliel/data_api_providers_gsoc2010/include/asterisk/cdr.h (original)
+++ team/eliel/data_api_providers_gsoc2010/include/asterisk/cdr.h Fri May 28 08:16:14 2010
@@ -27,6 +27,8 @@
 #define _ASTERISK_CDR_H
 
 #include <sys/time.h>
+
+#include "asterisk/data.h"
 
 /*!
  * \brief CDR Flags
@@ -435,4 +437,14 @@
 /*! Submit any remaining CDRs and prepare for shutdown */
 void ast_cdr_engine_term(void);
 
+/*!
+ * \brief
+ * \param[in] tree Where to insert the cdr.
+ * \param[in] cdr The cdr structure to insert in 'tree'.
+ * \param[in] recur Go throw all the cdr levels.
+ * \retval <0 on error.
+ * \retval 0 on success.
+ */
+int ast_cdr_data_add_structure(struct ast_data *tree, struct ast_cdr *cdr, int recur);
+
 #endif /* _ASTERISK_CDR_H */

Modified: team/eliel/data_api_providers_gsoc2010/include/asterisk/channel.h
URL: http://svnview.digium.com/svn/asterisk/team/eliel/data_api_providers_gsoc2010/include/asterisk/channel.h?view=diff&rev=266284&r1=266283&r2=266284
==============================================================================
--- team/eliel/data_api_providers_gsoc2010/include/asterisk/channel.h (original)
+++ team/eliel/data_api_providers_gsoc2010/include/asterisk/channel.h Fri May 28 08:16:14 2010
@@ -2793,10 +2793,11 @@
  * \brief Insert into an astdata tree, the channel structure.
  * \param[in] tree The ast data tree.
  * \param[in] chan The channel structure to add to tree.
+ * \param[in] add_bridged Add the bridged channel to the structure.
  * \retval <0 on error.
  * \retval 0 on success.
  */
-int ast_channel_data_add_structure(struct ast_data *tree, struct ast_channel *chan);
+int ast_channel_data_add_structure(struct ast_data *tree, struct ast_channel *chan, int add_bridged);
 
 /*!
  * \brief Compare to channel structures using the data api.

Modified: team/eliel/data_api_providers_gsoc2010/main/cdr.c
URL: http://svnview.digium.com/svn/asterisk/team/eliel/data_api_providers_gsoc2010/main/cdr.c?view=diff&rev=266284&r1=266283&r2=266284
==============================================================================
--- team/eliel/data_api_providers_gsoc2010/main/cdr.c (original)
+++ team/eliel/data_api_providers_gsoc2010/main/cdr.c Fri May 28 08:16:14 2010
@@ -49,6 +49,7 @@
 #include "asterisk/config.h"
 #include "asterisk/cli.h"
 #include "asterisk/stringfields.h"
+#include "asterisk/data.h"
 
 /*! Default AMA flag for billing records (CDR's) */
 int ast_default_amaflags = AST_CDR_DOCUMENTATION;
@@ -1635,3 +1636,50 @@
 	return do_reload(1);
 }
 
+int ast_cdr_data_add_structure(struct ast_data *tree, struct ast_cdr *cdr, int recur)
+{
+	struct ast_cdr *tmpcdr;
+	struct ast_data *level;
+	struct ast_var_t *variables;
+	const char *var, *val;
+	int x = 1, i;
+	char workspace[256];
+	char *tmp;
+
+	if (!cdr) {
+		return -1;
+	}
+
+	for (tmpcdr = cdr; tmpcdr; tmpcdr = (recur ? tmpcdr->next : NULL)) {
+		level = ast_data_add_node(tree, "level");
+		if (!level) {
+			continue;
+		}
+
+		ast_data_add_int(level, "level_number", x);
+
+		AST_LIST_TRAVERSE(&tmpcdr->varshead, variables, entries) {
+			if (variables && (var = ast_var_name(variables)) &&
+					(val = ast_var_value(variables)) && !ast_strlen_zero(var)
+					&& !ast_strlen_zero(val)) {
+				ast_data_add_str(level, var, val);
+			} else {
+				break;
+			}
+		}
+
+		for (i = 0; cdr_readonly_vars[i]; i++) {
+			workspace[0] = 0; /* null out the workspace, because the cdr_get_tv() won't write anything if time is NULL, so you get old vals */
+			ast_cdr_getvar(tmpcdr, cdr_readonly_vars[i], &tmp, workspace, sizeof(workspace), 0, 0);
+			if (!tmp) {
+				continue;
+			}
+			ast_data_add_str(level, cdr_readonly_vars[i], tmp);
+		}
+
+		x++;
+	}
+
+	return 0;
+}
+

Modified: team/eliel/data_api_providers_gsoc2010/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/team/eliel/data_api_providers_gsoc2010/main/channel.c?view=diff&rev=266284&r1=266283&r2=266284
==============================================================================
--- team/eliel/data_api_providers_gsoc2010/main/channel.c (original)
+++ team/eliel/data_api_providers_gsoc2010/main/channel.c Fri May 28 08:16:14 2010
@@ -151,10 +151,6 @@
 	MEMBER(ast_channel, hangupsource, AST_DATA_STRING)			\
 	MEMBER(ast_channel, dialcontext, AST_DATA_STRING)			\
 	MEMBER(ast_channel, _softhangup, AST_DATA_INTEGER)			\
-	MEMBER(ast_channel, streamid, AST_DATA_INTEGER)				\
-	MEMBER(ast_channel, vstreamid, AST_DATA_INTEGER)			\
-	MEMBER(ast_channel, oldwriteformat, AST_DATA_INTEGER)			\
-	MEMBER(ast_channel, _state, AST_DATA_INTEGER)				\
 	MEMBER(ast_channel, rings, AST_DATA_INTEGER)				\
 	MEMBER(ast_channel, priority, AST_DATA_INTEGER)				\
 	MEMBER(ast_channel, macropriority, AST_DATA_INTEGER)			\
@@ -162,13 +158,6 @@
 	MEMBER(ast_channel, adsicpe, AST_DATA_INTEGER)				\
 	MEMBER(ast_channel, fin, AST_DATA_UNSIGNED_INTEGER)			\
 	MEMBER(ast_channel, fout, AST_DATA_UNSIGNED_INTEGER)			\
-	MEMBER(ast_channel, hangupcause, AST_DATA_INTEGER)			\
-	MEMBER(ast_channel, flags, AST_DATA_UNSIGNED_INTEGER)			\
-	MEMBER(ast_channel, nativeformats, AST_DATA_INTEGER)			\
-	MEMBER(ast_channel, readformat, AST_DATA_INTEGER)			\
-	MEMBER(ast_channel, writeformat, AST_DATA_INTEGER)			\
-	MEMBER(ast_channel, rawreadformat, AST_DATA_INTEGER)			\
-	MEMBER(ast_channel, rawwriteformat, AST_DATA_INTEGER)			\
 	MEMBER(ast_channel, emulate_dtmf_duration, AST_DATA_UNSIGNED_INTEGER)	\
 	MEMBER(ast_channel, visible_indication, AST_DATA_INTEGER)		\
 	MEMBER(ast_channel, transfercapability, AST_DATA_INTEGER)		\
@@ -258,9 +247,79 @@
 	return var;
 }
 
-int ast_channel_data_add_structure(struct ast_data *tree, struct ast_channel *chan)
-{
-	return ast_data_add_structure(ast_channel, tree, chan);
+static void channel_data_add_flags(struct ast_data *tree,
+	struct ast_channel *chan)
+{
+	ast_data_add_bool(tree, "DEFER_DTMF", ast_test_flag(chan, AST_FLAG_DEFER_DTMF));
+	ast_data_add_bool(tree, "WRITE_INT", ast_test_flag(chan, AST_FLAG_WRITE_INT));
+	ast_data_add_bool(tree, "BLOCKING", ast_test_flag(chan, AST_FLAG_BLOCKING));
+	ast_data_add_bool(tree, "ZOMBIE", ast_test_flag(chan, AST_FLAG_ZOMBIE));
+	ast_data_add_bool(tree, "EXCEPTION", ast_test_flag(chan, AST_FLAG_EXCEPTION));
+	ast_data_add_bool(tree, "MOH", ast_test_flag(chan, AST_FLAG_MOH));
+	ast_data_add_bool(tree, "SPYING", ast_test_flag(chan, AST_FLAG_SPYING));
+	ast_data_add_bool(tree, "NBRIDGE", ast_test_flag(chan, AST_FLAG_NBRIDGE));
+	ast_data_add_bool(tree, "IN_AUTOLOOP", ast_test_flag(chan, AST_FLAG_IN_AUTOLOOP));
+	ast_data_add_bool(tree, "OUTGOING", ast_test_flag(chan, AST_FLAG_OUTGOING));
+	ast_data_add_bool(tree, "IN_DTMF", ast_test_flag(chan, AST_FLAG_IN_DTMF));
+	ast_data_add_bool(tree, "EMULATE_DTMF", ast_test_flag(chan, AST_FLAG_EMULATE_DTMF));
+	ast_data_add_bool(tree, "END_DTMF_ONLY", ast_test_flag(chan, AST_FLAG_END_DTMF_ONLY));
+	ast_data_add_bool(tree, "ANSWERED_ELSEWHERE", ast_test_flag(chan, AST_FLAG_ANSWERED_ELSEWHERE));
+	ast_data_add_bool(tree, "MASQ_NOSTREAM", ast_test_flag(chan, AST_FLAG_MASQ_NOSTREAM));
+	ast_data_add_bool(tree, "BRIDGE_HANGUP_RUN", ast_test_flag(chan, AST_FLAG_BRIDGE_HANGUP_RUN));
+	ast_data_add_bool(tree, "BRIDGE_HANGUP_DONT", ast_test_flag(chan, AST_FLAG_BRIDGE_HANGUP_DONT));
+	ast_data_add_bool(tree, "DISABLE_WORKAROUNDS", ast_test_flag(chan, AST_FLAG_DISABLE_WORKAROUNDS));
+}
+
+int ast_channel_data_add_structure(struct ast_data *tree,
+	struct ast_channel *chan, int add_bridged)
+{
+	struct ast_channel *bc;
+	struct ast_data *data_bridged, *data_cdr, *data_flags;
+
+	if (!tree) {
+		return -1;
+	}
+
+	ast_data_add_structure(ast_channel, tree, chan);
+
+	if (add_bridged) {
+		bc = ast_bridged_channel(chan);
+		if (bc) {
+			data_bridged = ast_data_add_node(tree, "bridged");
+			if (!data_bridged) {
+				return -1;
+			}
+			ast_channel_data_add_structure(data_bridged, bc, 0);
+		}
+	}
+
+	ast_data_add_codecs(tree, "oldwriteformat", chan->oldwriteformat);
+	ast_data_add_codecs(tree, "nativeformats", chan->nativeformats);
+	ast_data_add_codecs(tree, "readformat", chan->readformat);
+	ast_data_add_codecs(tree, "writeformat", chan->writeformat);
+	ast_data_add_codecs(tree, "rawreadformat", chan->rawreadformat);
+	ast_data_add_codecs(tree, "rawwriteformat", chan->rawwriteformat);
+
+	ast_data_add_str(tree, "state", ast_state2str(chan->_state));
+
+	ast_data_add_str(tree, "hangupcause", ast_cause2str(chan->hangupcause));
+
+	/* channel flags */
+	data_flags = ast_data_add_node(tree, "flags");
+	if (!data_flags) {
+		return -1;
+	}
+	channel_data_add_flags(data_flags, chan);
+
+	/* insert cdr */
+	data_cdr = ast_data_add_node(tree, "cdr");
+	if (!data_cdr) {
+		return -1;
+	}
+
+	ast_cdr_data_add_structure(data_cdr, chan->cdr, 1);
+
+	return 0;
 }
 
 int ast_channel_data_cmp_structure(const struct ast_data_search *tree,
@@ -6733,9 +6792,9 @@
 static int data_channels_provider_handler(const struct ast_data_search *search,
 	struct ast_data *root)
 {
-	struct ast_channel *c, *bc;
+	struct ast_channel *c;
 	struct ast_channel_iterator *iter = NULL;
-	struct ast_data *data_channel, *data_bridged;
+	struct ast_data *data_channel;
 
 	for (iter = ast_channel_iterator_all_new();
 		iter && (c = ast_channel_iterator_next(iter)); ast_channel_unref(c)) {
@@ -6747,24 +6806,9 @@
 			continue;
 		}
 
-		ast_channel_data_add_structure(data_channel, c);
-
-		bc = ast_bridged_channel(c);
-		if (bc) {
-			data_bridged = ast_data_add_node(data_channel, "bridged");
-			if (!data_bridged) {
-				ast_channel_unlock(c);
-				continue;
-			}
-			ast_channel_data_add_structure(data_bridged, bc);
-		}
-
-		ast_data_add_codecs(data_channel, "oldwriteformat", c->oldwriteformat);
-		ast_data_add_codecs(data_channel, "nativeformats", c->nativeformats);
-		ast_data_add_codecs(data_channel, "readformat", c->readformat);
-		ast_data_add_codecs(data_channel, "writeformat", c->writeformat);
-		ast_data_add_codecs(data_channel, "rawreadformat", c->rawreadformat);
-		ast_data_add_codecs(data_channel, "rawwriteformat", c->rawwriteformat);
+		if (ast_channel_data_add_structure(data_channel, c, 1) < 0) {
+			ast_log(LOG_ERROR, "Unable to add channel structure for channel: %s\n", c->name);
+		}
 
 		ast_channel_unlock(c);
 

Modified: team/eliel/data_api_providers_gsoc2010/main/data.c
URL: http://svnview.digium.com/svn/asterisk/team/eliel/data_api_providers_gsoc2010/main/data.c?view=diff&rev=266284&r1=266283&r2=266284
==============================================================================
--- team/eliel/data_api_providers_gsoc2010/main/data.c (original)
+++ team/eliel/data_api_providers_gsoc2010/main/data.c Fri May 28 08:16:14 2010
@@ -86,7 +86,7 @@
 		int32_t sint;
 		uint32_t uint;
 		double dbl;
-		unsigned int boolean:1;
+		unsigned int boolean;
 		char *str;
 		struct in_addr ipaddr;
 		void *ptr;




More information about the asterisk-commits mailing list