#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) } |
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 |
Definition in file func_cdr.c.
anonymous enum |
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;
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 }
struct ast_custom_function cdr_function [static] |
enum { ... } cdr_option_flags |