[Kamailio-Users] Problems in ACC with missing BYE

Uriel Rozenbaum uriel.rozenbaum at gmail.com
Thu Jun 11 15:58:33 CEST 2009


Hi David,

Maybe you can set rtptimeout on Asterisk peer, so when no RTP is flowing,
Asterisk will hang up the call and you'll have the CDR "closed" in Kamailio.

Be sure your Kamailio is redundant, you can use heartbeat or something like
that.

Rgds,
Uriel

On Thu, Jun 11, 2009 at 10:08 AM, David <kamailio.org at spam.lublink.net>wrote:

> Hi,
>
> I am using Kamailio as my ACC, Dispatcher, far end nat and presence server
> in front of a farm of asterisk boxes.
>
> Most calls are being properly added into my acc table and using a join
> between the INVITEs, CANCELs, and BYEs I am able to get what seems like
> accurate call detail records.
>
> The trouble is that every so often a BYE does not make it back to my
> server. In my simulation this morning, I simply unplugged ( electric ) the
> two phones that were having a pleasant conversation.  Now I have asterisk
> that thinks the call is still running and I have Kamailio which has no
> ending 'BYE' message. For the most part this is not a big deal, but when I
> can a cellular phone in European countries, my provider thinks I am still
> talking. At 30 cents a minute, that's a lot.
>
> Here are some snippets from my code :
>
> loadmodule("dialog.so")
> loadmodule("acc.so")
> loadmodule("sst.so")
>
> modparam("acc", "early_media", 1)
> modparam("acc", "report_ack", 1)
> modparam("acc", "report_cancels", 1)
> modparam("acc", "failed_transaction_flag", 3)
> modparam("acc", "log_flag", 1)
> modparam("acc", "log_missed_flag", 2)
> modparam("acc", "db_flag", 1)
> modparam("acc", "db_missed_flag", 2)
> # There is also a parameter for the DB, but I can't give you my password
> modparam("acc", "db_url", "some://valid:url@to/db")
>
> # Note $avp(i:10) always ends up being 14400 ( less than the value on the
> help page )
> modparam("dialog", "timeout_avp", "$avp(i:10)")
> modparam("sst", "timeout_avp", "$avp(i:10)")
> modparam("sst", "sst_flag", 5)
>
>
>
> Relevant snippets from my routing :
>
> if ( has_totag()) {
> if ( loose_route() ) {
>  if ( is_method("CANCEL|BYE") {
>   setflag(1);
>   setflag(3);
>
> }
> }
>
> # Routing of INVITEs
> setflag(2)
> if ( !is_method("ACK"))
> {
>  setflag(1);
> }
>
>
>
> setflag(4);
>
> setflag(5);
>
>
> For invites, I have a onreply_route and failure_route which I use  only for
> RTP Stuff.
>
> On reply route checks if rtpproxy is needed, if it is it is activated.
> failure_route checks if rtpproxy was activated and if it was deactives it.
> The only other code in the failure route is this :
>
> if ( t_was_cancelled() ){
> exit ;
> }
>
> So, the problem is, when phones do not send BYE, what do I do? I need
> resources freed up from Asterisk, RTP Proxy, and Kamailio Dialog, and I need
> the call to be canceled with my provider and I need for my ACC to recieve
> some indication as to when the call ended. Obviously it won't be exact to
> the second, but I kind of thought that the SIP Session Timers would notice
> the phone was gone and would generate a BYE or something?
>
> What do I do?
>
> Thanks,
>
> David
>
>
>
>
> _______________________________________________
> Kamailio (OpenSER) - Users mailing list
> Users at lists.kamailio.org
> http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
> http://lists.openser-project.org/cgi-bin/mailman/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20090611/4e9ca4c8/attachment.htm>


More information about the sr-users mailing list