Wed Apr 6 11:29:49 2011

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 = "8586c2a7d357cb591cc3a6607a8f62d1" , .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 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

Enumerator:
OPT_ARG_VARSET 
OPT_ARG_ARRAY_SIZE 

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


Function Documentation

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 }


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 = "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.


Generated on Wed Apr 6 11:29:49 2011 for Asterisk - The Open Source Telephony Project by  doxygen 1.4.7