[SR-Users] No cdr after Kamailio 5.0 restart

Diego Nadares dnadares at gmail.com
Mon Mar 20 20:40:49 CET 2017


I didn't mention that I did this on kamailio 4.4.

Cheers,

Diego

2017-03-20 16:38 GMT-03:00 Diego Nadares <dnadares at gmail.com>:

> Hi Lucian,
>
> I made a few changes like you and I think it's working. Loads dialogs and
> generate cdr. It needs more testing. The function  cdr_on_load it's copy
> and paste to avoid touching those params in on_create. A lot of improve is
> needed.
>
> diff --git a/modules/dialog/dialog.c b/modules/dialog/*dialog.c*
> index ceaf08a..59210e8 100644
> --- a/modules/dialog/dialog.c
> +++ b/modules/dialog/dialog.c
> @@ -692,7 +692,7 @@ static int mod_init(void)
>                         LM_ERR("failed to initialize the DB support\n");
>                         return -1;
>                 }
> -               run_load_callbacks();
> +               //run_load_callbacks();
>         }
>
>         destroy_dlg_callbacks( DLGCB_LOADED );
>
> ########
>
> diff --git a/modules/dialog/dlg_db_handler.c b/modules/dialog/
> *dlg_db_handler.c*
> index e27f8b2..22d0f04 100644
> --- a/modules/dialog/dlg_db_handler.c
> +++ b/modules/dialog/dlg_db_handler.c
> @@ -173,6 +173,7 @@ int init_dlg_db(const str *db_url, int dlg_hash_size ,
> int db_update_period, int
>                         LM_ERR("unable to load the dialog data\n");
>                         return -1;
>                 }
> +               run_load_callbacks();
>         }
>         dialog_dbf.close(dialog_db_handle);
>         dialog_db_handle = 0;
>
>
> ########
>
> diff --git a/modules/acc/acc_cdr.c b/modules/acc/*acc_cdr.c*
> index 73bdd45..81ad640 100644
> --- a/modules/acc/acc_cdr.c
> +++ b/modules/acc/acc_cdr.c
> @@ -733,11 +733,79 @@ static void cdr_on_destroy( struct dlg_cell* dialog,
>      LM_DBG("dialog '%p' destroyed!\n", dialog);
>  }
>
> +/* callback for loading a dialog from db. */
> +static void cdr_on_load( struct dlg_cell* dialog,
> +                           int type,
> +                           struct dlg_cb_params* params)
> +{
> +
> +    LM_ERR("ON LOAD\n");
> +    if( !dialog)
> +    {
> +        LM_ERR( "invalid dialog\n!");
> +        return;
> +    }
> +
> +    if( cdr_enable == 0)
> +    {
> +        return;
> +    }
> +
> +    if( dlgb.register_dlgcb( dialog, DLGCB_CONFIRMED, cdr_on_start, 0, 0)
> != 0)
> +    {
> +        LM_ERR("can't register create dialog CONFIRM callback\n");
> +       return;
> +    }
> +
> +    if(_acc_cdr_on_failed==1) {
> +           if( dlgb.register_dlgcb( dialog, DLGCB_FAILED, cdr_on_failed,
> 0, 0) != 0)
> +           {
> +                   LM_ERR("can't register create dialog FAILED
> callback\n");
> +                   return;
> +           }
> +    }
> +
> +    if( dlgb.register_dlgcb( dialog, DLGCB_TERMINATED, cdr_on_end, 0, 0)
> != 0)
> +    {
> +        LM_ERR("can't register create dialog TERMINATED callback\n");
> +        return;
> +    }
> +
> +    if( dlgb.register_dlgcb( dialog, DLGCB_TERMINATED_CONFIRMED,
> cdr_on_end_confirmed, 0, 0) != 0)
> +    {
> +        LM_ERR("can't register create dialog TERMINATED CONFIRMED
> callback\n");
> +        return;
> +    }
> +
> +    if( dlgb.register_dlgcb( dialog, DLGCB_EXPIRED, cdr_on_expired, 0, 0)
> != 0)
> +    {
> +        LM_ERR("can't register create dialog EXPIRED callback\n");
> +        return;
> +    }
> +
> +    if( dlgb.register_dlgcb( dialog, DLGCB_DESTROY, cdr_on_destroy, 0, 0)
> != 0)
> +    {
> +        LM_ERR("can't register create dialog DESTROY callback\n");
> +        return;
> +    }
> +
> +    LM_DBG("dialog '%p' created!", dialog);
> +
> +    if( set_start_time( dialog) != 0)
> +    {
> +        LM_ERR( "failed to set start time");
> +        return;
> +    }
> +}
> +
> +
>  /* callback for the creation of a dialog. */
>  static void cdr_on_create( struct dlg_cell* dialog,
>                             int type,
>                             struct dlg_cb_params* params)
>  {
> +
> +    LM_ERR("ON CREATE\n");
>      if( !dialog || !params || !params->req)
>      {
>          LM_ERR( "invalid values\n!");
> @@ -852,13 +920,19 @@ int init_cdr_generation( void)
>          LM_ERR("can't load dialog API\n");
>          return -1;
>      }
> -
> -    if( dlgb.register_dlgcb( 0, DLGCB_CREATED, cdr_on_create, 0, 0) != 0)
> +    //Loaded from db
> +    if( dlgb.register_dlgcb( 0, DLGCB_LOADED, cdr_on_load, 0, 0) != 0)
>      {
>          LM_ERR("can't register create callback\n");
>          return -1;
>      }
>
> +    if( dlgb.register_dlgcb( 0, DLGCB_CREATED, cdr_on_create, 0, 0) != 0)
> +    {
> +       LM_ERR("can't register create callback\n");
> +       return -1;
> +    }
> +
>      return 0;
>  }
>
>
>
>     if( cdr_enable == 0)
>     {
>         return;
>     }
>
>     if( dlgb.register_dlgcb( dialog, DLGCB_CONFIRMED, cdr_on_start, 0, 0)
> != 0)
>     {
>         LM_ERR("can't register create dialog CONFIRM callback\n");
>         return;
>     }
>
>
>
> Diego.
>
>
>
> 2017-03-20 10:06 GMT-03:00 Kordován Szabolcs <koszab at gmail.com>:
>
>> Hi All,
>>
>> I have tired your patch but it dosen't work. No any changes. :(
>>
>> Regards,
>> Szabolcs
>>
>> 2017-03-16 15:36 GMT+01:00 Lucian Balaceanu <lucian.balaceanu at 1and1.ro>:
>>
>>> Hello all,
>>>
>>> Just created the pull request: https://github.com/kamailio/ka
>>> mailio/pull/1036 in relation to this problem with the sketch of a
>>> solution.
>>>
>>> Any input is appreciated,
>>> Lucian
>>>
>>>
>>> On 15.03.2017 15:17, Daniel-Constantin Mierla wrote:
>>>
>>> Hello,
>>>
>>> ok, good to know is someone tackling it.
>>>
>>> Thanks,
>>> Daniel
>>>
>>> On 15/03/2017 12:14, Pawel Kuzak wrote:
>>>
>>> Hello,
>>>
>>> This indeed is a bug we've also spotted. It is not only present in 5.0.
>>> It seems the *run_create_callbacks()* function which triggers the
>>> *DLGCB_CREATED* callbacks to be executed is not called for dialogs
>>> created from database. We are already working on a fix and are currently
>>> testing it. We will try push it upstream as soon as possible. We will
>>> answer on this thread when a fix is upstream.
>>>
>>> Regards,
>>> Paul
>>>
>>> Am 14.03.2017 um 22:00 schrieb Kordován Szabolcs:
>>>
>>> Hello Daniel,
>>>
>>> Sorry for my reply, I didn't receive your mail.
>>> So, only the active calls are affected. The new call, from invite to
>>> bye-ok, is recorded into table acc and acc_cdrs.
>>>
>>> Regards,
>>> Szabolcs
>>>
>>> 2017-03-14 11:13 GMT+01:00 Kordován Szabolcs <koszab at gmail.com>:
>>>
>>>> Hi,
>>>>
>>>> I use acc module for create cdr into db and also make acc log into db.
>>>> After restart Kamailio cdr won't be created but acc log will be
>>>> inserted into db. In the syslog also I see just the acc log. The dialog
>>>> will be remove from db.
>>>>
>>>> I have read many threads. I know that it should work.
>>>>
>>>> Thanks for help!
>>>> Regards,
>>>> Szabolcs
>>>>
>>>> From my configs:
>>>>
>>>> #!define FLT_ACC 1
>>>> #!define FLT_ACCMISSED 2
>>>> #!define FLT_ACCFAILED 3
>>>>
>>>> modparam("acc", "db_url", DBURL)
>>>> modparam("acc", "db_flag", FLT_ACC)
>>>> modparam("acc", "db_missed_flag", FLT_ACCMISSED)
>>>> modparam("acc", "db_extra", "src_user=$fU;src_domain=$fd;d
>>>> st_ouser=$tU;dst_user=$rU;dst_domain=$rd;src_ip=$si")
>>>>
>>>> modparam("acc", "log_level", 3)
>>>> modparam("acc", "log_flag", FLT_ACC)
>>>> modparam("acc", "log_missed_flag", FLT_ACCMISSED)
>>>>
>>>> modparam("acc", "report_ack", 1)
>>>> modparam("acc", "report_cancels", 1)
>>>> modparam("acc", "early_media", 1)
>>>>
>>>> modparam("acc", "failed_transaction_flag", FLT_ACCFAILED)
>>>>
>>>> modparam("acc", "acc_prepare_always", 1)
>>>> modparam("acc", "time_mode", 1)
>>>> modparam("acc", "time_attr", "seconds")
>>>> modparam("acc", "time_exten", "microsecs")
>>>> modparam("acc", "reason_from_hf", 1)
>>>>
>>>> modparam("acc", "cdr_enable", 1)
>>>> modparam("acc", "cdr_expired_dlg_enable", 1)
>>>> modparam("acc", "cdr_start_on_confirmed", 1)
>>>> modparam("acc", "cdrs_table", "acc_cdrs")
>>>> modparam("acc", "cdr_on_failed", 1)
>>>> modparam("acc", "cdr_extra", "callid=$ci;src_user=$dlg_var(
>>>> fU);src_domain=$dlg_var(fd);dst_ouser=$dlg_var(tU);dst_user=
>>>> $dlg_var(rU);dst_domain=$dlg_var(rd);src_ip=$dlg_var(si);pee
>>>> r_in=$dlg_var(peerin);peer_out=$dlg_var(peerout)")
>>>>
>>>> request_route {
>>>> <------>
>>>> <------>$var(loose) = loose_route();
>>>> <------>$var(check_trans) = t_check_trans();
>>>> <------>sip_trace();
>>>> <------>setflag(FLT_SIPTRACE);
>>>> <------>dlg_manage();
>>>>
>>>> <------># handle retransmissions
>>>> <------>if(t_precheck_trans()) {
>>>> <------>    xlogl("LOG_LOCAL0", "L_ALERT", "================== kamaty
>>>> $rm route $ci ==== $rm ==== precheck_trans exit\n");
>>>> <------>    exit;
>>>> <------>}
>>>>
>>>> <------>if(is_method("OPTIONS")) {.
>>>> <------>    # send reply for each options request.
>>>> <------>    sl_send_reply("200", "ok");.
>>>> <------>    exit();.
>>>> <------>}
>>>> <------># CANCEL processing
>>>> <------>if (is_method("CANCEL")) {
>>>> <------><------>if (t_check_trans()) {
>>>> <------><------>    route(RELAY);
>>>> <------><------>}
>>>> <------><------>exit;
>>>> <------>}
>>>> <------>if ( is_method("ACK") ) {
>>>> <------><------>if ( $var(check_trans) ) {
>>>> <------><------>    route(RELAY);
>>>> <------><------>}
>>>> <------><------>exit;
>>>> <------>}
>>>> <------>if (is_method("BYE")) {
>>>> <------>    if ($var(loose)) {
>>>> <------><------>setflag(FLT_ACC); # do accounting ...
>>>> <------><------>setflag(FLT_ACCFAILED); # ... even if the transaction
>>>> fails
>>>> <------><------>setflag(FLT_ACCMISSED);
>>>> <------><------>route(RELAY);
>>>> <------>    <-->exit;
>>>> <------>    }
>>>> <------>    exit;
>>>> <------>}
>>>> etc.
>>>>
>>>>
>>>
>>>
>>> _______________________________________________
>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing listsr-users at lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>
>>>
>>>
>>> _______________________________________________
>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing listsr-users at lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>
>>>
>>> --
>>> Daniel-Constantin Mierlawww.twitter.com/miconda -- www.linkedin.com/in/miconda
>>> Kamailio Advanced Training - Mar 6-8 (Europe) and Mar 20-22 (USA) - www.asipto.com
>>> Kamailio World Conference - May 8-10, 2017 - www.kamailioworld.com
>>>
>>>
>>>
>>> _______________________________________________
>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing listsr-users at lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>
>>>
>>>
>>> _______________________________________________
>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>>> sr-users at lists.sip-router.org
>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>
>>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>> sr-users at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20170320/ea94e9aa/attachment.html>


More information about the sr-users mailing list