#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 |
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 OPT_SKIPLOCKED = (1 << 3), 00048 } 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 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 }
struct ast_custom_function cdr_function [static] |
enum { ... } cdr_option_flags |