Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals

cdr.h File Reference

#include <asterisk/channel.h>
#include <sys/time.h>

Go to the source code of this file.

Data Structures

struct  ast_cdr
 Responsible for call detail data. More...


Defines

#define AST_CDR_NOANSWER   (1 << 0)
#define AST_CDR_BUSY   (1 << 1)
#define AST_CDR_ANSWERED   (1 << 2)
#define AST_CDR_OMIT   (1)
 AMA Flags.

#define AST_CDR_BILLING   (2)
#define AST_CDR_DOCUMENTATION   (3)

Typedefs

typedef int(* ast_cdrbe )(struct ast_cdr *cdr)

Functions

ast_cdrast_cdr_alloc (void)
 Allocate a record.

void ast_cdr_free (struct ast_cdr *cdr)
 Free a record.

int ast_cdr_init (struct ast_cdr *cdr, struct ast_channel *chan)
 Initialize based on a channel.

int ast_cdr_setcid (struct ast_cdr *cdr, struct ast_channel *chan)
 Initialize based on a channel.

int ast_cdr_register (char *name, char *desc, ast_cdrbe be)
 Register a CDR handling engine.

void ast_cdr_unregister (char *name)
 Unregister a CDR handling engine.

void ast_cdr_start (struct ast_cdr *cdr)
 Start a call.

void ast_cdr_answer (struct ast_cdr *cdr)
 Answer a call.

void ast_cdr_busy (struct ast_cdr *cdr)
 Busy a call.

void ast_cdr_end (struct ast_cdr *cdr)
 End a call.

void ast_cdr_post (struct ast_cdr *cdr)
 Post the detail record.

void ast_cdr_setdestchan (struct ast_cdr *cdr, char *chan)
 Set the destination channel, if there was one.

void ast_cdr_setapp (struct ast_cdr *cdr, char *app, char *data)
 Set the last executed application.

int ast_cdr_amaflags2int (char *flag)
 Convert a string to a detail record AMA flag.

char * ast_cdr_disp2str (int disposition)
 Disposition to a string.

void ast_cdr_reset (struct ast_cdr *cdr, int post)
 Reset the detail record, optionally posting it first.

char * ast_cdr_flags2str (int flags)
 Flags to a string.

int ast_cdr_setaccount (struct ast_channel *chan, char *account)
int ast_cdr_update (struct ast_channel *chan)

Variables

int ast_default_amaflags
char ast_default_accountcode [20]


Define Documentation

#define AST_CDR_ANSWERED   (1 << 2)
 

Definition at line 25 of file cdr.h.

Referenced by ast_cdr_answer(), ast_cdr_disp2str(), and ast_cdr_init().

#define AST_CDR_BILLING   (2)
 

Definition at line 29 of file cdr.h.

Referenced by ast_cdr_amaflags2int(), and ast_cdr_flags2str().

#define AST_CDR_BUSY   (1 << 1)
 

Definition at line 24 of file cdr.h.

Referenced by ast_cdr_busy(), and ast_cdr_disp2str().

#define AST_CDR_DOCUMENTATION   (3)
 

Definition at line 30 of file cdr.h.

Referenced by ast_cdr_amaflags2int(), and ast_cdr_flags2str().

#define AST_CDR_NOANSWER   (1 << 0)
 

Definition at line 23 of file cdr.h.

Referenced by ast_cdr_disp2str(), ast_cdr_init(), and ast_cdr_reset().

#define AST_CDR_OMIT   (1)
 

AMA Flags.

Definition at line 28 of file cdr.h.

Referenced by ast_cdr_amaflags2int(), and ast_cdr_flags2str().


Typedef Documentation

typedef int(* ast_cdrbe)(struct ast_cdr *cdr)
 

Definition at line 74 of file cdr.h.

Referenced by ast_cdr_register().


Function Documentation

struct ast_cdr* ast_cdr_alloc void   ) 
 

Allocate a record.

Returns a malloc'd ast_cdr structure, returns NULL on error (malloc failure)

Definition at line 116 of file cdr.c.

References malloc.

Referenced by ast_pbx_run().

00117 {
00118    struct ast_cdr *cdr;
00119    cdr = malloc(sizeof(struct ast_cdr));
00120    if (cdr) {
00121       memset(cdr, 0, sizeof(struct ast_cdr));
00122    }
00123    return cdr;
00124 }

int ast_cdr_amaflags2int char *  flag  ) 
 

Convert a string to a detail record AMA flag.

Parameters:
flag string form of flag Converts the string form of the flag to the binary form. Returns the binary form of the flag

Definition at line 339 of file cdr.c.

References AST_CDR_BILLING, AST_CDR_DOCUMENTATION, and AST_CDR_OMIT.

00340 {
00341    if (!strcasecmp(flag, "default"))
00342       return 0;
00343    if (!strcasecmp(flag, "omit"))
00344       return AST_CDR_OMIT;
00345    if (!strcasecmp(flag, "billing"))
00346       return AST_CDR_BILLING;
00347    if (!strcasecmp(flag, "documentation"))
00348       return AST_CDR_DOCUMENTATION;
00349    return -1;
00350 }

void ast_cdr_answer struct ast_cdr cdr  ) 
 

Answer a call.

Parameters:
cdr the cdr you wish to associate with the call Starts all CDR stuff necessary for doing CDR when answering a call

Definition at line 139 of file cdr.c.

References ast_cdr::answer, AST_CDR_ANSWERED, ast_log(), ast_cdr::channel, ast_cdr::disposition, LOG_WARNING, and ast_cdr::posted.

Referenced by ast_answer(), and ast_read().

00140 {
00141    char *chan; 
00142    if (cdr) {
00143       chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
00144       if (cdr->posted)
00145          ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan);
00146       if (cdr->disposition < AST_CDR_ANSWERED)
00147          cdr->disposition = AST_CDR_ANSWERED;
00148       if (!cdr->answer.tv_sec && !cdr->answer.tv_usec) {
00149          gettimeofday(&cdr->answer, NULL);
00150       }
00151    }
00152 }

void ast_cdr_busy struct ast_cdr cdr  ) 
 

Busy a call.

Parameters:
cdr the cdr you wish to associate with the call Returns nothing important

Definition at line 154 of file cdr.c.

References AST_CDR_BUSY, ast_log(), ast_cdr::channel, ast_cdr::disposition, LOG_WARNING, and ast_cdr::posted.

00155 {
00156    char *chan; 
00157    if (cdr) {
00158       chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
00159       if (cdr->posted)
00160          ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan);
00161       if (cdr->disposition < AST_CDR_BUSY)
00162          cdr->disposition = AST_CDR_BUSY;
00163    }
00164 }

char* ast_cdr_disp2str int  disposition  ) 
 

Disposition to a string.

Parameters:
flag input binary form Converts the binary form of a disposition to string form. Returns a pointer to the string form

Definition at line 273 of file cdr.c.

References AST_CDR_ANSWERED, AST_CDR_BUSY, and AST_CDR_NOANSWER.

00274 {
00275    switch (disposition) {
00276    case AST_CDR_NOANSWER:
00277       return "NO ANSWER";
00278    case AST_CDR_BUSY:
00279       return "BUSY";    
00280    case AST_CDR_ANSWERED:
00281       return "ANSWERED";
00282    default:
00283       return "UNKNOWN";
00284    }
00285 }

void ast_cdr_end struct ast_cdr cdr  ) 
 

End a call.

Parameters:
cdr the cdr you have associated the call with Registers the end of call time in the cdr structure. Returns nothing important

Definition at line 259 of file cdr.c.

References ast_log(), ast_cdr::channel, ast_cdr::end, LOG_WARNING, ast_cdr::posted, and ast_cdr::start.

Referenced by ast_cdr_reset(), ast_hangup(), and ast_read().

00260 {
00261    char *chan;
00262    if (cdr) {
00263       chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
00264       if (cdr->posted)
00265          ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan);
00266       if (!cdr->start.tv_sec && !cdr->start.tv_usec)
00267          ast_log(LOG_WARNING, "CDR on channel '%s' has not started\n", chan);
00268       if (!cdr->end.tv_sec && !cdr->end.tv_usec) 
00269          gettimeofday(&cdr->end, NULL);
00270    }
00271 }

char* ast_cdr_flags2str int  flags  ) 
 

Flags to a string.

Parameters:
flags binary flag Converts binary flags to string flags Returns string with flag name

Definition at line 287 of file cdr.c.

References AST_CDR_BILLING, AST_CDR_DOCUMENTATION, and AST_CDR_OMIT.

00288 {
00289    switch(flag) {
00290    case AST_CDR_OMIT:
00291       return "OMIT";
00292    case AST_CDR_BILLING:
00293       return "BILLING";
00294    case AST_CDR_DOCUMENTATION:
00295       return "DOCUMENTATION";
00296    }
00297    return "Unknown";
00298 }

void ast_cdr_free struct ast_cdr cdr  ) 
 

Free a record.

Definition at line 101 of file cdr.c.

References ast_log(), ast_cdr::channel, ast_cdr::end, free, LOG_WARNING, ast_cdr::posted, and ast_cdr::start.

Referenced by ast_hangup().

00102 {
00103    char *chan; 
00104    if (cdr) {
00105       chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
00106       if (!cdr->posted)
00107          ast_log(LOG_WARNING, "CDR on channel '%s' not posted\n", chan);
00108       if (!cdr->end.tv_sec && !cdr->end.tv_usec)
00109          ast_log(LOG_WARNING, "CDR on channel '%s' lacks end\n", chan);
00110       if (!cdr->start.tv_sec && !cdr->start.tv_usec)
00111          ast_log(LOG_WARNING, "CDR on channel '%s' lacks start\n", chan);
00112       free(cdr);
00113    }
00114 }

int ast_cdr_init struct ast_cdr cdr,
struct ast_channel chan
 

Initialize based on a channel.

Parameters:
cdr Call Detail Record to use for channel
chan Channel to bind CDR with Initializes a CDR and associates it with a particular channel Return is negligible. (returns 0 by default)

Definition at line 216 of file cdr.c.

References ast_channel::_state, ast_channel::accountcode, ast_cdr::accountcode, ast_cdr::amaflags, ast_channel::amaflags, ast_channel::ani, ast_callerid_parse(), AST_CDR_ANSWERED, AST_CDR_NOANSWER, ast_default_amaflags, ast_log(), AST_MAX_EXTENSION, ast_shrink_phone_number(), AST_STATE_UP, ast_channel::callerid, ast_cdr::channel, ast_cdr::clid, ast_channel::context, ast_cdr::dcontext, ast_cdr::disposition, ast_cdr::dst, ast_channel::exten, LOG_WARNING, ast_channel::name, ast_cdr::src, ast_channel::uniqueid, and ast_cdr::uniqueid.

Referenced by ast_pbx_run().

00217 {
00218    char *chan;
00219    char *num, *name;
00220    char tmp[AST_MAX_EXTENSION] = "";
00221    if (cdr) {
00222       chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
00223       if (strlen(cdr->channel)) 
00224          ast_log(LOG_WARNING, "CDR already initialized on '%s'\n", chan); 
00225       strncpy(cdr->channel, c->name, sizeof(cdr->channel) - 1);
00226       /* Grab source from ANI or normal Caller*ID */
00227       if (c->ani)
00228          strncpy(tmp, c->ani, sizeof(tmp) - 1);
00229       else if (c->callerid)
00230          strncpy(tmp, c->callerid, sizeof(tmp) - 1);
00231       if (c->callerid)
00232          strncpy(cdr->clid, c->callerid, sizeof(cdr->clid) - 1);
00233       name = NULL;
00234       num = NULL;
00235       ast_callerid_parse(tmp, &name, &num);
00236       if (num) {
00237          ast_shrink_phone_number(num);
00238          strncpy(cdr->src, num, sizeof(cdr->src) - 1);
00239       }
00240       
00241       if (c->_state == AST_STATE_UP)
00242          cdr->disposition = AST_CDR_ANSWERED;
00243       else
00244          cdr->disposition = AST_CDR_NOANSWER;
00245       if (c->amaflags)
00246          cdr->amaflags = c->amaflags;
00247       else
00248          cdr->amaflags = ast_default_amaflags;
00249       strncpy(cdr->accountcode, c->accountcode, sizeof(cdr->accountcode) - 1);
00250       /* Destination information */
00251       strncpy(cdr->dst, c->exten, sizeof(cdr->dst) - 1);
00252       strncpy(cdr->dcontext, c->context, sizeof(cdr->dcontext) - 1);
00253       /* Unique call identifier */
00254       strncpy(cdr->uniqueid, c->uniqueid, sizeof(cdr->uniqueid) - 1);
00255    }
00256    return 0;
00257 }

void ast_cdr_post struct ast_cdr cdr  ) 
 

Post the detail record.

Parameters:
cdr Which cdr to post Actually outputs the CDR record to the CDR plugins installed Returns nothing

Definition at line 352 of file cdr.c.

References ast_cdr::answer, ast_log(), ast_mutex_lock, ast_mutex_unlock, ast_cdr::billsec, ast_cdr::channel, ast_cdr::duration, ast_cdr::end, LOG_WARNING, ast_cdr::posted, and ast_cdr::start.

Referenced by ast_cdr_reset(), and ast_hangup().

00353 {
00354    char *chan;
00355    struct ast_cdr_beitem *i;
00356    if (cdr) {
00357       chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
00358       if (cdr->posted)
00359          ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan);
00360       if (!cdr->end.tv_sec && !cdr->end.tv_usec)
00361          ast_log(LOG_WARNING, "CDR on channel '%s' lacks end\n", chan);
00362       if (!cdr->start.tv_sec && !cdr->start.tv_usec)
00363          ast_log(LOG_WARNING, "CDR on channel '%s' lacks start\n", chan);
00364       cdr->duration = cdr->end.tv_sec - cdr->start.tv_sec + (cdr->end.tv_usec - cdr->start.tv_usec) / 1000000;
00365       if (cdr->answer.tv_sec || cdr->answer.tv_usec) {
00366          cdr->billsec = cdr->end.tv_sec - cdr->answer.tv_sec + (cdr->end.tv_usec - cdr->answer.tv_usec) / 1000000;
00367       } else
00368          cdr->billsec = 0;
00369       cdr->posted = 1;
00370       ast_mutex_lock(&cdrlock);
00371       i = bes;
00372       while(i) {
00373          i->be(cdr);
00374          i = i->next;
00375       }
00376       ast_mutex_unlock(&cdrlock);
00377    }
00378 }

int ast_cdr_register char *  name,
char *  desc,
ast_cdrbe  be
 

Register a CDR handling engine.

Parameters:
name name associated with the particular CDR handler
desc description of the CDR handler
be function pointer to a CDR handler Used to register a Call Detail Record handler. Returns -1 on error, 0 on success.

Definition at line 46 of file cdr.c.

References ast_cdrbe, ast_log(), ast_mutex_lock, ast_mutex_unlock, LOG_WARNING, and malloc.

00047 {
00048    struct ast_cdr_beitem *i;
00049    if (!name)
00050       return -1;
00051    if (!be) {
00052       ast_log(LOG_WARNING, "CDR engine '%s' lacks backend\n", name);
00053       return -1;
00054    }
00055    ast_mutex_lock(&cdrlock);
00056    i = bes;
00057    while(i) {
00058       if (!strcasecmp(name, i->name))
00059          break;
00060       i = i->next;
00061    }
00062    ast_mutex_unlock(&cdrlock);
00063    if (i) {
00064       ast_log(LOG_WARNING, "Already have a CDR backend called '%s'\n", name);
00065       return -1;
00066    }
00067    i = malloc(sizeof(struct ast_cdr_beitem));
00068    if (!i)  
00069       return -1;
00070    memset(i, 0, sizeof(struct ast_cdr_beitem));
00071    strncpy(i->name, name, sizeof(i->name) - 1);
00072    strncpy(i->desc, desc, sizeof(i->desc) - 1);
00073    i->be = be;
00074    ast_mutex_lock(&cdrlock);
00075    i->next = bes;
00076    bes = i;
00077    ast_mutex_unlock(&cdrlock);
00078    return 0;
00079 }

void ast_cdr_reset struct ast_cdr cdr,
int  post
 

Reset the detail record, optionally posting it first.

Parameters:
cdr which cdr to act upon
post whether or not to post the cdr first before resetting it

Definition at line 380 of file cdr.c.

References ast_cdr::answer, ast_cdr_end(), AST_CDR_NOANSWER, ast_cdr_post(), ast_cdr_start(), ast_cdr::billsec, ast_cdr::disposition, ast_cdr::duration, ast_cdr::end, ast_cdr::posted, and ast_cdr::start.

00381 {
00382    /* Post if requested */
00383    if (post) {
00384       ast_cdr_end(cdr);
00385       ast_cdr_post(cdr);
00386    }
00387    /* Reset to initial state */
00388    cdr->posted = 0;
00389    memset(&cdr->start, 0, sizeof(cdr->start));
00390    memset(&cdr->end, 0, sizeof(cdr->end));
00391    memset(&cdr->answer, 0, sizeof(cdr->answer));
00392    cdr->billsec = 0;
00393    cdr->duration = 0;
00394    ast_cdr_start(cdr);
00395    cdr->disposition = AST_CDR_NOANSWER;
00396 }

int ast_cdr_setaccount struct ast_channel chan,
char *  account
 

Definition at line 300 of file cdr.c.

References ast_channel::accountcode, and ast_channel::cdr.

00301 {
00302    struct ast_cdr *cdr = chan->cdr;
00303 
00304    strncpy(chan->accountcode, account, sizeof(chan->accountcode) - 1);
00305    if (cdr)
00306       strncpy(cdr->accountcode, chan->accountcode, sizeof(cdr->accountcode) - 1);
00307    return 0;
00308 }

void ast_cdr_setapp struct ast_cdr cdr,
char *  app,
char *  data
 

Set the last executed application.

Parameters:
cdr which cdr to act upon
app the name of the app you wish to change it to
data the data you want in the data field of app you set it to Changes the value of the last executed app Returns nothing

Definition at line 177 of file cdr.c.

References ast_log(), ast_cdr::channel, ast_cdr::lastapp, ast_cdr::lastdata, LOG_WARNING, and ast_cdr::posted.

Referenced by pbx_exec().

00178 {
00179    char *chan; 
00180    if (cdr) {
00181       chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
00182       if (cdr->posted)
00183          ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan);
00184       if (!app)
00185          app = "";
00186       strncpy(cdr->lastapp, app, sizeof(cdr->lastapp) - 1);
00187       if (!data)
00188          data = "";
00189       strncpy(cdr->lastdata, data, sizeof(cdr->lastdata) - 1);
00190    }
00191 }

int ast_cdr_setcid struct ast_cdr cdr,
struct ast_channel chan
 

Initialize based on a channel.

Parameters:
cdr Call Detail Record to use for channel
chan Channel to bind CDR with Initializes a CDR and associates it with a particular channel Return is negligible. (returns 0 by default)

Definition at line 193 of file cdr.c.

References ast_channel::ani, ast_callerid_parse(), AST_MAX_EXTENSION, ast_shrink_phone_number(), ast_channel::callerid, ast_cdr::clid, and ast_cdr::src.

Referenced by ast_set_callerid().

00194 {
00195    char tmp[AST_MAX_EXTENSION] = "";
00196    char *num, *name;
00197    if (cdr) {
00198       /* Grab source from ANI or normal Caller*ID */
00199       if (c->ani)
00200          strncpy(tmp, c->ani, sizeof(tmp) - 1);
00201       else if (c->callerid)
00202          strncpy(tmp, c->callerid, sizeof(tmp) - 1);
00203       if (c->callerid)
00204          strncpy(cdr->clid, c->callerid, sizeof(cdr->clid) - 1);
00205       name = NULL;
00206       num = NULL;
00207       ast_callerid_parse(tmp, &name, &num);
00208       if (num) {
00209          ast_shrink_phone_number(num);
00210          strncpy(cdr->src, num, sizeof(cdr->src) - 1);
00211       }
00212    }
00213    return 0;
00214 }

void ast_cdr_setdestchan struct ast_cdr cdr,
char *  chan
 

Set the destination channel, if there was one.

Parameters:
cdr Which cdr it's applied to Sets the destination channel the CDR is applied to Returns nothing

Definition at line 166 of file cdr.c.

References ast_log(), ast_cdr::channel, ast_cdr::dstchannel, LOG_WARNING, and ast_cdr::posted.

00167 {
00168    char *chan; 
00169    if (cdr) {
00170       chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
00171       if (cdr->posted)
00172          ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan);
00173       strncpy(cdr->dstchannel, chann, sizeof(cdr->dstchannel) - 1);
00174    }
00175 }

void ast_cdr_start struct ast_cdr cdr  ) 
 

Start a call.

Parameters:
cdr the cdr you wish to associate with the call Starts all CDR stuff necessary for monitoring a call Returns nothing important

Definition at line 126 of file cdr.c.

References ast_log(), ast_cdr::channel, LOG_WARNING, ast_cdr::posted, and ast_cdr::start.

Referenced by ast_cdr_reset(), and ast_pbx_run().

00127 {
00128    char *chan; 
00129    if (cdr) {
00130       chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
00131       if (cdr->posted)
00132          ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan);
00133       if (cdr->start.tv_sec || cdr->start.tv_usec)
00134          ast_log(LOG_WARNING, "CDR on channel '%s' already started\n", chan);
00135       gettimeofday(&cdr->start, NULL);
00136    }
00137 }

void ast_cdr_unregister char *  name  ) 
 

Unregister a CDR handling engine.

Parameters:
name name of CDR handler to unregister Unregisters a CDR by it's name

Definition at line 81 of file cdr.c.

References ast_mutex_lock, ast_mutex_unlock, and free.

00082 {
00083    struct ast_cdr_beitem *i, *prev = NULL;
00084    ast_mutex_lock(&cdrlock);
00085    i = bes;
00086    while(i) {
00087       if (!strcasecmp(name, i->name)) {
00088          if (prev)
00089             prev->next = i->next;
00090          else
00091             bes = i->next;
00092          break;
00093       }
00094       i = i->next;
00095    }
00096    ast_mutex_unlock(&cdrlock);
00097    if (i) 
00098       free(i);
00099 }

int ast_cdr_update struct ast_channel chan  ) 
 

Definition at line 310 of file cdr.c.

References ast_channel::accountcode, ast_channel::ani, ast_callerid_parse(), AST_MAX_EXTENSION, ast_shrink_phone_number(), ast_channel::callerid, ast_channel::cdr, ast_channel::context, and ast_channel::exten.

Referenced by ast_pbx_run().

00311 {
00312    struct ast_cdr *cdr = c->cdr;
00313    char *name, *num;
00314    char tmp[AST_MAX_EXTENSION] = "";
00315    /* Grab source from ANI or normal Caller*ID */
00316    if (c->ani)
00317       strncpy(tmp, c->ani, sizeof(tmp) - 1);
00318    else if (c->callerid)
00319       strncpy(tmp, c->callerid, sizeof(tmp) - 1);
00320    if (c->callerid)
00321       strncpy(cdr->clid, c->callerid, sizeof(cdr->clid) - 1);
00322    else
00323       strcpy(cdr->clid, "");
00324    name = NULL;
00325    num = NULL;
00326    ast_callerid_parse(tmp, &name, &num);
00327    if (num) {
00328       ast_shrink_phone_number(num);
00329       strncpy(cdr->src, num, sizeof(cdr->src) - 1);
00330    }
00331    /* Copy account code et-al */ 
00332    strncpy(cdr->accountcode, c->accountcode, sizeof(cdr->accountcode) - 1);
00333    /* Destination information */
00334    strncpy(cdr->dst, c->exten, sizeof(cdr->dst) - 1);
00335    strncpy(cdr->dcontext, c->context, sizeof(cdr->dcontext) - 1);
00336    return 0;
00337 }


Variable Documentation

char ast_default_accountcode[20]
 

Definition at line 217 of file cdr.h.

Referenced by ast_channel_alloc().

int ast_default_amaflags
 

Definition at line 215 of file cdr.h.

Referenced by ast_cdr_init(), and ast_channel_alloc().


Generated on Fri Oct 31 07:05:10 2003 for Asterisk by doxygen 1.3.4