clean up file headers
[asterisk/asterisk.git] / funcs / func_cdr.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Call Detail Record related dialplan functions
5  * 
6  * Copyright (C) 2005, Digium, Inc.
7  * Portions Copyright (C) 2005, Anthony Minessale II
8  *
9  * This program is free software, distributed under the terms of
10  * the GNU General Public License
11  */
12
13 #include <stdlib.h>
14 #include <string.h>
15 #include <sys/types.h>
16
17 #include "asterisk/channel.h"
18 #include "asterisk/pbx.h"
19 #include "asterisk/logger.h"
20 #include "asterisk/utils.h"
21 #include "asterisk/app.h"
22 #include "asterisk/cdr.h"
23
24 static char *builtin_function_cdr_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
25 {
26         char *ret;
27         char *mydata;
28         int argc;
29         char *argv[2];
30         int recursive = 0;
31
32         if (!data || ast_strlen_zero(data))
33                 return NULL;
34         
35         if (!chan->cdr)
36                 return NULL;
37
38         mydata = ast_strdupa(data);
39         argc = ast_separate_app_args(mydata, '|', argv, sizeof(argv) / sizeof(argv[0]));
40
41         /* check for a trailing flags argument */
42         if (argc > 1) {
43                 argc--;
44                 if (strchr(argv[argc], 'r'))
45                         recursive = 1;
46         }
47
48         ast_cdr_getvar(chan->cdr, argv[0], &ret, buf, len, recursive);
49
50         return ret;
51 }
52
53 static void builtin_function_cdr_write(struct ast_channel *chan, char *cmd, char *data, const char *value) 
54 {
55         char *mydata;
56         int argc;
57         char *argv[2];
58         int recursive = 0;
59
60         if (!data || ast_strlen_zero(data) || !value)
61                 return;
62         
63         if (!chan->cdr)
64                 return;
65
66         mydata = ast_strdupa(data);
67         argc = ast_separate_app_args(mydata, '|', argv, sizeof(argv) / sizeof(argv[0]));
68
69         /* check for a trailing flags argument */
70         if (argc > 1) {
71                 argc--;
72                 if (strchr(argv[argc], 'r'))
73                         recursive = 1;
74         }
75
76         ast_cdr_setvar(chan->cdr, argv[0], value, recursive);
77 }
78
79 #ifndef BUILTIN_FUNC
80 static
81 #endif
82 struct ast_custom_function cdr_function = {
83         .name = "CDR",
84         .synopsis = "Gets or sets a CDR variable",
85         .desc= "Option 'r' searches the entire stack of CDRs on the channel\n",
86         .syntax = "CDR(<name>[|options])",
87         .read = builtin_function_cdr_read,
88         .write = builtin_function_cdr_write,
89 };
90