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