Hello!
Regarding the second and third question. I once did like this:
route
{
route(checks);
route(reqinit);
..
route(class4);
}
route[reqinit]
{
....
if (has_totag() && (uri == myself) &&
is_method("INVITE|ACK|BYE|UPDATE"))
{
if(match_dialog())
{
# sequential request -> obey Route indication
if(is_method("BYE"))
{
t_on_reply("manage_reply_class4");
xlog("[$ci] INFO BYE DIALOG_DID=$DLG_did DLG_lifetime=$DLG_lifetime
\n");
route(acc_stop);
}
else
if(is_method("INVITE"))
{
xlog("[$ci] INFO Re-Invite has come for: $fU");
if(match_dialog())
{
xlog("[$ci] INFO dialog matched");
t_relay();
exit;
}
}
#loose_route();
t_relay();
exit;
}
if ( is_method("ACK") )
{
if ( t_check_trans() )
{
# non loose-route, but stateful ACK; must be an ACK after
# a 487 or e.g. 404 from upstream server
route(acc_stop);
t_relay();
exit;
}
else
{
# ACK without matching transaction ->
# ignore and discard
exit;
}
}
xlog("[$ci] INFO No such dialog\n");
}
# handle cancel and re-transmissions
if ( is_method("CANCEL") )
{
xlog("[$ci] INFO Cancel message from: $fU\n");
if ( t_check_trans() )
{
route(acc_stop);
t_relay();
}
exit;
}
}
route[class4]
{
if is_method("INVITE")
{
.....
route(acc_start);
}
..
}
onreply_route[manage_reply_class4]
{
if (is_method("INVITE") && t_check_status("200") ||
t_check_status("[4|5|6][0-9][0-9]") &&
!t_check_status("1[0-9][0-9]"))
{
$avp(call_time_setup) = $Ts - $avp(call_time_created_Ts);
route(acc_update);
}
}
route[acc_start]
{
$avp(time_call_created) = $time(%F %T);
$avp(call_time_created_Ts) =$Ts;
$avp(call_fuo) = $fU;
$avp(call_tuo) = $tU;
$avp(call_mi) = $mi;
avp_db_query("insert into acc (method, from_tag, callid, time, created, ruo,
fuo, tuo, mi, fgw)
values ('$rm', '$ft', '$ci',
'$avp(time_call_created)',
'$avp(time_call_created)', '$avp(call_ruo)',
'$avp(call_fuo)', '$avp(call_tuo)',
'$avp(call_mi)', '$avp(call_gw_source)')");
}
route[acc_update]
{
avp_db_query("select callid from acc where
callid='$ci'","$avp(call_id)");
if($avp(call_id))
{
avp_db_query("update acc set to_tag = '$tt', sip_code =
'$rs', sip_reason = '$rr',
setuptime = '$avp(call_time_setup)', tgw =
'$avp(call_gw_dest)',
ru = '$avp(call_ru)', fu = '$fU', tu =
'$tU'
where callid='$ci'");
}
}
route[acc_stop]
{
avp_db_query("select callid from acc where
callid='$ci'","$avp(call_id)");
if($avp(call_id))
{
avp_db_query("update acc set duration = '$DLG_lifetime' where
callid = '$ci'");
}
}
Понедельник, 8 января 2018, 0:50 +03:00 от voipspace
voipspace <voipspace(a)yandex.com>om>:
A few question;
Firstly
With mod acc and acc_cdr i see the default fields logged is only start_time, end_time,
duration.
This is an actual entry logged.
start_time, end_time, duration
1515353126, 1515353135, 9.660000
Hello!
Regarding the second and third question. I once did like this:
Why is the duration 9.660000?
It seems wrong because it is more then the difference in time
1515353135 - 1515353126 = 9
Secondly
What is a reliable way to capture and log start time, answer time, and end time.
How do I get the duration info. a) start time to end time. b) answer to end time.
Is there an built in variable that store this info?
Thirdly
dialog events listed as:
event_route[dialog:start]
event_route[dialog:end]
event_route[dialog:failed]
There does not seems to be a event for answer so then how to be notified when a dialog is
answered?
Regards
_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users(a)lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
--
С уважением,
Евгений Голей