[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