<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Dear Daniel,<div><br></div><div>Actualy, we want to force unregister user A while user B is calling him and user A has lost his network connectivity but his registration timer has not expired yet. </div><div>According to that we have placed functions:</div><div><br></div><div><div><b>t_reply("480", "User offline");  </b><span style="font-size: 12pt;">to reply with 480 instead of 408</span></div><div><b>unregister("location", "$ru");  </b><span style="font-size: 12pt;">to unregister user A</span></div><div><br></div><div>into file root@sip:/etc/ngcp-config/templates/etc/kamailio/proxy/proxy.cfg.tt2</div><div><br></div><div>more specific:</div><div><br></div><div><div>########################################################################</div><div># Failure route 'base-standard-failure'</div><div>########################################################################</div><div>failure_route[FAILURE_ROUTE_LOCAL]</div><div>{</div><div>        xlog("L_INFO", "Failure route for local call - [% logreq -%]\n");</div><div><br></div><div>        # reset previous D-Uri, otherwise the wrong destination is</div><div>        # used for cfb</div><div>        $du = $null;</div><div><br></div><div>        # initialise variables when entering failure route</div><div>        $var(loose_routed) = 0;</div><div>        $var(no_acc) = 0;</div><div>        $var(no_auth) = 0;</div><div>        $var(forward) = 0;</div><div>        $var(redirected_forward) = 0;</div><div>        $var(external_domain) = 0;</div><div>        $var(ext_timeout) = 0;</div><div>        $var(no_auth) = 0;</div><div>        $var(from_trusted) = 0;</div><div>        $var(to_pstn) = 0;</div><div>        $var(reset_acc_callee) = 0;</div><div>        $var(no_sbc) = 0;</div><div>        $var(sendfax) = 0;</div><div>        $var(local_endpoint) = 0;</div><div>        route(ROUTE_STOP_RTPPROXY_BRANCH);</div><div>        .</div><div>        .</div><div>        .</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>check_status </div><div><span class="Apple-tab-span" style="white-space:pre">           </span>402|422|481|487</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>404</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>301|302</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>486</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>.</div><div>        .</div><div>        .<span class="Apple-tab-span" style="white-space:pre">   </span></div><div><span class="Apple-tab-span" style="white-space:pre">             </span>else if(t_check_status("408") && $var(ext_timeout) != 1)</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span><b><font color="#ac193d">t_reply("480", "User offline");</font></b></div><div><b><font color="#ac193d">                unregister("location", "$ru");</font></b></div><div>                while($avp(s:callee_cft) != $null)</div><div>                {</div><div>                        $var(cf_id) = $(avp(s:callee_cft)[0]);</div><div>                        xlog("L_INFO", "CFT to CF map id '$var(cf_id)' found - [% logreq -%]\n");</div><div>                        route(ROUTE_LOAD_CF_MAP);</div><div>                        while($avp(s:cf_destinations) != $null && $(avp(s:cf_destinations)[0]) =~ "^sip:localuser@.+\.local$")</div><div>                        {</div><div>                                xlog("L_INFO", "CFT breakout to local user skipped - [% logreq -%]\n");</div><div>                                $(avp(s:cf_timeouts)[0]) = $null;</div><div>                                $(avp(s:cf_destinations)[0]) = $null;</div><div>                        }</div><div>                        if($avp(s:cf_destinations) == $null)</div><div>                        {</div><div>                                xlog("L_INFO", "CFT skipped due to forward destinations definitions - [% logreq -%]\n");</div><div>                        }</div><div>                        else</div><div>                        {</div><div>                                route(ROUTE_CHECK_CF_PERIOD);</div><div>                                if($rc == 1)</div><div>                                {</div><div>                                        xlog("L_INFO", "CFT to destination '$(avp(s:cf_destinations)[0])' with timeout '$(avp(s:cf_timeouts)[0])' activated - [% logreq -%]\n");</div><div>                                        $ru = $(avp(s:cf_destinations)[0]);</div><div>                                        $(avp(s:cf_destinations)[0]) = $null;</div><div>                                        $(avp(s:callee_fr_inv_timer)[*]) = $(avp(s:cf_timeouts)[0]) * 1000;</div><div>                                        t_set_fr("$avp(s:callee_fr_inv_timer)");</div><div>                                        $(avp(s:cf_timeouts)[0]) = $null;</div><div>                                        $(avp(s:cf_depth)[*]) = $(avp(s:cf_depth){s.int}) + 1;</div><div>                                        $(avp(s:acc_state)[*]) = "cft";</div><div>                                        $(avp(s:acc_caller_user)[*]) = $avp(s:acc_callee_user);</div><div>                                        $(avp(s:acc_caller_domain)[*]) = $avp(s:acc_callee_domain);</div><div>                                        append_branch();</div><div>                                        route(ROUTE_EXECUTE_CF_LOOP);</div><div>                                        exit;</div><div>                                }</div><div>                                else</div><div>                                {</div><div>                                        xlog("L_INFO", "CFT skipped due to time period definitions - [% logreq -%]\n");</div><div>                                }</div><div>                        }</div><div>                        $(avp(s:callee_cft)[0]) = $null;</div><div>                }</div><div>                $var(announce_handle) = "callee_tmp_unavailable";</div><div>                $var(announce_set) = $avp(s:callee_sound_set);</div><div>                $(avp(s:announce_code)[*]) = 408;</div><div>                $(avp(s:announce_reason)[*]) = "Request Timeout";</div><div>                route(ROUTE_EARLY_REJECT);</div><div>        }</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>while($avp(s:callee_cfna) != $null)</div><div>        {</div><div>                $var(cf_id) = $(avp(s:callee_cfna)[0]);</div><div>                xlog("L_INFO", "CFNA to CF map id '$var(cf_id)' found - [% logreq -%]\n");</div><div>                route(ROUTE_LOAD_CF_MAP);</div><div>                while($avp(s:cf_destinations) != $null && $(avp(s:cf_destinations)[0]) =~ "^sip:localuser@.+\.local$")</div><div>                {</div><div>                        xlog("L_INFO", "CFNA breakout to local user skipped - [% logreq -%]\n");</div><div>                        $(avp(s:cf_timeouts)[0]) = $null;</div><div>                        $(avp(s:cf_destinations)[0]) = $null;</div><div>                }</div><div>                if($avp(s:cf_destinations) == $null)</div><div>                {</div><div>                        xlog("L_INFO", "CFNA skipped due to forward destinations definitions - [% logreq -%]\n");</div><div>                }</div><div>                else</div><div>                {</div><div>                        route(ROUTE_CHECK_CF_PERIOD);</div><div>                        if($rc == 1)</div><div>                        {</div><div>                                xlog("L_INFO", "CFNA to destination '$(avp(s:cf_destinations)[0])' with timeout '$(avp(s:cf_timeouts)[0])' activated - [% logreq -%]\n");</div><div>                                $ru = $(avp(s:cf_destinations)[0]);</div><div>                                $(avp(s:cf_destinations)[0]) = $null;</div><div>                                $(avp(s:callee_fr_inv_timer)[*]) = $(avp(s:cf_timeouts)[0]) * 1000;</div><div>                                t_set_fr("$avp(s:callee_fr_inv_timer)");</div><div>                                $(avp(s:cf_timeouts)[0]) = $null;</div><div>                                $(avp(s:cf_depth)[*]) = $(avp(s:cf_depth){s.int}) + 1;</div><div>                                $(avp(s:acc_state)[*]) = "cfna";</div><div>                                $(avp(s:acc_caller_user)[*]) = $avp(s:acc_callee_user);</div><div>                                $(avp(s:acc_caller_domain)[*]) = $avp(s:acc_callee_domain);</div><div>                                append_branch();</div><div>                                route(ROUTE_EXECUTE_CF_LOOP);</div><div>                                exit;</div><div>                        }</div><div>                        else</div><div>                        {</div><div>                                xlog("L_INFO", "CFNA skipped due to time period definitions - [% logreq -%]\n");</div><div>                        }</div><div>                }</div><div>                $(avp(s:callee_cfna)[0]) = $null;</div><div>        }</div><div><br></div><div>        $var(announce_handle) = "callee_tmp_unavailable";</div><div>        $var(announce_set) = $avp(s:callee_sound_set);</div><div>        $(avp(s:announce_code)[*]) = $T_rpl($rs);</div><div>        $(avp(s:announce_reason)[*]) = $T_rpl($rr);</div><div>        route(ROUTE_EARLY_REJECT);</div><div>}</div></div><div><br></div><div><br></div><br><div>> Date: Wed, 24 Jul 2013 10:43:21 +0200<br>> From: dgrotti@sipwise.com<br>> To: spce-user@lists.sipwise.com<br>> Subject: Re: [Spce-user] How to force unregister a user<br>> <br>> Hi Andreas,<br>> <br>> it depends when you want to perform the de-registration.<br>> The URI must be the SIP URI address of the user which to remove the<br>> contact addresses for.<br>> <br>> Can you share your code?<br>> <br>> Daniel<br>> <br>> <br>> <br>> On 07/19/2013 04:57 PM, andreas tseiko wrote:<br>> > Dear Daniel,<br>> > <br>> > I have used the following combinations but with no success:<br>> > unregister("location", "$ru");<br>> > unregister("location", "sip:$ru@example.com");<br>> > unregister("location", "$avp(s:callee_user)");<br>> > unregister("location", "sip:$avp(s:callee_user)@example.com");<br>> > <br>> > Could you please help regarding what is the correct variable that I<br>> > should use for "URI" field?<br>> > <br>> > Best regards.<br>> > <br>> >> Date: Fri, 19 Jul 2013 16:46:35 +0200<br>> >> From: dgrotti@sipwise.com<br>> >> To: spce-user@lists.sipwise.com<br>> >> Subject: Re: [Spce-user] How to force unregister a user<br>> >><br>> >> Hi,<br>> >><br>> >> you can use "unregister(domain, uri)" function:<br>> >><br>> >><br>> > http://www.kamailio.org/docs/modules/3.3.x/modules_k/registrar.html#idp6222944<br>> >><br>> >> br,<br>> >> Daniel<br>> >><br>> >><br>> >> On 07/19/2013 04:41 PM, andreas tseiko wrote:<br>> >> > Hi Daniel,<br>> >> ><br>> >> > Yes , I want to unregister the user via kamailio.cfg during a call<br>> > parsing.<br>> >> ><br>> >> > Best regards.<br>> >> ><br>> >> >> Date: Fri, 19 Jul 2013 16:35:29 +0200<br>> >> >> From: dgrotti@sipwise.com<br>> >> >> To: spce-user@lists.sipwise.com<br>> >> >> Subject: Re: [Spce-user] How to force unregister a user<br>> >> >><br>> >> >> Hi Andreas,<br>> >> >><br>> >> >> do you want to unregister the user from kamailio.cfg during a call<br>> >> >> parsing or what ?<br>> >> >><br>> >> >><br>> >> >> br,<br>> >> >> Daniel<br>> >> >><br>> >> >><br>> >> >><br>> >> >> On 07/19/2013 04:10 PM, andreas tseiko wrote:<br>> >> >> > Dear John,<br>> >> >> ><br>> >> >> > Let me rephrase my question,<br>> >> >> ><br>> >> >> > I would like automaticaly a registered user to be unregistered<br>> > when for<br>> >> >> > example his network connection has been lost and another user is<br>> > calling<br>> >> >> > him.<br>> >> >> ><br>> >> >> > Best regards.<br>> >> >> ><br>> >> >> > Date: Fri, 19 Jul 2013 15:59:49 +0200<br>> >> >> > From: jbonilla@sipwise.com<br>> >> >> > To: spce-user@lists.sipwise.com<br>> >> >> > Subject: Re: [Spce-user] How to force unregister a user<br>> >> >> ><br>> >> >> > El Fri, 19 Jul 2013 16:50:28 +0300<br>> >> >> > andreas tseiko <a.tseiko@hotmail.com> escribió:<br>> >> >> ><br>> >> >> >> Dear All,<br>> >> >> >> Is it possible to unregister a user if a specified criteria is<br>> >> > matched before<br>> >> >> >> his registration expires?If yes, what is the function that I should<br>> >> > call?<br>> >> >> >> Best regards.<br>> >> >> ><br>> >> >> ><br>> >> >> > You can use "delete_subscriber_registered_device" function to delete<br>> >> > any device<br>> >> >> > registration.<br>> >> >> ><br>> >> >> ><br>> >> >> ><br>> >> >> > _______________________________________________ Spce-user mailing<br>> > list<br>> >> >> > Spce-user@lists.sipwise.com<br>> > http://lists.sipwise.com/listinfo/spce-user<br>> >> >> ><br>> >> >> ><br>> >> >> > _______________________________________________<br>> >> >> > Spce-user mailing list<br>> >> >> > Spce-user@lists.sipwise.com<br>> >> >> > http://lists.sipwise.com/listinfo/spce-user<br>> >> >> ><br>> >> >><br>> >> >> _______________________________________________<br>> >> >> Spce-user mailing list<br>> >> >> Spce-user@lists.sipwise.com<br>> >> >> http://lists.sipwise.com/listinfo/spce-user<br>> >> ><br>> >> ><br>> >> > _______________________________________________<br>> >> > Spce-user mailing list<br>> >> > Spce-user@lists.sipwise.com<br>> >> > http://lists.sipwise.com/listinfo/spce-user<br>> >> ><br>> >><br>> >> _______________________________________________<br>> >> Spce-user mailing list<br>> >> Spce-user@lists.sipwise.com<br>> >> http://lists.sipwise.com/listinfo/spce-user<br>> <br>> _______________________________________________<br>> Spce-user mailing list<br>> Spce-user@lists.sipwise.com<br>> http://lists.sipwise.com/listinfo/spce-user<br></div></div>                                      </div></body>
</html>