Hi, based on Daniels example from: http://blog.miconda.eu/2010/01/best-of-new-in-kamailio-300-19-htable.html
... modparam("htable", "htable", "acalls=>size=8;") ... route { ... if(is_method("INVITE") && !has_totag()) { # a new call if($shtcv(ht=>^$fU$)>=3) { send_reply("403", "limit exceeded"); exit; } $sht(acalls=>$ci) = $fU; t_on_failure("NEW_INVITE"); }
if(is_method("BYE")) { $sht(acalls=>$ci) = $null; } ... }
failure_route[NEW_INVITE] { $sht(acalls=>$ci) = $null; }
I use this htable variant to share data between two dialogs (store Contact from one dialog, and re-write other R-URI with it). Referenced by call-id:
... $avp(referenceID) = $ci + "-" + $avp(direction); $sht(a=>$avp(referenceID)) = $ct; ... ... $avp(referenceID) = $ci + "-" + $avp(direction); avp(newru) = $sht(a=>$avp(referenceID)); avp_subst("$avp(newru)", "/(<)(.*)(>)/\2/"); xlog("L_NOTICE", ">>>>>>>> ReWrite ru with:$avp(newru)\n"); $ru = $avp(newru); ...
Is this the best method to share data between two dialogs? Because you have to take care yourself with failure_route and so on, to free (set back to $null) them. Or is there a more elegant way for that task?
Best Kristijan