Asterisk - The Open Source Telephony Project  18.5.0
app_celgenuserevent.c
Go to the documentation of this file.
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2008, Digium, Inc
5  *
6  * See http://www.asterisk.org for more information about
7  * the Asterisk project. Please do not directly contact
8  * any of the maintainers of this project for assistance;
9  * the project provides a web site, mailing lists and IRC
10  * channels for your use.
11  *
12  * This program is free software, distributed under the terms of
13  * the GNU General Public License Version 2. See the LICENSE file
14  * at the top of the source tree.
15  */
16 
17 /*! \file
18  *
19  * \brief Generate User-Defined CEL event
20  *
21  * \author Steve Murphy
22  *
23  * \ingroup applications
24  */
25 
26 /*** MODULEINFO
27  <support_level>core</support_level>
28  ***/
29 
30 #include "asterisk.h"
31 
32 #include "asterisk/module.h"
33 #include "asterisk/app.h"
34 #include "asterisk/channel.h"
35 #include "asterisk/cel.h"
36 
37 /*** DOCUMENTATION
38  <application name="CELGenUserEvent" language="en_US">
39  <synopsis>
40  Generates a CEL User Defined Event.
41  </synopsis>
42  <syntax>
43  <parameter name="event-name" required="true">
44  <argument name="event-name" required="true">
45  </argument>
46  <argument name="extra" required="false">
47  <para>Extra text to be included with the event.</para>
48  </argument>
49  </parameter>
50  </syntax>
51  <description>
52  <para>A CEL event will be immediately generated by this channel, with the supplied name for a type.</para>
53  </description>
54  </application>
55  ***/
56 
57 static char *app = "CELGenUserEvent";
58 
59 static int celgenuserevent_exec(struct ast_channel *chan, const char *data)
60 {
61  int res = 0;
62  char *parse;
63  RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
66  AST_APP_ARG(extra);
67  );
68 
69  if (ast_strlen_zero(data)) {
70  return 0;
71  }
72 
73  parse = ast_strdupa(data);
75 
76  blob = ast_json_pack("{s: s, s: {s: s}}",
77  "event", args.event,
78  "extra", "extra", S_OR(args.extra, ""));
79  if (!blob) {
80  return res;
81  }
83  return res;
84 }
85 
86 static int unload_module(void)
87 {
89  return 0;
90 }
91 
92 static int load_module(void)
93 {
95  if (res) {
97  } else {
99  }
100 }
101 
102 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Generate an User-Defined CEL event",
103  .support_level = AST_MODULE_SUPPORT_CORE,
104  .load = load_module,
105  .unload = unload_module,
106  .requires = "cel",
107 );
Main Channel structure associated with a channel.
static int unload_module(void)
Asterisk main include file. File version handling, generic pbx functions.
struct ast_json * ast_json_pack(char const *format,...)
Helper for creating complex JSON values.
Definition: json.c:591
Call Event Logging API.
void ast_json_unref(struct ast_json *value)
Decrease refcount on value. If refcount reaches zero, value is freed.
Definition: json.c:73
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the &#39;standard&#39; argument separation process for an application.
Definition: astman.c:222
static int celgenuserevent_exec(struct ast_channel *chan, const char *data)
const char * args
#define NULL
Definition: resample.c:96
int ast_unregister_application(const char *app)
Unregister an application.
Definition: pbx_app.c:392
#define ast_strlen_zero(foo)
Definition: strings.h:52
static char * app
General Asterisk PBX channel definitions.
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
Definition: utils.h:911
static int load_module(void)
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
static void parse(struct mgcp_request *req)
Definition: chan_mgcp.c:1872
Module has failed to load, may be in an inconsistent state.
Definition: module.h:78
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS|AST_MODFLAG_LOAD_ORDER, "HTTP Phone Provisioning",.support_level=AST_MODULE_SUPPORT_EXTENDED,.load=load_module,.unload=unload_module,.reload=reload,.load_pri=AST_MODPRI_CHANNEL_DEPEND,.requires="http",)
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one...
Definition: strings.h:79
Abstract JSON element (object, array, string, int, ...).
a user-defined event, the event name field should be set
Definition: cel.h:69
#define ASTERISK_GPL_KEY
The text the key() function should return.
Definition: module.h:46
Asterisk module definitions.
#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
void ast_cel_publish_event(struct ast_channel *chan, enum ast_cel_event_type event_type, struct ast_json *blob)
Publish a CEL event.
Definition: cel.c:1666
#define AST_APP_ARG(name)
Define an application argument.