All pastes #924994 Raw Edit

Something

public text v1 · immutable
·published 2008-03-01 22:04 UTC
rendered paste body
%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;
};