| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2005-09-14 20:46:50 +00:00
										 |  |  |  * Asterisk -- An open source telephony toolkit. | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-01-21 07:06:25 +00:00
										 |  |  |  * Copyright (C) 2004 - 2005, Anthony Minessale II. | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Anthony Minessale <anthmct@yahoo.com> | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2006-06-14 14:12:56 +00:00
										 |  |  |  * A license has been granted to Digium (via disclaimer) for the use of | 
					
						
							|  |  |  |  * this code. | 
					
						
							| 
									
										
										
										
											2005-09-14 20:46:50 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * See http://www.asterisk.org for more information about
 | 
					
						
							|  |  |  |  * the Asterisk project. Please do not directly contact | 
					
						
							|  |  |  |  * any of the maintainers of this project for assistance; | 
					
						
							|  |  |  |  * the project provides a web site, mailing lists and IRC | 
					
						
							|  |  |  |  * channels for your use. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  |  * This program is free software, distributed under the terms of | 
					
						
							| 
									
										
										
										
											2005-09-14 20:46:50 +00:00
										 |  |  |  * the GNU General Public License Version 2. See the LICENSE file | 
					
						
							|  |  |  |  * at the top of the source tree. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-10-24 20:12:06 +00:00
										 |  |  | /*! \file
 | 
					
						
							| 
									
										
										
										
											2005-09-14 20:46:50 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-10-24 20:12:06 +00:00
										 |  |  |  * \brief Application to dump channel variables | 
					
						
							| 
									
										
										
										
											2005-12-30 21:18:06 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * \author Anthony Minessale <anthmct@yahoo.com> | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-11-06 15:09:47 +00:00
										 |  |  |  * \ingroup applications | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-07-14 20:28:54 +00:00
										 |  |  | /*** MODULEINFO
 | 
					
						
							|  |  |  | 	<support_level>core</support_level> | 
					
						
							|  |  |  |  ***/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-07 18:54:56 +00:00
										 |  |  | #include "asterisk.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASTERISK_FILE_VERSION(__FILE__, "$Revision$") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-21 06:02:45 +00:00
										 |  |  | #include "asterisk/pbx.h"
 | 
					
						
							|  |  |  | #include "asterisk/module.h"
 | 
					
						
							| 
									
										
										
										
											2007-11-22 03:50:04 +00:00
										 |  |  | #include "asterisk/channel.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-13 08:36:35 +00:00
										 |  |  | #include "asterisk/app.h"
 | 
					
						
							| 
									
										
										
										
											2011-04-13 15:23:23 +00:00
										 |  |  | #include "asterisk/translate.h"
 | 
					
						
							| 
									
										
										
										
											2013-07-25 04:06:32 +00:00
										 |  |  | #include "asterisk/bridge.h"
 | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-01 21:10:07 +00:00
										 |  |  | /*** DOCUMENTATION
 | 
					
						
							|  |  |  | 	<application name="DumpChan" language="en_US"> | 
					
						
							|  |  |  | 		<synopsis> | 
					
						
							|  |  |  | 			Dump Info About The Calling Channel. | 
					
						
							|  |  |  | 		</synopsis> | 
					
						
							|  |  |  | 		<syntax> | 
					
						
							|  |  |  | 			<parameter name="level"> | 
					
						
							| 
									
										
										
										
											2014-01-09 14:15:23 +00:00
										 |  |  | 				<para>Minimum verbose level</para> | 
					
						
							| 
									
										
										
										
											2008-11-01 21:10:07 +00:00
										 |  |  | 			</parameter> | 
					
						
							|  |  |  | 		</syntax> | 
					
						
							|  |  |  | 		<description> | 
					
						
							|  |  |  | 			<para>Displays information on channel and listing of all channel | 
					
						
							|  |  |  | 			variables. If <replaceable>level</replaceable> is specified, output is only | 
					
						
							|  |  |  | 			displayed when the verbose level is currently set to that number | 
					
						
							|  |  |  | 			or greater.</para> | 
					
						
							|  |  |  | 		</description> | 
					
						
							| 
									
										
										
										
											2008-11-05 13:07:29 +00:00
										 |  |  | 		<see-also> | 
					
						
							|  |  |  | 			<ref type="application">NoOp</ref> | 
					
						
							|  |  |  | 			<ref type="application">Verbose</ref> | 
					
						
							|  |  |  | 		</see-also> | 
					
						
							| 
									
										
										
										
											2008-11-01 21:10:07 +00:00
										 |  |  | 	</application> | 
					
						
							|  |  |  |  ***/ | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-07 14:55:51 +00:00
										 |  |  | static const char app[] = "DumpChan"; | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-26 08:40:30 +00:00
										 |  |  | static int serialize_showchan(struct ast_channel *c, char *buf, size_t size) | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2006-06-26 08:40:30 +00:00
										 |  |  | 	long elapsed_seconds = 0; | 
					
						
							|  |  |  | 	int hour = 0, min = 0, sec = 0; | 
					
						
							| 
									
										
										
										
											2011-04-13 15:23:23 +00:00
										 |  |  | 	char nf[256]; | 
					
						
							|  |  |  | 	char cgrp[256]; | 
					
						
							|  |  |  | 	char pgrp[256]; | 
					
						
							|  |  |  | 	struct ast_str *write_transpath = ast_str_alloca(256); | 
					
						
							|  |  |  | 	struct ast_str *read_transpath = ast_str_alloca(256); | 
					
						
							| 
									
										
										
										
											2013-05-21 18:00:22 +00:00
										 |  |  | 	struct ast_bridge *bridge; | 
					
						
							| 
									
										
										
										
											2008-02-09 11:27:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-26 08:40:30 +00:00
										 |  |  | 	memset(buf, 0, size); | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | 	if (!c) | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-17 03:00:38 +00:00
										 |  |  | 	elapsed_seconds = ast_channel_get_duration(c); | 
					
						
							|  |  |  | 	hour = elapsed_seconds / 3600; | 
					
						
							|  |  |  | 	min = (elapsed_seconds % 3600) / 60; | 
					
						
							|  |  |  | 	sec = elapsed_seconds % 60; | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-21 18:00:22 +00:00
										 |  |  | 	ast_channel_lock(c); | 
					
						
							|  |  |  | 	bridge = ast_channel_get_bridge(c); | 
					
						
							|  |  |  | 	ast_channel_unlock(c); | 
					
						
							| 
									
										
										
										
											2013-06-17 03:00:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-09 11:27:10 +00:00
										 |  |  | 	snprintf(buf,size, | 
					
						
							| 
									
										
										
										
											2011-04-13 15:23:23 +00:00
										 |  |  | 		"Name=               %s\n" | 
					
						
							|  |  |  | 		"Type=               %s\n" | 
					
						
							|  |  |  | 		"UniqueID=           %s\n" | 
					
						
							|  |  |  | 		"LinkedID=           %s\n" | 
					
						
							|  |  |  | 		"CallerIDNum=        %s\n" | 
					
						
							|  |  |  | 		"CallerIDName=       %s\n" | 
					
						
							|  |  |  | 		"ConnectedLineIDNum= %s\n" | 
					
						
							|  |  |  | 		"ConnectedLineIDName=%s\n" | 
					
						
							|  |  |  | 		"DNIDDigits=         %s\n" | 
					
						
							|  |  |  | 		"RDNIS=              %s\n" | 
					
						
							|  |  |  | 		"Parkinglot=         %s\n" | 
					
						
							|  |  |  | 		"Language=           %s\n" | 
					
						
							|  |  |  | 		"State=              %s (%d)\n" | 
					
						
							|  |  |  | 		"Rings=              %d\n" | 
					
						
							|  |  |  | 		"NativeFormat=       %s\n" | 
					
						
							|  |  |  | 		"WriteFormat=        %s\n" | 
					
						
							|  |  |  | 		"ReadFormat=         %s\n" | 
					
						
							|  |  |  | 		"RawWriteFormat=     %s\n" | 
					
						
							|  |  |  | 		"RawReadFormat=      %s\n" | 
					
						
							|  |  |  | 		"WriteTranscode=     %s %s\n" | 
					
						
							|  |  |  | 		"ReadTranscode=      %s %s\n" | 
					
						
							|  |  |  | 		"1stFileDescriptor=  %d\n" | 
					
						
							|  |  |  | 		"Framesin=           %d %s\n" | 
					
						
							|  |  |  | 		"Framesout=          %d %s\n" | 
					
						
							|  |  |  | 		"TimetoHangup=       %ld\n" | 
					
						
							|  |  |  | 		"ElapsedTime=        %dh%dm%ds\n" | 
					
						
							| 
									
										
										
										
											2013-05-21 18:00:22 +00:00
										 |  |  | 		"BridgeID=           %s\n" | 
					
						
							| 
									
										
										
										
											2011-04-13 15:23:23 +00:00
										 |  |  | 		"Context=            %s\n" | 
					
						
							|  |  |  | 		"Extension=          %s\n" | 
					
						
							|  |  |  | 		"Priority=           %d\n" | 
					
						
							|  |  |  | 		"CallGroup=          %s\n" | 
					
						
							|  |  |  | 		"PickupGroup=        %s\n" | 
					
						
							|  |  |  | 		"Application=        %s\n" | 
					
						
							|  |  |  | 		"Data=               %s\n" | 
					
						
							|  |  |  | 		"Blocking_in=        %s\n", | 
					
						
							| 
									
										
										
										
											2012-01-09 22:15:50 +00:00
										 |  |  | 		ast_channel_name(c), | 
					
						
							| 
									
										
										
										
											2012-02-20 23:43:27 +00:00
										 |  |  | 		ast_channel_tech(c)->type, | 
					
						
							| 
									
										
										
										
											2012-01-24 20:12:09 +00:00
										 |  |  | 		ast_channel_uniqueid(c), | 
					
						
							|  |  |  | 		ast_channel_linkedid(c), | 
					
						
							| 
									
										
										
										
											2012-02-29 16:52:47 +00:00
										 |  |  | 		S_COR(ast_channel_caller(c)->id.number.valid, ast_channel_caller(c)->id.number.str, "(N/A)"), | 
					
						
							|  |  |  | 		S_COR(ast_channel_caller(c)->id.name.valid, ast_channel_caller(c)->id.name.str, "(N/A)"), | 
					
						
							|  |  |  | 		S_COR(ast_channel_connected(c)->id.number.valid, ast_channel_connected(c)->id.number.str, "(N/A)"), | 
					
						
							|  |  |  | 		S_COR(ast_channel_connected(c)->id.name.valid, ast_channel_connected(c)->id.name.str, "(N/A)"), | 
					
						
							|  |  |  | 		S_OR(ast_channel_dialed(c)->number.str, "(N/A)"), | 
					
						
							|  |  |  | 		S_COR(ast_channel_redirecting(c)->from.number.valid, ast_channel_redirecting(c)->from.number.str, "(N/A)"), | 
					
						
							| 
									
										
										
										
											2012-01-24 20:12:09 +00:00
										 |  |  | 		ast_channel_parkinglot(c), | 
					
						
							| 
									
										
										
										
											2013-07-25 04:06:32 +00:00
										 |  |  | 		ast_channel_language(c), | 
					
						
							| 
									
										
										
										
											2012-02-20 23:43:27 +00:00
										 |  |  | 		ast_state2str(ast_channel_state(c)), | 
					
						
							|  |  |  | 		ast_channel_state(c), | 
					
						
							| 
									
										
										
										
											2013-07-25 04:06:32 +00:00
										 |  |  | 		ast_channel_rings(c), | 
					
						
							| 
									
										
										
										
											2012-02-20 23:43:27 +00:00
										 |  |  | 		ast_getformatname_multiple(nf, sizeof(nf), ast_channel_nativeformats(c)), | 
					
						
							| 
									
										
										
										
											2012-02-24 00:32:20 +00:00
										 |  |  | 		ast_getformatname(ast_channel_writeformat(c)), | 
					
						
							|  |  |  | 		ast_getformatname(ast_channel_readformat(c)), | 
					
						
							|  |  |  | 		ast_getformatname(ast_channel_rawwriteformat(c)), | 
					
						
							|  |  |  | 		ast_getformatname(ast_channel_rawreadformat(c)), | 
					
						
							| 
									
										
										
										
											2012-02-20 23:43:27 +00:00
										 |  |  | 		ast_channel_writetrans(c) ? "Yes" : "No", | 
					
						
							|  |  |  | 		ast_translate_path_to_str(ast_channel_writetrans(c), &write_transpath), | 
					
						
							|  |  |  | 		ast_channel_readtrans(c) ? "Yes" : "No", | 
					
						
							|  |  |  | 		ast_translate_path_to_str(ast_channel_readtrans(c), &read_transpath), | 
					
						
							| 
									
										
										
										
											2012-03-01 22:09:18 +00:00
										 |  |  | 		ast_channel_fd(c, 0), | 
					
						
							| 
									
										
										
										
											2012-02-20 23:43:27 +00:00
										 |  |  | 		ast_channel_fin(c) & ~DEBUGCHAN_FLAG, (ast_channel_fin(c) & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "", | 
					
						
							|  |  |  | 		ast_channel_fout(c) & ~DEBUGCHAN_FLAG, (ast_channel_fout(c) & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "", | 
					
						
							| 
									
										
										
										
											2012-02-29 16:52:47 +00:00
										 |  |  | 		(long)ast_channel_whentohangup(c)->tv_sec, | 
					
						
							| 
									
										
										
										
											2011-04-13 15:23:23 +00:00
										 |  |  | 		hour, | 
					
						
							|  |  |  | 		min, | 
					
						
							|  |  |  | 		sec, | 
					
						
							| 
									
										
										
										
											2013-05-21 18:00:22 +00:00
										 |  |  | 		bridge ? bridge->uniqueid : "(Not bridged)", | 
					
						
							| 
									
										
										
										
											2012-02-13 17:27:06 +00:00
										 |  |  | 		ast_channel_context(c), | 
					
						
							|  |  |  | 		ast_channel_exten(c), | 
					
						
							| 
									
										
										
										
											2012-02-20 23:43:27 +00:00
										 |  |  | 		ast_channel_priority(c), | 
					
						
							| 
									
										
										
										
											2012-03-01 22:09:18 +00:00
										 |  |  | 		ast_print_group(cgrp, sizeof(cgrp), ast_channel_callgroup(c)), | 
					
						
							|  |  |  | 		ast_print_group(pgrp, sizeof(pgrp), ast_channel_pickupgroup(c)), | 
					
						
							| 
									
										
										
										
											2012-02-13 17:27:06 +00:00
										 |  |  | 		ast_channel_appl(c) ? ast_channel_appl(c) : "(N/A)", | 
					
						
							|  |  |  | 		ast_channel_data(c) ? S_OR(ast_channel_data(c), "(Empty)") : "(None)", | 
					
						
							| 
									
										
										
										
											2012-03-13 18:20:34 +00:00
										 |  |  | 		(ast_test_flag(ast_channel_flags(c), AST_FLAG_BLOCKING) ? ast_channel_blockproc(c) : "(Not Blocking)")); | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-21 18:00:22 +00:00
										 |  |  | 	ao2_cleanup(bridge); | 
					
						
							| 
									
										
										
										
											2004-11-06 04:48:34 +00:00
										 |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-21 21:13:09 +00:00
										 |  |  | static int dumpchan_exec(struct ast_channel *chan, const char *data) | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-03-27 16:21:10 +00:00
										 |  |  | 	struct ast_str *vars = ast_str_thread_get(&ast_str_thread_global_buf, 16); | 
					
						
							| 
									
										
										
										
											2011-04-13 15:23:23 +00:00
										 |  |  | 	char info[2048]; | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | 	int level = 0; | 
					
						
							|  |  |  | 	static char *line = "================================================================================"; | 
					
						
							| 
									
										
										
										
											2008-02-09 11:27:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (!ast_strlen_zero(data)) | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | 		level = atoi(data); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-14 18:14:02 +00:00
										 |  |  | 	if (VERBOSITY_ATLEAST(level)) { | 
					
						
							|  |  |  | 		serialize_showchan(chan, info, sizeof(info)); | 
					
						
							|  |  |  | 		pbx_builtin_serialize_variables(chan, &vars); | 
					
						
							|  |  |  | 		ast_verb(level, "\n" | 
					
						
							|  |  |  | 			"Dumping Info For Channel: %s:\n" | 
					
						
							|  |  |  | 			"%s\n" | 
					
						
							|  |  |  | 			"Info:\n" | 
					
						
							|  |  |  | 			"%s\n" | 
					
						
							|  |  |  | 			"Variables:\n" | 
					
						
							|  |  |  | 			"%s%s\n", ast_channel_name(chan), line, info, ast_str_buffer(vars), line); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-02-09 11:27:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-06-26 08:40:30 +00:00
										 |  |  | 	return 0; | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-21 02:11:39 +00:00
										 |  |  | static int unload_module(void) | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2007-07-16 13:35:20 +00:00
										 |  |  | 	return ast_unregister_application(app); | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-21 02:11:39 +00:00
										 |  |  | static int load_module(void) | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2008-11-01 21:10:07 +00:00
										 |  |  | 	return ast_register_application_xml(app, dumpchan_exec); | 
					
						
							| 
									
										
										
										
											2004-11-06 04:46:06 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-08-21 02:11:39 +00:00
										 |  |  | AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Dump Info About The Calling Channel"); |