[SR-Users] No cdr after Kamailio 5.0 restart

Diego Nadares dnadares at gmail.com
Mon Mar 20 20:38:42 CET 2017


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/1eca5cff/attachment.html>


More information about the sr-users mailing list