#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 = "ac1f6a56484a8820659555499174e588" , .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 150 of file app_forkcdr.c.
00150 { 00151 OPT_SETANS = (1 << 0), 00152 OPT_SETDISP = (1 << 1), 00153 OPT_RESETDEST = (1 << 2), 00154 OPT_ENDCDR = (1 << 3), 00155 OPT_NORESET = (1 << 4), 00156 OPT_KEEPVARS = (1 << 5), 00157 OPT_VARSET = (1 << 6), 00158 OPT_ANSLOCK = (1 << 7), 00159 OPT_DONTOUCH = (1 << 8), 00160 };
anonymous enum |
Definition at line 162 of file app_forkcdr.c.
00162 { 00163 OPT_ARG_VARSET = 0, 00164 /* note: this entry _MUST_ be the last one in the enum */ 00165 OPT_ARG_ARRAY_SIZE, 00166 };
static void __reg_module | ( | void | ) | [static] |
Definition at line 282 of file app_forkcdr.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 282 of file app_forkcdr.c.
static void ast_cdr_fork | ( | struct ast_channel * | chan, | |
struct ast_flags | optflags, | |||
char * | set | |||
) | [static] |
Definition at line 180 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.
00181 { 00182 struct ast_cdr *cdr; 00183 struct ast_cdr *newcdr; 00184 struct ast_flags flags = { AST_CDR_FLAG_KEEP_VARS }; 00185 00186 cdr = chan->cdr; 00187 00188 while (cdr->next) 00189 cdr = cdr->next; 00190 00191 if (!(newcdr = ast_cdr_dup_unique(cdr))) 00192 return; 00193 00194 /* 00195 * End the original CDR if requested BEFORE appending the new CDR 00196 * otherwise we incorrectly end the new CDR also. 00197 */ 00198 if (ast_test_flag(&optflags, OPT_ENDCDR)) { 00199 ast_cdr_end(cdr); 00200 } 00201 00202 ast_cdr_append(cdr, newcdr); 00203 00204 if (!ast_test_flag(&optflags, OPT_NORESET)) 00205 ast_cdr_reset(newcdr, &flags); 00206 00207 if (!ast_test_flag(cdr, AST_CDR_FLAG_KEEP_VARS)) 00208 ast_cdr_free_vars(cdr, 0); 00209 00210 if (!ast_strlen_zero(set)) { 00211 char *varname = ast_strdupa(set), *varval; 00212 varval = strchr(varname,'='); 00213 if (varval) { 00214 *varval = 0; 00215 varval++; 00216 ast_cdr_setvar(cdr, varname, varval, 0); 00217 } 00218 } 00219 00220 if (ast_test_flag(&optflags, OPT_SETANS) && !ast_tvzero(cdr->answer)) 00221 newcdr->answer = newcdr->start; 00222 00223 if (ast_test_flag(&optflags, OPT_SETDISP)) 00224 newcdr->disposition = cdr->disposition; 00225 00226 if (ast_test_flag(&optflags, OPT_RESETDEST)) 00227 newcdr->dstchannel[0] = 0; 00228 00229 if (ast_test_flag(&optflags, OPT_ANSLOCK)) 00230 ast_set_flag(cdr, AST_CDR_FLAG_ANSLOCKED); 00231 00232 if (ast_test_flag(&optflags, OPT_DONTOUCH)) 00233 ast_set_flag(cdr, AST_CDR_FLAG_DONT_TOUCH); 00234 00235 ast_set_flag(cdr, AST_CDR_FLAG_CHILD | AST_CDR_FLAG_LOCKED); 00236 }
static int forkcdr_exec | ( | struct ast_channel * | chan, | |
const char * | data | |||
) | [static] |
Definition at line 238 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().
00239 { 00240 int res = 0; 00241 char *argcopy = NULL; 00242 struct ast_flags flags = {0}; 00243 char *opts[OPT_ARG_ARRAY_SIZE]; 00244 AST_DECLARE_APP_ARGS(arglist, 00245 AST_APP_ARG(options); 00246 ); 00247 00248 if (!chan->cdr) { 00249 ast_log(LOG_WARNING, "Channel does not have a CDR\n"); 00250 return 0; 00251 } 00252 00253 argcopy = ast_strdupa(data); 00254 00255 AST_STANDARD_APP_ARGS(arglist, argcopy); 00256 00257 opts[OPT_ARG_VARSET] = 0; 00258 00259 if (!ast_strlen_zero(arglist.options)) 00260 ast_app_parse_options(forkcdr_exec_options, &flags, opts, arglist.options); 00261 00262 if (!ast_strlen_zero(data)) { 00263 int keepvars = ast_test_flag(&flags, OPT_KEEPVARS) ? 1 : 0; 00264 ast_set2_flag(chan->cdr, keepvars, AST_CDR_FLAG_KEEP_VARS); 00265 } 00266 00267 ast_cdr_fork(chan, flags, opts[OPT_ARG_VARSET]); 00268 00269 return res; 00270 }
static int load_module | ( | void | ) | [static] |
Definition at line 277 of file app_forkcdr.c.
References ast_register_application_xml, and forkcdr_exec().
00278 { 00279 return ast_register_application_xml(app, forkcdr_exec); 00280 }
static int unload_module | ( | void | ) | [static] |
Definition at line 272 of file app_forkcdr.c.
References ast_unregister_application().
00273 { 00274 return ast_unregister_application(app); 00275 }
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 = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 282 of file app_forkcdr.c.
char* app = "ForkCDR" [static] |
Definition at line 148 of file app_forkcdr.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 282 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 178 of file app_forkcdr.c.