[sr-dev] git:master: Add new cdr-feature 'modifying cdr basic parameter st/et/d'. This is necessary for the upcoming db-storage of cdr's.
Sven Knoblich
sven.knoblich at 1und1.de
Fri Feb 24 10:18:56 CET 2012
Hi all,
sorry for committing also changes of indentations. I take care of that
in the future.
Bye Sven
Am 24.02.2012 09:33, schrieb Sven Knoblich:
> Module: sip-router
> Branch: master
> Commit: 7b4567c4cc4611ee32e403b41f53ed9a34ce9727
> URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=7b4567c4cc4611ee32e403b41f53ed9a34ce9727
>
> Author: Sven Knoblich<sven.knoblich at 1und1.de>
> Committer: Sven Knoblich<sven.knoblich at 1und1.de>
> Date: Thu Feb 23 14:33:19 2012 +0100
>
> Add new cdr-feature 'modifying cdr basic parameter st/et/d'. This is necessary for the upcoming db-storage of cdr's.
>
> ---
>
> modules_k/acc/acc_cdr.c | 33 +++++++-------
> modules_k/acc/acc_mod.c | 88 +++++++++++++++++++++++++--------------
> modules_k/acc/doc/acc_admin.xml | 46 ++++++++++++++++++++-
> 3 files changed, 119 insertions(+), 48 deletions(-)
>
> diff --git a/modules_k/acc/acc_cdr.c b/modules_k/acc/acc_cdr.c
> index a3760b9..996ebf4 100644
> --- a/modules_k/acc/acc_cdr.c
> +++ b/modules_k/acc/acc_cdr.c
> @@ -36,6 +36,7 @@
> *
> */
> #include "../../modules/tm/tm_load.h"
> +#include "../../str.h"
> #include "../dialog/dlg_load.h"
>
> #include "acc_api.h"
> @@ -66,9 +67,6 @@ struct dlg_binds dlgb;
> struct acc_extra* cdr_extra = NULL;
> int cdr_facility = LOG_DAEMON;
>
> -static const str start_id = { "st", 2};
> -static const str end_id = { "et", 2};
> -static const str duration_id = { "d", 1};
> static const str zero_duration = { "0", 1};
> static const char time_separator = {'.'};
> static char time_buffer[ TIME_BUFFER_LENGTH];
> @@ -81,6 +79,9 @@ static int cdr_int_arr[ MAX_CDR_CORE + MAX_CDR_EXTRA];
> static char cdr_type_array[ MAX_CDR_CORE + MAX_CDR_EXTRA];
>
> extern struct tm_binds tmb;
> +extern str cdr_start_str;
> +extern str cdr_end_str;
> +extern str cdr_duration_str;
>
> /* write all basic information to buffers(e.g. start-time ...) */
> static int cdr_core2strar( struct dlg_cell* dlg,
> @@ -98,9 +99,9 @@ static int cdr_core2strar( struct dlg_cell* dlg,
> return 0;
> }
>
> - start = dlgb.get_dlg_var( dlg, (str*)&start_id);
> - end = dlgb.get_dlg_var( dlg, (str*)&end_id);
> - duration = dlgb.get_dlg_var( dlg, (str*)&duration_id);
> + start = dlgb.get_dlg_var( dlg, (str*)&cdr_start_str);
> + end = dlgb.get_dlg_var( dlg, (str*)&cdr_end_str);
> + duration = dlgb.get_dlg_var( dlg, (str*)&cdr_duration_str);
>
> values[0] = ( start != NULL ? *start : empty_string);
> types[0] = ( start != NULL ? TYPE_STR : TYPE_NULL);
> @@ -284,11 +285,11 @@ static int set_duration( struct dlg_cell* dialog)
> return -1;
> }
>
> - if ( string2time( dlgb.get_dlg_var( dialog, (str*)&start_id),&start_time)< 0) {
> + if ( string2time( dlgb.get_dlg_var( dialog, (str*)&cdr_start_str),&start_time)< 0) {
> LM_ERR( "failed to extract start time\n");
> return -1;
> }
> - if ( string2time( dlgb.get_dlg_var( dialog, (str*)&end_id),&end_time)< 0) {
> + if ( string2time( dlgb.get_dlg_var( dialog, (str*)&cdr_end_str),&end_time)< 0) {
> LM_ERR( "failed to extract end time\n");
> return -1;
> }
> @@ -301,7 +302,7 @@ static int set_duration( struct dlg_cell* dialog)
> }
>
> if( dlgb.set_dlg_var( dialog,
> - (str*)&duration_id,
> + (str*)&cdr_duration_str,
> (str*)&duration_str) != 0)
> {
> LM_ERR( "failed to set duration time");
> @@ -335,7 +336,7 @@ static int set_start_time( struct dlg_cell* dialog)
> }
>
> if( dlgb.set_dlg_var( dialog,
> - (str*)&start_id,
> + (str*)&cdr_start_str,
> (str*)&start_time) != 0)
> {
> LM_ERR( "failed to set start time\n");
> @@ -343,7 +344,7 @@ static int set_start_time( struct dlg_cell* dialog)
> }
>
> if( dlgb.set_dlg_var( dialog,
> - (str*)&end_id,
> + (str*)&cdr_end_str,
> (str*)&start_time) != 0)
> {
> LM_ERR( "failed to set initiation end time\n");
> @@ -351,7 +352,7 @@ static int set_start_time( struct dlg_cell* dialog)
> }
>
> if( dlgb.set_dlg_var( dialog,
> - (str*)&duration_id,
> + (str*)&cdr_duration_str,
> (str*)&zero_duration) != 0)
> {
> LM_ERR( "failed to set initiation duration time\n");
> @@ -385,7 +386,7 @@ static int set_end_time( struct dlg_cell* dialog)
> }
>
> if( dlgb.set_dlg_var( dialog,
> - (str*)&end_id,
> + (str*)&cdr_end_str,
> (str*)&end_time) != 0)
> {
> LM_ERR( "failed to set start time");
> @@ -595,9 +596,9 @@ int set_cdr_extra( char* cdr_extra_value)
> }
>
> /* fixed core attributes */
> - cdr_attrs[ counter++] = start_id;
> - cdr_attrs[ counter++] = end_id;
> - cdr_attrs[ counter++] = duration_id;
> + cdr_attrs[ counter++] = cdr_start_str;
> + cdr_attrs[ counter++] = cdr_end_str;
> + cdr_attrs[ counter++] = cdr_duration_str;
>
> for(extra=cdr_extra; extra ; extra=extra->next)
> {
> diff --git a/modules_k/acc/acc_mod.c b/modules_k/acc/acc_mod.c
> index c1d6d68..15bfe9e 100644
> --- a/modules_k/acc/acc_mod.c
> +++ b/modules_k/acc/acc_mod.c
> @@ -66,6 +66,7 @@
> #include "../../dprint.h"
> #include "../../mem/mem.h"
> #include "../../modules/tm/tm_load.h"
> +#include "../../str.h"
> #include "../rr/api.h"
> #include "acc.h"
> #include "acc_api.h"
> @@ -132,6 +133,11 @@ int cdr_enable = 0;
> int cdr_start_on_confirmed = 0;
> static char* cdr_facility_str = 0;
> static char* cdr_log_extra_str = 0;
> +
> +str cdr_start_str = str_init("st");
> +str cdr_end_str = str_init("et");
> +str cdr_duration_str = str_init("d");
> +
> /*@{*/
>
> /* ----- RADIUS acc variables ----------- */
> @@ -243,11 +249,14 @@ static param_export_t params[] = {
> {"log_level", INT_PARAM,&log_level },
> {"log_facility", STR_PARAM,&log_facility_str },
> {"log_extra", STR_PARAM,&log_extra_str },
> - /* cdr specific */
> - {"cdr_enable", INT_PARAM,&cdr_enable },
> - {"cdr_start_on_confirmed", INT_PARAM,&cdr_start_on_confirmed },
> - {"cdr_facility", STR_PARAM,&cdr_facility_str },
> - {"cdr_extra", STR_PARAM,&cdr_log_extra_str },
> + /* cdr specific */
> + {"cdr_enable", INT_PARAM,&cdr_enable },
> + {"cdr_start_on_confirmed", INT_PARAM,&cdr_start_on_confirmed },
> + {"cdr_facility", STR_PARAM,&cdr_facility_str },
> + {"cdr_extra", STR_PARAM,&cdr_log_extra_str },
> + {"cdr_start_id", STR_PARAM,&cdr_start_str.s },
> + {"cdr_stop_id", STR_PARAM,&cdr_end_str.s },
> + {"cdr_duration_id", STR_PARAM,&cdr_duration_str.s },
> #ifdef RAD_ACC
> {"radius_config", STR_PARAM,&radius_config },
> {"radius_flag", INT_PARAM,&radius_flag },
> @@ -504,34 +513,51 @@ static int mod_init( void )
>
> acc_log_init();
>
> - /* ----------- INIT CDR GENERATION ----------- */
> + /* ----------- INIT CDR GENERATION ----------- */
>
> - if( cdr_enable< 0 || cdr_enable> 1)
> - {
> - LM_ERR("cdr_enable is out of range\n");
> - return -1;
> - }
> + if( cdr_enable< 0 || cdr_enable> 1)
> + {
> + LM_ERR("cdr_enable is out of range\n");
> + return -1;
> + }
>
> - if( cdr_enable)
> - {
> - if( set_cdr_extra( cdr_log_extra_str) != 0)
> - {
> - LM_ERR( "failed to set cdr extra '%s'\n", cdr_log_extra_str);
> - return -1;
> - }
> -
> - if( cdr_facility_str&& set_cdr_facility( cdr_facility_str) != 0)
> - {
> - LM_ERR( "failed to set cdr facility '%s'\n", cdr_facility_str);
> - return -1;
> - }
> -
> - if( init_cdr_generation() != 0)
> - {
> - LM_ERR("failed to init cdr generation\n");
> - return -1;
> - }
> - }
> + if( cdr_enable)
> + {
> + if( !cdr_start_str.s || !cdr_end_str.s || !cdr_duration_str.s)
> + {
> + LM_ERR( "necessary cdr_parameters are not set\n");
> + return -1;
> + }
> +
> + cdr_start_str.len = strlen(cdr_start_str.s);
> + cdr_end_str.len = strlen(cdr_end_str.s);
> + cdr_duration_str.len = strlen(cdr_duration_str.s);
> +
> + if( !cdr_start_str.len || !cdr_end_str.len || !cdr_duration_str.len)
> + {
> + LM_ERR( "necessary cdr_parameters are empty\n");
> + return -1;
> + }
> +
> +
> + if( set_cdr_extra( cdr_log_extra_str) != 0)
> + {
> + LM_ERR( "failed to set cdr extra '%s'\n", cdr_log_extra_str);
> + return -1;
> + }
> +
> + if( cdr_facility_str&& set_cdr_facility( cdr_facility_str) != 0)
> + {
> + LM_ERR( "failed to set cdr facility '%s'\n", cdr_facility_str);
> + return -1;
> + }
> +
> + if( init_cdr_generation() != 0)
> + {
> + LM_ERR("failed to init cdr generation\n");
> + return -1;
> + }
> + }
>
> /* ------------ SQL INIT SECTION ----------- */
>
> diff --git a/modules_k/acc/doc/acc_admin.xml b/modules_k/acc/doc/acc_admin.xml
> index 50fb91d..afb4934 100644
> --- a/modules_k/acc/doc/acc_admin.xml
> +++ b/modules_k/acc/doc/acc_admin.xml
> @@ -1179,7 +1179,51 @@ modparam("acc", "cdr_extra", "c1=$dlg_var(caller);c2=$dlg_var(callee)"
> </programlisting>
> </example>
> </section>
> -
> + <section id="cdr_start_id">
> + <title><varname>cdr_start_id</varname> (string)</title>
> + <para>
> + Modifying the start id which is used to store the start time.
> + </para>
> + <para>
> + Default value is 'st'
> + </para>
> + <example>
> + <title>cdr_start_id example</title>
> + <programlisting format="linespecific">
> +modparam("acc", "cdr_start_id", "start")
> +</programlisting>
> + </example>
> + </section>
> + <section id="cdr_end_id">
> + <title><varname>cdr_end_id</varname> (string)</title>
> + <para>
> + Modifying the end id which is used to store the end time.
> + </para>
> + <para>
> + Default value is 'et'
> + </para>
> + <example>
> + <title>cdr_end_id example</title>
> + <programlisting format="linespecific">
> +modparam("acc", "cdr_end_id", "end")
> +</programlisting>
> + </example>
> + </section>
> + <section id="cdr_duration_id">
> + <title><varname>cdr_duration_id</varname> (string)</title>
> + <para>
> + Modifying the duration id which is used to store the duration.
> + </para>
> + <para>
> + Default value is 'd'
> + </para>
> + <example>
> + <title>cdr_duration_id example</title>
> + <programlisting format="linespecific">
> +modparam("acc", "cdr_duration_id", "start")
> +</programlisting>
> + </example>
> + </section>
> </section>
>
> <section>
>
>
> _______________________________________________
> sr-dev mailing list
> sr-dev at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
More information about the sr-dev
mailing list