%module ast_cdr
%{
#include "asterisk.h"
#include "asterisk/cdr.h"
#include "asterisk/linkedlists.h"
#include "python/res_python.h"
%}
struct timeval {
long tv_sec;
long tv_usec;
};
%extend ast_cdr {
unsigned int num_vars(void) {
unsigned int count = 0;
struct ast_var_t *var;
AST_LIST_TRAVERSE(&$self->varshead, var, entries)
count++;
return count;
}
const char *var_name(unsigned int index) {
unsigned int cur = 0;
struct ast_var_t *var;
AST_LIST_TRAVERSE(&$self->varshead, var, entries) {
if (index != cur++)
continue;
return var->name;
}
return NULL;
}
const char *var_value(unsigned int index) {
unsigned int cur = 0;
struct ast_var_t *var;
AST_LIST_TRAVERSE(&$self->varshead, var, entries) {
if (index != cur++)
continue;
return var->value;
}
return NULL;
}
const char *var_value(const char *name) {
struct ast_var_t *var;
AST_LIST_TRAVERSE(&$self->varshead, var, entries) {
if (!strcasecmp(name, var->name))
return var->value;
}
return NULL;
}
};
/*! \brief Responsible for call detail data */
struct ast_cdr {
/*! Caller*ID with text */
char clid[AST_MAX_EXTENSION];
/*! Caller*ID number */
char src[AST_MAX_EXTENSION];
/*! Destination extension */
char dst[AST_MAX_EXTENSION];
/*! Destination context */
char dcontext[AST_MAX_EXTENSION];
char channel[AST_MAX_EXTENSION];
/*! Destination channel if appropriate */
char dstchannel[AST_MAX_EXTENSION];
/*! Last application if appropriate */
char lastapp[AST_MAX_EXTENSION];
/*! Last application data */
char lastdata[AST_MAX_EXTENSION];
struct timeval start;
struct timeval answer;
struct timeval end;
/*! Total time in system, in seconds */
long int duration;
/*! Total time call is up, in seconds */
long int billsec;
/*! What happened to the call */
long int disposition;
/*! What flags to use */
long int amaflags;
/*! What account number to use */
char accountcode[AST_MAX_ACCOUNT_CODE];
/*! flags */
unsigned int flags;
/*! Unique Channel Identifier */
char uniqueid[32];
/*! User field */
char userfield[AST_MAX_USER_FIELD];
/*! A linked list for variables */
struct varshead varshead;
struct ast_cdr *next;
};