Asterisk - The Open Source Telephony Project  GIT-master-a1fa8df
app_verbose.c
Go to the documentation of this file.
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (c) 2004 - 2005 Tilghman Lesher. All rights reserved.
5  *
6  * Tilghman Lesher <app_verbose_v001@the-tilghman.com>
7  *
8  * This code is released by the author with no restrictions on usage.
9  *
10  * See http://www.asterisk.org for more information about
11  * the Asterisk project. Please do not directly contact
12  * any of the maintainers of this project for assistance;
13  * the project provides a web site, mailing lists and IRC
14  * channels for your use.
15  *
16  */
17 
18 /*! \file
19  *
20  * \brief Verbose logging application
21  *
22  * \author Tilghman Lesher <app_verbose_v001@the-tilghman.com>
23  *
24  * \ingroup applications
25  */
26 
27 /*** MODULEINFO
28  <support_level>core</support_level>
29  ***/
30 
31 #include "asterisk.h"
32 
33 #include "asterisk/module.h"
34 #include "asterisk/app.h"
35 #include "asterisk/channel.h"
36 
37 static char *app_verbose = "Verbose";
38 static char *app_log = "Log";
39 
40 /*** DOCUMENTATION
41  <application name="Verbose" language="en_US">
42  <synopsis>
43  Send arbitrary text to verbose output.
44  </synopsis>
45  <syntax>
46  <parameter name="level">
47  <para>Must be an integer value. If not specified, defaults to 0.</para>
48  </parameter>
49  <parameter name="message" required="true">
50  <para>Output text message.</para>
51  </parameter>
52  </syntax>
53  <description>
54  <para>Sends an arbitrary text message to verbose output.</para>
55  </description>
56  </application>
57  <application name="Log" language="en_US">
58  <synopsis>
59  Send arbitrary text to a selected log level.
60  </synopsis>
61  <syntax>
62  <parameter name="level" required="true">
63  <para>Level must be one of <literal>ERROR</literal>, <literal>WARNING</literal>, <literal>NOTICE</literal>,
64  <literal>DEBUG</literal>, <literal>VERBOSE</literal> or <literal>DTMF</literal>.</para>
65  </parameter>
66  <parameter name="message" required="true">
67  <para>Output text message.</para>
68  </parameter>
69  </syntax>
70  <description>
71  <para>Sends an arbitrary text message to a selected log level.</para>
72  </description>
73  </application>
74  ***/
75 
76 
77 static int verbose_exec(struct ast_channel *chan, const char *data)
78 {
79  unsigned int vsize;
80  char *parse;
82  AST_APP_ARG(level);
83  AST_APP_ARG(msg);
84  );
85 
86  if (ast_strlen_zero(data)) {
87  return 0;
88  }
89 
90  parse = ast_strdupa(data);
92  if (args.argc == 1) {
93  args.msg = args.level;
94  args.level = "0";
95  }
96 
97  if (sscanf(args.level, "%30u", &vsize) != 1) {
98  vsize = 0;
99  ast_log(LOG_WARNING, "'%s' is not a verboser number\n", args.level);
100  } else if (4 < vsize) {
101  vsize = 4;
102  }
103 
104  ast_verb(vsize, "%s\n", args.msg);
105 
106  return 0;
107 }
108 
109 static int log_exec(struct ast_channel *chan, const char *data)
110 {
111  char *parse;
112  int lnum = -1;
115  AST_APP_ARG(level);
116  AST_APP_ARG(msg);
117  );
118 
119  if (ast_strlen_zero(data))
120  return 0;
121 
122  parse = ast_strdupa(data);
123  AST_STANDARD_APP_ARGS(args, parse);
124 
125  if (!strcasecmp(args.level, "ERROR")) {
126  lnum = __LOG_ERROR;
127  } else if (!strcasecmp(args.level, "WARNING")) {
128  lnum = __LOG_WARNING;
129  } else if (!strcasecmp(args.level, "NOTICE")) {
130  lnum = __LOG_NOTICE;
131  } else if (!strcasecmp(args.level, "DEBUG")) {
132  lnum = __LOG_DEBUG;
133  } else if (!strcasecmp(args.level, "VERBOSE")) {
134  lnum = __LOG_VERBOSE;
135  } else if (!strcasecmp(args.level, "DTMF")) {
136  lnum = __LOG_DTMF;
137  } else {
138  ast_log(LOG_ERROR, "Unknown log level: '%s'\n", args.level);
139  }
140 
141  if (lnum > -1) {
142  snprintf(context, sizeof(context), "@ %s", ast_channel_context(chan));
143  snprintf(extension, sizeof(extension), "Ext. %s", ast_channel_exten(chan));
144 
145  ast_log(lnum, extension, ast_channel_priority(chan), context, "%s\n", args.msg);
146  }
147 
148  return 0;
149 }
150 
151 static int unload_module(void)
152 {
153  int res;
154 
157 
158  return res;
159 }
160 
161 static int load_module(void)
162 {
163  int res;
164 
167 
168  return res;
169 }
170 
Main Channel structure associated with a channel.
#define AST_MODULE_INFO_STANDARD(keystr, desc)
Definition: module.h:567
Asterisk main include file. File version handling, generic pbx functions.
#define __LOG_DEBUG
Definition: logger.h:240
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the &#39;standard&#39; argument separation process for an application.
#define LOG_WARNING
Definition: logger.h:274
#define __LOG_DTMF
Definition: logger.h:306
static char * app_log
Definition: app_verbose.c:38
static int load_module(void)
Definition: app_verbose.c:161
#define __LOG_WARNING
Definition: logger.h:273
#define __LOG_ERROR
Definition: logger.h:284
const char * args
int ast_unregister_application(const char *app)
Unregister an application.
Definition: pbx_app.c:392
static int verbose_exec(struct ast_channel *chan, const char *data)
Definition: app_verbose.c:77
int ast_channel_priority(const struct ast_channel *chan)
#define ast_verb(level,...)
Definition: logger.h:455
#define ast_log
Definition: astobj2.c:42
General Asterisk PBX channel definitions.
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
#define AST_MAX_EXTENSION
Definition: channel.h:135
structure to hold extensions
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
const char * ast_channel_exten(const struct ast_channel *chan)
#define LOG_ERROR
Definition: logger.h:285
static void parse(struct mgcp_request *req)
Definition: chan_mgcp.c:1844
static char * app_verbose
Definition: app_verbose.c:37
#define __LOG_NOTICE
Definition: logger.h:262
#define __LOG_VERBOSE
Definition: logger.h:295
const char * ast_channel_context(const struct ast_channel *chan)
static int unload_module(void)
Definition: app_verbose.c:151
static char context[AST_MAX_CONTEXT]
Definition: chan_alsa.c:120
#define ASTERISK_GPL_KEY
The text the key() function should return.
Definition: module.h:46
Asterisk module definitions.
static int log_exec(struct ast_channel *chan, const char *data)
Definition: app_verbose.c:109
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application&#39;s arguments.
Application convenience functions, designed to give consistent look and feel to Asterisk apps...
#define ast_register_application_xml(app, execute)
Register an application using XML documentation.
Definition: module.h:626
#define AST_APP_ARG(name)
Define an application argument.