core, lib, modules: restructured source code tree
[sip-router] / src / modules / acc / acc_extra.h
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2004 Voice Sistem SRL
5  * Copyright (C) 2008 Juha Heinanen
6  *
7  * This file is part of Kamailio, a free SIP server.
8  *
9  * Kamailio is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version.
13  *
14  * Kamailio is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
22  *
23  *
24  * History:
25  * ---------
26  *  2004-10-28  first version (ramona)
27  *  2005-05-30  acc_extra patch commited (ramona)
28  *  2005-07-13  acc_extra specification moved to use pseudo-variables (bogdan)
29  *  2006-09-08  flexible multi leg accounting support added,
30  *              code cleanup for low level functions (bogdan)
31  *  2006-09-19  final stage of a masive re-structuring and cleanup (bogdan)
32  *  2008-09-03  added support for integer type Radius attributes (jh)
33  */
34
35 /*! \file
36  * \ingroup acc
37  * \brief Acc:: Extra attributes
38  *
39  * - \ref acc_extra.h
40  * - Module: \ref acc
41  */
42
43 #ifndef _ACC_EXTRA_H_
44 #define _ACC_EXTRA_H_
45
46 #include "acc_api.h"
47 #include "../../str.h"
48 #include "../../pvar.h"
49 #include "../../parser/msg_parser.h"
50 #include "../dialog/dlg_load.h"
51
52 void init_acc_extra(void);
53
54 struct acc_extra *parse_acc_extra(char *extra);
55
56 struct acc_extra *parse_acc_leg(char *extra);
57
58 void destroy_extras( struct acc_extra *extra);
59
60 int extra2strar( struct acc_extra *extra, struct sip_msg *rq,
61                  str *val_arr, int *int_arr, char *type_arr);
62
63 int extra2strar_dlg_only(struct acc_extra *extra, struct dlg_cell* dlg,
64                 str *val_arr, int *int_arr, char *type_arr, const struct dlg_binds* p_dlgb);
65
66 int legs2strar( struct acc_extra *legs, struct sip_msg *rq, str *val_arr,
67                 int *int_arr, char *type_arr, int start);
68
69 int extra2int( struct acc_extra *extra, int *attrs );
70
71 #ifdef RAD_ACC
72 #include "../misc_radius/radius.h"
73 int extra2attrs( struct acc_extra *extra, struct attr *attrs, int offset);
74 #endif
75
76 static inline void free_strar_mem( char* type_arr, str* alloc_arr, int dim_arr, int dim_ext){
77         int i = 0;
78         for ( i = 0; i < dim_arr; i ++ ) {
79                 if (( TYPE_NULL !=  type_arr[i] ) && (  NULL != alloc_arr[i].s)) {
80                         LM_DBG("Freeing memory, type is %d, message_index %d, index i %d\n",
81                                         type_arr[i], dim_ext - dim_arr, i);
82                         pkg_free( alloc_arr[i].s) ;
83                         alloc_arr[i].s = NULL;
84                 }
85         }
86 }
87 #endif
88