I'm hot sure I understood your last question. The trick is to let some RTP-aware device on the flow hangup the call. In the general section of your sip.conf (asterisk) you can config rtptimeout and rtpholdtimeout parameters to 30 seconds; if no RTP is coming for that period of time, the call will be dropped.

On Thu, Jun 11, 2009 at 1:05 PM, David <kamailio.org@spam.lublink.net> wrote:
Hey,

Thanks for the answer. If I did not have Kamailio, how would I do this?

David

Uriel Rozenbaum wrote:
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 <http://kamailio.org>@spam.lublink.net <http://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@lists.kamailio.org <mailto:Users@lists.kamailio.org>