#include "asterisk.h"
#include "asterisk/file.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/cdr.h"
#include "asterisk/app.h"
#include "asterisk/module.h"
Go to the source code of this file.
Enumerations | |
enum | { OPT_SETANS = (1 << 0), OPT_SETDISP = (1 << 1), OPT_RESETDEST = (1 << 2), OPT_ENDCDR = (1 << 3), OPT_NORESET = (1 << 4), OPT_KEEPVARS = (1 << 5), OPT_VARSET = (1 << 6), OPT_ANSLOCK = (1 << 7), OPT_DONTOUCH = (1 << 8) } |
enum | { OPT_ARG_VARSET = 0, OPT_ARG_ARRAY_SIZE } |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static void | ast_cdr_fork (struct ast_channel *chan, struct ast_flags optflags, char *set) |
static int | forkcdr_exec (struct ast_channel *chan, const char *data) |
static int | load_module (void) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Fork The CDR into 2 separate entities" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } |
static char * | app = "ForkCDR" |
static struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_app_option | forkcdr_exec_options [128] = { [ 'a' ] = { .flag = OPT_SETANS }, [ 'A' ] = { .flag = OPT_ANSLOCK }, [ 'd' ] = { .flag = OPT_SETDISP }, [ 'D' ] = { .flag = OPT_RESETDEST }, [ 'e' ] = { .flag = OPT_ENDCDR }, [ 'R' ] = { .flag = OPT_NORESET }, [ 's' ] = { .flag = OPT_VARSET , .arg_index = OPT_ARG_VARSET + 1 }, [ 'T' ] = { .flag = OPT_DONTOUCH }, [ 'v' ] = { .flag = OPT_KEEPVARS },} |
Definition in file app_forkcdr.c.
anonymous enum |
OPT_SETANS | |
OPT_SETDISP | |
OPT_RESETDEST | |
OPT_ENDCDR | |
OPT_NORESET | |
OPT_KEEPVARS | |
OPT_VARSET | |
OPT_ANSLOCK | |
OPT_DONTOUCH |
Definition at line 146 of file app_forkcdr.c.
00146 { 00147 OPT_SETANS = (1 << 0), 00148 OPT_SETDISP = (1 << 1), 00149 OPT_RESETDEST = (1 << 2), 00150 OPT_ENDCDR = (1 << 3), 00151 OPT_NORESET = (1 << 4), 00152 OPT_KEEPVARS = (1 << 5), 00153 OPT_VARSET = (1 << 6), 00154 OPT_ANSLOCK = (1 << 7), 00155 OPT_DONTOUCH = (1 << 8), 00156 };
anonymous enum |
Definition at line 158 of file app_forkcdr.c.
00158 { 00159 OPT_ARG_VARSET = 0, 00160 /* note: this entry _MUST_ be the last one in the enum */ 00161 OPT_ARG_ARRAY_SIZE, 00162 };
static void __reg_module | ( | void | ) | [static] |
Definition at line 273 of file app_forkcdr.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 273 of file app_forkcdr.c.
static void ast_cdr_fork | ( | struct ast_channel * | chan, | |
struct ast_flags | optflags, | |||
char * | set | |||
) | [static] |
Definition at line 176 of file app_forkcdr.c.
References ast_cdr_append(), ast_cdr_dup_unique(), ast_cdr_end(), AST_CDR_FLAG_ANSLOCKED, AST_CDR_FLAG_CHILD, AST_CDR_FLAG_DONT_TOUCH, AST_CDR_FLAG_KEEP_VARS, AST_CDR_FLAG_LOCKED, ast_cdr_free_vars(), ast_cdr_reset(), ast_cdr_setvar(), ast_set_flag, ast_strdupa, ast_strlen_zero(), ast_test_flag, ast_tvzero(), ast_channel::cdr, ast_flags::flags, ast_cdr::next, OPT_ANSLOCK, OPT_DONTOUCH, OPT_ENDCDR, OPT_NORESET, OPT_RESETDEST, OPT_SETANS, and OPT_SETDISP.
00177 { 00178 struct ast_cdr *cdr; 00179 struct ast_cdr *newcdr; 00180 struct ast_flags flags = { AST_CDR_FLAG_KEEP_VARS }; 00181 00182 cdr = chan->cdr; 00183 00184 while (cdr->next) 00185 cdr = cdr->next; 00186 00187 if (!(newcdr = ast_cdr_dup_unique(cdr))) 00188 return; 00189 00190 ast_cdr_append(cdr, newcdr); 00191 00192 if (!ast_test_flag(&optflags, OPT_NORESET)) 00193 ast_cdr_reset(newcdr, &flags); 00194 00195 if (!ast_test_flag(cdr, AST_CDR_FLAG_KEEP_VARS)) 00196 ast_cdr_free_vars(cdr, 0); 00197 00198 if (!ast_strlen_zero(set)) { 00199 char *varname = ast_strdupa(set), *varval; 00200 varval = strchr(varname,'='); 00201 if (varval) { 00202 *varval = 0; 00203 varval++; 00204 ast_cdr_setvar(cdr, varname, varval, 0); 00205 } 00206 } 00207 00208 if (ast_test_flag(&optflags, OPT_SETANS) && !ast_tvzero(cdr->answer)) 00209 newcdr->answer = newcdr->start; 00210 00211 if (ast_test_flag(&optflags, OPT_SETDISP)) 00212 newcdr->disposition = cdr->disposition; 00213 00214 if (ast_test_flag(&optflags, OPT_RESETDEST)) 00215 newcdr->dstchannel[0] = 0; 00216 00217 if (ast_test_flag(&optflags, OPT_ENDCDR)) 00218 ast_cdr_end(cdr); 00219 00220 if (ast_test_flag(&optflags, OPT_ANSLOCK)) 00221 ast_set_flag(cdr, AST_CDR_FLAG_ANSLOCKED); 00222 00223 if (ast_test_flag(&optflags, OPT_DONTOUCH)) 00224 ast_set_flag(cdr, AST_CDR_FLAG_DONT_TOUCH); 00225 00226 ast_set_flag(cdr, AST_CDR_FLAG_CHILD | AST_CDR_FLAG_LOCKED); 00227 }
static int forkcdr_exec | ( | struct ast_channel * | chan, | |
const char * | data | |||
) | [static] |
Definition at line 229 of file app_forkcdr.c.
References AST_APP_ARG, AST_DECLARE_APP_ARGS, ast_log(), ast_channel::cdr, ast_flags::flags, LOG_WARNING, and OPT_ARG_ARRAY_SIZE.
Referenced by load_module().
00230 { 00231 int res = 0; 00232 char *argcopy = NULL; 00233 struct ast_flags flags = {0}; 00234 char *opts[OPT_ARG_ARRAY_SIZE]; 00235 AST_DECLARE_APP_ARGS(arglist, 00236 AST_APP_ARG(options); 00237 ); 00238 00239 if (!chan->cdr) { 00240 ast_log(LOG_WARNING, "Channel does not have a CDR\n"); 00241 return 0; 00242 } 00243 00244 argcopy = ast_strdupa(data); 00245 00246 AST_STANDARD_APP_ARGS(arglist, argcopy); 00247 00248 opts[OPT_ARG_VARSET] = 0; 00249 00250 if (!ast_strlen_zero(arglist.options)) 00251 ast_app_parse_options(forkcdr_exec_options, &flags, opts, arglist.options); 00252 00253 if (!ast_strlen_zero(data)) { 00254 int keepvars = ast_test_flag(&flags, OPT_KEEPVARS) ? 1 : 0; 00255 ast_set2_flag(chan->cdr, keepvars, AST_CDR_FLAG_KEEP_VARS); 00256 } 00257 00258 ast_cdr_fork(chan, flags, opts[OPT_ARG_VARSET]); 00259 00260 return res; 00261 }
static int load_module | ( | void | ) | [static] |
Definition at line 268 of file app_forkcdr.c.
References ast_register_application_xml, and forkcdr_exec().
00269 { 00270 return ast_register_application_xml(app, forkcdr_exec); 00271 }
static int unload_module | ( | void | ) | [static] |
Definition at line 263 of file app_forkcdr.c.
References ast_unregister_application().
00264 { 00265 return ast_unregister_application(app); 00266 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Fork The CDR into 2 separate entities" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "8586c2a7d357cb591cc3a6607a8f62d1" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 273 of file app_forkcdr.c.
char* app = "ForkCDR" [static] |
Definition at line 144 of file app_forkcdr.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 273 of file app_forkcdr.c.
struct ast_app_option forkcdr_exec_options[128] = { [ 'a' ] = { .flag = OPT_SETANS }, [ 'A' ] = { .flag = OPT_ANSLOCK }, [ 'd' ] = { .flag = OPT_SETDISP }, [ 'D' ] = { .flag = OPT_RESETDEST }, [ 'e' ] = { .flag = OPT_ENDCDR }, [ 'R' ] = { .flag = OPT_NORESET }, [ 's' ] = { .flag = OPT_VARSET , .arg_index = OPT_ARG_VARSET + 1 }, [ 'T' ] = { .flag = OPT_DONTOUCH }, [ 'v' ] = { .flag = OPT_KEEPVARS },} [static] |
Definition at line 174 of file app_forkcdr.c.