Sat Mar 10 01:54:32 2012

Asterisk developer's documentation


app_forkcdr.c File Reference

Fork CDR application. More...

#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 = "88eaa8f5c1bd988bedd71113385e0886" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, }
static char * app = "ForkCDR"
static struct ast_module_infoast_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 },}


Detailed Description

Fork CDR application.

Author:
Anthony Minessale anthmct@yahoo.com
Note:
Development of this app Sponsored/Funded by TAAN Softworks Corp

Definition in file app_forkcdr.c.


Enumeration Type Documentation

anonymous enum

Enumerator:
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

Enumerator:
OPT_ARG_VARSET 
OPT_ARG_ARRAY_SIZE 

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 };


Function Documentation

static void __reg_module ( void   )  [static]

Definition at line 277 of file app_forkcdr.c.

static void __unreg_module ( void   )  [static]

Definition at line 277 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    ast_cdr_append(cdr, newcdr);
00195 
00196    if (!ast_test_flag(&optflags, OPT_NORESET))
00197       ast_cdr_reset(newcdr, &flags);
00198       
00199    if (!ast_test_flag(cdr, AST_CDR_FLAG_KEEP_VARS))
00200       ast_cdr_free_vars(cdr, 0);
00201    
00202    if (!ast_strlen_zero(set)) {
00203       char *varname = ast_strdupa(set), *varval;
00204       varval = strchr(varname,'=');
00205       if (varval) {
00206          *varval = 0;
00207          varval++;
00208          ast_cdr_setvar(cdr, varname, varval, 0);
00209       }
00210    }
00211    
00212    if (ast_test_flag(&optflags, OPT_SETANS) && !ast_tvzero(cdr->answer))
00213       newcdr->answer = newcdr->start;
00214 
00215    if (ast_test_flag(&optflags, OPT_SETDISP))
00216       newcdr->disposition = cdr->disposition;
00217    
00218    if (ast_test_flag(&optflags, OPT_RESETDEST))
00219       newcdr->dstchannel[0] = 0;
00220    
00221    if (ast_test_flag(&optflags, OPT_ENDCDR))
00222       ast_cdr_end(cdr);
00223 
00224    if (ast_test_flag(&optflags, OPT_ANSLOCK))
00225       ast_set_flag(cdr, AST_CDR_FLAG_ANSLOCKED);
00226    
00227    if (ast_test_flag(&optflags, OPT_DONTOUCH))
00228       ast_set_flag(cdr, AST_CDR_FLAG_DONT_TOUCH);
00229       
00230    ast_set_flag(cdr, AST_CDR_FLAG_CHILD | AST_CDR_FLAG_LOCKED);
00231 }

static int forkcdr_exec ( struct ast_channel chan,
const char *  data 
) [static]

Definition at line 233 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().

00234 {
00235    int res = 0;
00236    char *argcopy = NULL;
00237    struct ast_flags flags = {0};
00238    char *opts[OPT_ARG_ARRAY_SIZE];
00239    AST_DECLARE_APP_ARGS(arglist,
00240       AST_APP_ARG(options);
00241    );
00242 
00243    if (!chan->cdr) {
00244       ast_log(LOG_WARNING, "Channel does not have a CDR\n");
00245       return 0;
00246    }
00247 
00248    argcopy = ast_strdupa(data);
00249 
00250    AST_STANDARD_APP_ARGS(arglist, argcopy);
00251 
00252    opts[OPT_ARG_VARSET] = 0;
00253 
00254    if (!ast_strlen_zero(arglist.options))
00255       ast_app_parse_options(forkcdr_exec_options, &flags, opts, arglist.options);
00256 
00257    if (!ast_strlen_zero(data)) {
00258       int keepvars = ast_test_flag(&flags, OPT_KEEPVARS) ? 1 : 0;
00259       ast_set2_flag(chan->cdr, keepvars, AST_CDR_FLAG_KEEP_VARS);
00260    }
00261    
00262    ast_cdr_fork(chan, flags, opts[OPT_ARG_VARSET]);
00263 
00264    return res;
00265 }

static int load_module ( void   )  [static]

Definition at line 272 of file app_forkcdr.c.

References ast_register_application_xml, and forkcdr_exec().

00273 {
00274    return ast_register_application_xml(app, forkcdr_exec);
00275 }

static int unload_module ( void   )  [static]

Definition at line 267 of file app_forkcdr.c.

References ast_unregister_application().

00268 {
00269    return ast_unregister_application(app);
00270 }


Variable Documentation

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 = "88eaa8f5c1bd988bedd71113385e0886" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static]

Definition at line 277 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 277 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.


Generated on Sat Mar 10 01:54:32 2012 for Asterisk - The Open Source Telephony Project by  doxygen 1.4.7