Hi Surya,

Could post somewhere a complete capture of the SUBSCRIBE + NOTIFY, taken from OpenSIPS ?

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com

On 20.10.2016 07:39, surya wrote:
Hi Bogdan,

Thanks for the answer. I tried the record-route but that created loop
between dispatcher and the presence server, I started getting too many hops
in both. Sample this:

/Oct 19 23:07:40 [73] DBG:core:build_res_buf_from_sip_res: copied size:
orig:90, new: 26, rest: 362 msg=
SIP/2.0 483 To Many HopsVia: SIP/2.0/UDP
172.17.0.5:5060;branch=z9hG4bK79ea.2ab64515.0
Via: SIP/2.0/UDP 172.17.0.2:5060;branch=z9hG4bK79ea.1ab64515.0
Via: SIP/2.0/UDP 172.17.0.5:5060;branch=z9hG4bK79ea.1ab64515.0
Via: SIP/2.0/UDP 172.17.0.2:5060;branch=z9hG4bK79ea.0ab64515.0
Via: SIP/2.0/UDP 172.17.0.5:5060;branch=z9hG4bK79ea.0ab64515.0
To: <sip:[email protected]>;tag=1
From:
<sip:[email protected]>;tag=80675298202cdedfab05883cddeed060-0467
CSeq: 1 NOTIFY
Call-ID: [email protected]
Server: OpenSIPS (1.8.4-notls (x86_64/linux))
Content-Length: 0/

here 0.2 is dispatcher, 0.5 is presence server and request comes from 0.4.

The config for dispatcher:
---------------------------------------------------------------------------
route{
         if ( !mf_process_maxfwd_header("10") )
         {
                 send_reply("483","To Many Hops");
                 exit;
         };
#I added this. Need some condition checks??
       *   if(method=="SUBSCRIBE")
         {
              record_route();
         }*
         if ( !ds_select_dst("1", "4") ) {
                 send_reply("500","Unable to route");
                 exit;
         }
forward();
#       t_relay();
}
---------------------------------------------------------------------------

Config for presence
---------------------------------------------------------------------------
# main request routing logic

route{


         if (!mf_process_maxfwd_header("10")) {
                 sl_send_reply("483","Too Many Hops");
                 exit;
         }

         if (has_totag()) {
                 # sequential request withing a dialog should
                 # take the path determined by record-routing
                 if (loose_route()) {

                         if (is_method("BYE")) {
                                 setflag(1); # do accounting ...
                                 setflag(3); # ... even if the transaction
fails
                         } else if (is_method("INVITE")) {
                                 # even if in most of the cases is useless,
do RR for
                                 # re-INVITEs alos, as some buggy clients do
change route set
                                 # during the dialog.
                                 record_route();
                         }



                         # route it out to whatever destination was set by
loose_route()
                         # in $du (destination URI).
                         route(1);
                 } else {
                         if (is_method("SUBSCRIBE") && $rd ==
"172.17.0.5:5060") { # CUSTOMIZE ME
                                 # in-dialog subscribe requests
                                 route(2);
                                 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
                                         t_relay();
                                         exit;
                                 } else {
                                         # ACK without matching transaction
->
                                         # ignore and discard
                                         exit;
                                 }
                         }
                         sl_send_reply("404","Not here");
                 }
                 exit;
         }

         # CANCEL processing
         if (is_method("CANCEL"))
         {
                 if (t_check_trans())
                         t_relay();
                 exit;
         }

         t_check_trans();

         if ( !(is_method("REGISTER")  ) ) {

                 if (from_uri==myself)

                 {

                 } else {
                         # if caller is not local, then called number must be
local

                         if (!uri==myself) {
                                 send_reply("403","Rely forbidden");
                                 exit;
                         }
                 }

         }

         # preloaded route checking
         if (loose_route()) {
                 xlog("L_ERR",
                 "Attempt to route with preloaded Route's
[$fu/$tu/$ru/$ci]");
                 if (!is_method("ACK"))
                         sl_send_reply("403","Preload Route denied");
                 exit;
         }

         # record routing
         if (!is_method("REGISTER|MESSAGE"))
                 record_route();

         # account only INVITEs
         if (is_method("INVITE")) {

                 setflag(1); # do accounting
         }


         if (!uri==myself) {
                 append_hf("P-hint: outbound\r\n");

                 route(1);
         }

         # requests for my domain

         if( is_method("PUBLISH|SUBSCRIBE"))
                         route(2);

         if (is_method("REGISTER"))
         {


                 if ( proto==TCP ||  0 ) setflag(7);

                 if (!save("location"))
                         sl_reply_error();

                 exit;
         }

         if ($rU==NULL) {
                 # request with no Username in RURI
                 sl_send_reply("484","Address Incomplete");
                 exit;
         }







         # do lookup with method filtering
         if (!lookup("location","m")) {


                 t_newtran();
                 t_reply("404", "Not Found");
                 exit;
         }



         # when routing via usrloc, log the missed calls also
         setflag(2);
         route(1);
}


route[1] {
         # for INVITEs enable some additional helper routes
         if (is_method("INVITE")) {



                 t_on_branch("2");
                 t_on_reply("2");
                 t_on_failure("1");
         }



         if (!t_relay()) {
                 send_reply("500","Internal Error");
         };
         exit;
}


# Presence route
route[2]
{
         if (!t_newtran())
         {
                 sl_reply_error();
                 exit;
         }

         if(is_method("PUBLISH"))
         {
                 force_rport();
                 handle_publish();
         }
         else
         if( is_method("SUBSCRIBE"))
         {
                 force_rport();
                 handle_subscribe();
         }

         exit;
}


branch_route[2] {
         xlog("new branch at $ru\n");
}


onreply_route[2] {

         xlog("incoming reply\n");
}


failure_route[1] {
         if (t_was_cancelled()) {
                 exit;
         }

         # uncomment the following lines if you want to block client
         # redirect based on 3xx replies.
         ##if (t_check_status("3[0-9][0-9]")) {
         ##t_reply("404","Not found");
         ##      exit;
         ##}


}
---------------------------------------------------------------------------

The config of presence is as generated from the tool, I just added
force_rport().

I do not have any idea why this is happening.

Appreciate your help again.

Thanks,
Surya



--
View this message in context: 
http://opensips-open-sip-server.1449251.n2.nabble.com/Public-IP-dispatcher-and-private-ip-presence-servers-tp7604684p7604701.html
Sent from the OpenSIPS - Users mailing list archive at Nabble.com.

_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users



_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to