Mon Nov 24 15:34:38 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"

Go to the source code of this file.

Enumerations

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

Functions

 AST_APP_OPTIONS (cdr_func_options,{AST_APP_OPTION('l', OPT_LAST), AST_APP_OPTION('r', OPT_RECURSIVE), AST_APP_OPTION('s', OPT_SKIPLOCKED), 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 
OPT_SKIPLOCKED 

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    OPT_SKIPLOCKED = (1 << 3),
00048 } 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 57 of file func_cdr.c.

References AST_APP_ARG, ast_app_parse_options(), AST_CDR_FLAG_LOCKED, 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, OPT_SKIPLOCKED, and OPT_UNPARSED.

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

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

Definition at line 94 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, ast_cdr::next, OPT_LAST, and OPT_RECURSIVE.

00096 {
00097    struct ast_cdr *cdr = chan ? chan->cdr : NULL;
00098    struct ast_flags flags = { 0 };
00099    AST_DECLARE_APP_ARGS(args,
00100               AST_APP_ARG(variable);
00101               AST_APP_ARG(options);
00102    );
00103 
00104    if (ast_strlen_zero(parse) || !value || !chan)
00105       return -1;
00106 
00107    if (!cdr)
00108       return -1;
00109 
00110    AST_STANDARD_APP_ARGS(args, parse);
00111 
00112    if (!ast_strlen_zero(args.options))
00113       ast_app_parse_options(cdr_func_options, &flags, NULL, args.options);
00114 
00115    if (ast_test_flag(&flags, OPT_LAST))
00116       while (cdr->next)
00117          cdr = cdr->next;
00118 
00119    if (!strcasecmp(args.variable, "accountcode"))  /* the 'l' flag doesn't apply to setting the accountcode, userfield, or amaflags */
00120       ast_cdr_setaccount(chan, value);
00121    else if (!strcasecmp(args.variable, "userfield"))
00122       ast_cdr_setuserfield(chan, value);
00123    else if (!strcasecmp(args.variable, "amaflags"))
00124       ast_cdr_setamaflags(chan, value);
00125    else
00126       ast_cdr_setvar(cdr, args.variable, value, ast_test_flag(&flags, OPT_RECURSIVE));
00127       /* No need to worry about the u flag, as all fields for which setting
00128        * 'u' would do anything are marked as readonly. */
00129 
00130    return 0;
00131 }

static int load_module ( void   )  [static]

Definition at line 180 of file func_cdr.c.

References ast_custom_function_register(), and cdr_function.

00181 {
00182    return ast_custom_function_register(&cdr_function);
00183 }

static int unload_module ( void   )  [static]

Definition at line 175 of file func_cdr.c.

References ast_custom_function_unregister(), and cdr_function.

00176 {
00177    return ast_custom_function_unregister(&cdr_function);
00178 }


Variable Documentation

struct ast_custom_function cdr_function [static]

Definition at line 133 of file func_cdr.c.

Referenced by load_module(), and unload_module().

enum { ... } cdr_option_flags


Generated on Mon Nov 24 15:34:38 2008 for Asterisk - the Open Source PBX by  doxygen 1.4.7