Asterisk - The Open Source Telephony Project GIT-master-4f2b068
Loading...
Searching...
No Matches
Macros | Functions | Variables
cel_manager.c File Reference

Asterisk Channel Event records. More...

#include "asterisk.h"
#include "asterisk/channel.h"
#include "asterisk/cel.h"
#include "asterisk/module.h"
#include "asterisk/logger.h"
#include "asterisk/utils.h"
#include "asterisk/manager.h"
#include "asterisk/config.h"
Include dependency graph for cel_manager.c:

Go to the source code of this file.

Macros

#define CEL_AMI_ENABLED_DEFAULT   0
 AMI CEL is off by default.
 
#define CEL_SHOW_USERDEF_DEFAULT   0
 show_user_def is off by default
 
#define MANAGER_BACKEND_NAME   "Manager Event Logging"
 

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int load_config (int reload)
 
static int load_module (void)
 
static void manager_log (struct ast_event *event)
 
static int reload (void)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Asterisk Manager Interface CEL Backend" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .reload = reload, .load_pri = AST_MODPRI_CDR_DRIVER, .requires = "cel", }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static unsigned char cel_show_user_def
 
static const char CONF_FILE [] = "cel.conf"
 
static const char DATE_FORMAT [] = "%Y-%m-%d %T"
 
static int enablecel
 

Detailed Description

Asterisk Channel Event records.

See also

Definition in file cel_manager.c.

Macro Definition Documentation

◆ CEL_AMI_ENABLED_DEFAULT

#define CEL_AMI_ENABLED_DEFAULT   0

AMI CEL is off by default.

Definition at line 229 of file cel_manager.c.

◆ CEL_SHOW_USERDEF_DEFAULT

#define CEL_SHOW_USERDEF_DEFAULT   0

show_user_def is off by default

Definition at line 234 of file cel_manager.c.

◆ MANAGER_BACKEND_NAME

#define MANAGER_BACKEND_NAME   "Manager Event Logging"

Definition at line 236 of file cel_manager.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 409 of file cel_manager.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 409 of file cel_manager.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 409 of file cel_manager.c.

◆ load_config()

static int load_config ( int  reload)
static

Definition at line 325 of file cel_manager.c.

326{
327 const char *cat = NULL;
328 struct ast_config *cfg;
329 struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
330 struct ast_variable *v;
331 int newenablecel = CEL_AMI_ENABLED_DEFAULT;
332 int new_cel_show_user_def = CEL_SHOW_USERDEF_DEFAULT;
333
334 cfg = ast_config_load(CONF_FILE, config_flags);
335 if (cfg == CONFIG_STATUS_FILEUNCHANGED) {
336 return 0;
337 }
338
339 if (cfg == CONFIG_STATUS_FILEINVALID) {
340 ast_log(LOG_WARNING, "Configuration file '%s' is invalid. CEL manager Module not activated.\n",
341 CONF_FILE);
342 enablecel = 0;
343 return -1;
344 } else if (!cfg) {
345 ast_log(LOG_WARNING, "Failed to load configuration file. CEL manager Module not activated.\n");
346 enablecel = 0;
347 return -1;
348 }
349
350 while ((cat = ast_category_browse(cfg, cat))) {
351 if (strcasecmp(cat, "manager")) {
352 continue;
353 }
354
355 for (v = ast_variable_browse(cfg, cat); v; v = v->next) {
356 if (!strcasecmp(v->name, "enabled")) {
357 newenablecel = ast_true(v->value) ? 1 : 0;
358 } else if (!strcasecmp(v->name, "show_user_defined")) {
359 new_cel_show_user_def = ast_true(v->value) ? 1 : 0;
360 } else {
361 ast_log(LOG_NOTICE, "Unknown option '%s' specified "
362 "for cel_manager.\n", v->name);
363 }
364 }
365 }
366
368
369 cel_show_user_def = new_cel_show_user_def;
370 if (enablecel && !newenablecel) {
372 } else if (!enablecel && newenablecel) {
374 ast_log(LOG_ERROR, "Unable to register Asterisk Call Manager CEL handling\n");
375 }
376 }
377 enablecel = newenablecel;
378
379 return 0;
380}
#define ast_log
Definition astobj2.c:42
int ast_cel_backend_unregister(const char *name)
Unregister a CEL backend.
Definition cel.c:1797
int ast_cel_backend_register(const char *name, ast_cel_backend_cb backend_callback)
Register a CEL backend.
Definition cel.c:1809
#define CEL_SHOW_USERDEF_DEFAULT
show_user_def is off by default
static void manager_log(struct ast_event *event)
#define CEL_AMI_ENABLED_DEFAULT
AMI CEL is off by default.
static unsigned char cel_show_user_def
static int enablecel
static int reload(void)
#define MANAGER_BACKEND_NAME
static const char CONF_FILE[]
#define ast_config_load(filename, flags)
Load a config file.
char * ast_category_browse(struct ast_config *config, const char *prev_name)
Browse categories.
Definition extconf.c:3324
#define CONFIG_STATUS_FILEUNCHANGED
#define CONFIG_STATUS_FILEINVALID
void ast_config_destroy(struct ast_config *cfg)
Destroys a config.
Definition extconf.c:1287
@ CONFIG_FLAG_FILEUNCHANGED
struct ast_variable * ast_variable_browse(const struct ast_config *config, const char *category_name)
Definition extconf.c:1213
#define LOG_ERROR
#define LOG_NOTICE
#define LOG_WARNING
#define NULL
Definition resample.c:96
int attribute_pure ast_true(const char *val)
Make sure something is true. Determine if a string containing a boolean value is "true"....
Definition utils.c:2235
Structure used to handle boolean flags.
Definition utils.h:220
Structure for variables, used for configurations and for channel variables.
struct ast_variable * next

References ast_category_browse(), ast_cel_backend_register(), ast_cel_backend_unregister(), ast_config_destroy(), ast_config_load, ast_log, ast_true(), ast_variable_browse(), CEL_AMI_ENABLED_DEFAULT, cel_show_user_def, CEL_SHOW_USERDEF_DEFAULT, CONF_FILE, CONFIG_FLAG_FILEUNCHANGED, CONFIG_STATUS_FILEINVALID, CONFIG_STATUS_FILEUNCHANGED, enablecel, LOG_ERROR, LOG_NOTICE, LOG_WARNING, MANAGER_BACKEND_NAME, manager_log(), ast_variable::name, ast_variable::next, NULL, reload(), and ast_variable::value.

◆ load_module()

static int load_module ( void  )
static

Definition at line 388 of file cel_manager.c.

389{
390 if (load_config(0)) {
392 }
393
395}
static int load_config(void)
@ AST_MODULE_LOAD_SUCCESS
Definition module.h:70
@ AST_MODULE_LOAD_DECLINE
Module has failed to load, may be in an inconsistent state.
Definition module.h:78

References AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, and load_config().

◆ manager_log()

static void manager_log ( struct ast_event event)
static

Definition at line 241 of file cel_manager.c.

242{
243 struct ast_tm timeresult;
244 char start_time[80] = "";
245 char user_defined_header[160];
246 const char *event_name;
247 struct ast_cel_event_record record = {
249 };
250 RAII_VAR(char *, tenant_id, NULL, ast_free);
251
252 if (!enablecel) {
253 return;
254 }
255
256 if (ast_cel_fill_record(event, &record)) {
257 return;
258 }
259
260 ast_localtime(&record.event_time, &timeresult, NULL);
261 ast_strftime(start_time, sizeof(start_time), DATE_FORMAT, &timeresult);
262
263 event_name = record.event_name;
264 user_defined_header[0] = '\0';
265 if (record.event_type == AST_CEL_USER_DEFINED) {
266 if (cel_show_user_def) {
267 snprintf(user_defined_header, sizeof(user_defined_header),
268 "UserDefType: %s\r\n", record.user_defined_name);
269 } else {
271 }
272 }
273
274 if (!ast_strlen_zero(record.tenant_id)) {
275 ast_asprintf(&tenant_id, "TenantID: %s\r\n", record.tenant_id);
276 }
277
279 "EventName: %s\r\n"
280 "AccountCode: %s\r\n"
281 "CallerIDnum: %s\r\n"
282 "CallerIDname: %s\r\n"
283 "CallerIDani: %s\r\n"
284 "CallerIDrdnis: %s\r\n"
285 "CallerIDdnid: %s\r\n"
286 "Exten: %s\r\n"
287 "Context: %s\r\n"
288 "Channel: %s\r\n"
289 "Application: %s\r\n"
290 "AppData: %s\r\n"
291 "EventTime: %s\r\n"
292 "AMAFlags: %s\r\n"
293 "UniqueID: %s\r\n"
294 "LinkedID: %s\r\n"
295 "%s"
296 "Userfield: %s\r\n"
297 "Peer: %s\r\n"
298 "PeerAccount: %s\r\n"
299 "%s"
300 "Extra: %s\r\n",
302 record.account_code,
303 record.caller_id_num,
304 record.caller_id_name,
305 record.caller_id_ani,
306 record.caller_id_rdnis,
307 record.caller_id_dnid,
308 record.extension,
309 record.context,
310 record.channel_name,
311 record.application_name,
312 record.application_data,
313 start_time,
315 record.unique_id,
316 record.linked_id,
318 record.user_field,
319 record.peer,
320 record.peer_account,
321 user_defined_header,
322 record.extra);
323}
#define ast_free(a)
Definition astmm.h:180
#define ast_asprintf(ret, fmt,...)
A wrapper for asprintf()
Definition astmm.h:267
@ AST_CEL_USER_DEFINED
a user-defined event, the event name field should be set
Definition cel.h:69
int ast_cel_fill_record(const struct ast_event *event, struct ast_cel_event_record *r)
Fill in an ast_cel_event_record from a CEL event.
Definition cel.c:843
#define AST_CEL_EVENT_RECORD_VERSION
struct ABI version
Definition cel.h:149
static const char DATE_FORMAT[]
const char * ast_channel_amaflags2string(enum ama_flags flags)
Convert the enum representation of an AMA flag to a string representation.
Definition channel.c:4367
struct ast_tm * ast_localtime(const struct timeval *timep, struct ast_tm *p_tm, const char *zone)
Timezone-independent version of localtime_r(3).
Definition localtime.c:1739
int ast_strftime(char *buf, size_t len, const char *format, const struct ast_tm *tm)
Special version of strftime(3) that handles fractions of a second. Takes the same arguments as strfti...
Definition localtime.c:2524
#define manager_event(category, event, contents,...)
External routines may send asterisk manager events this way.
Definition manager.h:254
#define EVENT_FLAG_CALL
Definition manager.h:76
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition strings.h:65
Helper struct for getting the fields out of a CEL event.
Definition cel.h:144
const char * caller_id_dnid
Definition cel.h:163
const char * application_data
Definition cel.h:168
const char * account_code
Definition cel.h:169
const char * caller_id_rdnis
Definition cel.h:162
const char * extra
Definition cel.h:177
const char * extension
Definition cel.h:164
const char * caller_id_num
Definition cel.h:160
const char * channel_name
Definition cel.h:166
const char * linked_id
Definition cel.h:172
const char * peer_account
Definition cel.h:170
const char * peer
Definition cel.h:176
enum ast_cel_event_type event_type
Definition cel.h:155
const char * unique_id
Definition cel.h:171
const char * user_defined_name
Definition cel.h:158
const char * context
Definition cel.h:165
const char * application_name
Definition cel.h:167
struct timeval event_time
Definition cel.h:156
uint32_t version
struct ABI version
Definition cel.h:154
const char * tenant_id
Definition cel.h:173
const char * user_field
Definition cel.h:175
const char * caller_id_ani
Definition cel.h:161
const char * caller_id_name
Definition cel.h:159
const char * event_name
Definition cel.h:157
#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:981

References ast_cel_event_record::account_code, ast_cel_event_record::amaflag, ast_cel_event_record::application_data, ast_cel_event_record::application_name, ast_asprintf, AST_CEL_EVENT_RECORD_VERSION, ast_cel_fill_record(), AST_CEL_USER_DEFINED, ast_channel_amaflags2string(), ast_free, ast_localtime(), ast_strftime(), ast_strlen_zero(), ast_cel_event_record::caller_id_ani, ast_cel_event_record::caller_id_dnid, ast_cel_event_record::caller_id_name, ast_cel_event_record::caller_id_num, ast_cel_event_record::caller_id_rdnis, cel_show_user_def, ast_cel_event_record::channel_name, ast_cel_event_record::context, DATE_FORMAT, enablecel, EVENT_FLAG_CALL, ast_cel_event_record::event_name, ast_cel_event_record::event_time, ast_cel_event_record::event_type, ast_cel_event_record::extension, ast_cel_event_record::extra, ast_cel_event_record::linked_id, manager_event, NULL, ast_cel_event_record::peer, ast_cel_event_record::peer_account, RAII_VAR, ast_cel_event_record::tenant_id, ast_cel_event_record::unique_id, ast_cel_event_record::user_defined_name, ast_cel_event_record::user_field, and ast_cel_event_record::version.

Referenced by load_config().

◆ reload()

static int reload ( void  )
static

Definition at line 397 of file cel_manager.c.

398{
399 return load_config(1);
400}

References load_config().

Referenced by load_config().

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 382 of file cel_manager.c.

383{
385 return 0;
386}

References ast_cel_backend_unregister(), and MANAGER_BACKEND_NAME.

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Asterisk Manager Interface CEL Backend" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .reload = reload, .load_pri = AST_MODPRI_CDR_DRIVER, .requires = "cel", }
static

Definition at line 409 of file cel_manager.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 409 of file cel_manager.c.

◆ cel_show_user_def

unsigned char cel_show_user_def
static

TRUE if we should set the EventName header to USER_DEFINED on user events.

Definition at line 239 of file cel_manager.c.

Referenced by load_config(), and manager_log().

◆ CONF_FILE

const char CONF_FILE[] = "cel.conf"
static

Definition at line 226 of file cel_manager.c.

Referenced by load_config().

◆ DATE_FORMAT

const char DATE_FORMAT[] = "%Y-%m-%d %T"
static

Definition at line 224 of file cel_manager.c.

Referenced by manager_log().

◆ enablecel

int enablecel
static

Definition at line 231 of file cel_manager.c.

Referenced by load_config(), and manager_log().