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(a)gmail.com>om>:
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(a)gmail.com>om>:
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(a)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(a)gmail.com>om>:
>
>> 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@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@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@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(a)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(a)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(a)lists.sip-router.org