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 <kos...@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.balace...@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 <kos...@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-us...@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-us...@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-us...@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@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@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@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users