Sat Jul 26 06:14:11 2008

Asterisk developer's documentation


func_cdr.c File Reference

Call Detail Record related dialplan functions. More...

#include "asterisk.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/logger.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
#include "asterisk/cdr.h"

Include dependency graph for func_cdr.c:

Go to the source code of this file.

Enumerations

enum  { OPT_RECURSIVE = (1 << 0), OPT_UNPARSED = (1 << 1), OPT_LAST = (1 << 2) }

Functions

 AST_APP_OPTIONS (cdr_func_options,{AST_APP_OPTION('l', OPT_LAST), AST_APP_OPTION('r', OPT_RECURSIVE), AST_APP_OPTION('u', OPT_UNPARSED),})
 AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"CDR dialplan function")
static int cdr_read (struct ast_channel *chan, char *cmd, char *parse, char *buf, size_t len)
static int cdr_write (struct ast_channel *chan, char *cmd, char *parse, const char *value)
static int load_module (void)
static int unload_module (void)

Variables

static struct ast_custom_function cdr_function
enum { ... }  cdr_option_flags


Detailed Description

Call Detail Record related dialplan functions.

Author:
Anthony Minessale II

Definition in file func_cdr.c.


Enumeration Type Documentation

anonymous enum

Enumerator:
OPT_RECURSIVE 
OPT_UNPARSED 
OPT_LAST 

Definition at line 43 of file func_cdr.c.

00043      {
00044    OPT_RECURSIVE = (1 << 0),
00045    OPT_UNPARSED = (1 << 1),
00046    OPT_LAST = (1 << 2),
00047 } cdr_option_flags;


Function Documentation

AST_APP_OPTIONS ( cdr_func_options   ) 

AST_MODULE_INFO_STANDARD ( ASTERISK_GPL_KEY  ,
"CDR dialplan function"   
)

static int cdr_read ( struct ast_channel chan,
char *  cmd,
char *  parse,
char *  buf,
size_t  len 
) [static]

Definition at line 55 of file func_cdr.c.

References AST_APP_ARG, ast_app_parse_options(), ast_cdr_getvar(), AST_DECLARE_APP_ARGS, AST_STANDARD_APP_ARGS, ast_strlen_zero(), ast_test_flag, ast_channel::cdr, ast_cdr::flags, ast_flags::flags, ast_cdr::next, OPT_LAST, OPT_RECURSIVE, and OPT_UNPARSED.

00057 {
00058    char *ret;
00059    struct ast_flags flags = { 0 };
00060    struct ast_cdr *cdr = chan ? chan->cdr : NULL;
00061    AST_DECLARE_APP_ARGS(args,
00062               AST_APP_ARG(variable);
00063               AST_APP_ARG(options);
00064    );
00065 
00066    if (ast_strlen_zero(parse))
00067       return -1;
00068 
00069    if (!cdr)
00070       return -1;
00071 
00072    AST_STANDARD_APP_ARGS(args, parse);
00073 
00074    if (!ast_strlen_zero(args.options))
00075       ast_app_parse_options(cdr_func_options, &flags, NULL, args.options);
00076 
00077    if (ast_test_flag(&flags, OPT_LAST))
00078       while (cdr->next)
00079          cdr = cdr->next;
00080 
00081    ast_cdr_getvar(cdr, args.variable, &ret, buf, len,
00082              ast_test_flag(&flags, OPT_RECURSIVE),
00083             ast_test_flag(&flags, OPT_UNPARSED));
00084 
00085    return 0;
00086 }

static int cdr_write ( struct ast_channel chan,
char *  cmd,
char *  parse,
const char *  value 
) [static]

Definition at line 88 of file func_cdr.c.

References AST_APP_ARG, ast_app_parse_options(), ast_cdr_setaccount(), ast_cdr_setamaflags(), ast_cdr_setuserfield(), ast_cdr_setvar(), AST_DECLARE_APP_ARGS, AST_STANDARD_APP_ARGS, ast_strlen_zero(), ast_test_flag, ast_channel::cdr, ast_flags::flags, and OPT_RECURSIVE.

00090 {
00091    struct ast_flags flags = { 0 };
00092    AST_DECLARE_APP_ARGS(args,
00093               AST_APP_ARG(variable);
00094               AST_APP_ARG(options);
00095    );
00096 
00097    if (ast_strlen_zero(parse) || !value || !chan)
00098       return -1;
00099 
00100    AST_STANDARD_APP_ARGS(args, parse);
00101 
00102    if (!ast_strlen_zero(args.options))
00103       ast_app_parse_options(cdr_func_options, &flags, NULL, args.options);
00104 
00105    if (!strcasecmp(args.variable, "accountcode"))
00106       ast_cdr_setaccount(chan, value);
00107    else if (!strcasecmp(args.variable, "userfield"))
00108       ast_cdr_setuserfield(chan, value);
00109    else if (!strcasecmp(args.variable, "amaflags"))
00110       ast_cdr_setamaflags(chan, value);
00111    else if (chan->cdr)
00112       ast_cdr_setvar(chan->cdr, args.variable, value, ast_test_flag(&flags, OPT_RECURSIVE));
00113       /* No need to worry about the u flag, as all fields for which setting
00114        * 'u' would do anything are marked as readonly. */
00115 
00116    return 0;
00117 }

static int load_module ( void   )  [static]

Definition at line 162 of file func_cdr.c.

References ast_custom_function_register(), and cdr_function.

00163 {
00164    return ast_custom_function_register(&cdr_function);
00165 }

static int unload_module ( void   )  [static]

Definition at line 157 of file func_cdr.c.

References ast_custom_function_unregister(), and cdr_function.

00158 {
00159    return ast_custom_function_unregister(&cdr_function);
00160 }


Variable Documentation

struct ast_custom_function cdr_function [static]

Definition at line 119 of file func_cdr.c.

Referenced by load_module(), and unload_module().

enum { ... } cdr_option_flags


Generated on Sat Jul 26 06:14:11 2008 for Asterisk - the Open Source PBX by  doxygen 1.5.1