[SR-Users] Presence Dialog Info synchronisation issue

David kamailio.org at spam.lublink.net
Mon Nov 12 21:14:32 CET 2012


Hello,

I have two Kamailio boxes running.

First one routes calls between my phones and asterisk. Here are the 
extra lines compared to the default config that came with my 
installation on the first server. Let's call this server kamailio :

loadmodule "pua.so"
loadmodule "pua_mi.so"
loadmodule "pua_dialoginfo.so"
modparam("pua_dialoginfo", "include_localremote", 0)
modparam("pua_dialoginfo", "include_tags",        0)
modparam("pua_dialoginfo", "include_callid",      0)
modparam("pua_dialoginfo", "caller_confirmed", 1)
modparam("pua", "outbound_proxy", "sip:kamailio_presence_ip:5060")

if ( is_method("SUBSCRIBE") )
{
      t_relay("kamailio-presence-ip", "5060");
}

The second one handles presence stuff ( SUBSCRIBE and PUBLISH ), let's 
call it presence :

After the standard sanity checks :

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

     exit;


The problem is that I have two phones connected to the same username on 
the server.

Here is the sequence of events of a correctly functionning call :

1. Kamailio receives an INVITE
2. It sends the INVITE to each of the two phones
3. The first phone replies 180 Ringing
4. Kamailio sends a PUBLISH to presence
5. Presence replies with an OK, which includes a SIP-ETag header
6. Kamailio recieves the OK
7. Kamailio receives the 180 Ringing from the second phone
8. Kamailio sends a new PUBLISH with the SIP-If-Match using the value 
from the SIP-ETag header
9. Presence receives it, updates the presence table and sends an OK.

This is ok, the trouble is when the second 180 Ringing reaches Kamailio 
before the OK to the publish with the SIP-ETag.

1. Kamailio receives an INVITE
2. It sends the INVITE to each of the two phones
3. The first phone replies 180 Ringing
4. Kamailio sends a PUBLISH to presence
5. Kamailio receives the 180 Ringing from the second phone
6. Kamailio sends a PUBLISH to presence
7. Presence replies with an OK, which includes a SIP-ETag header
8. Presence replies with an OK, which includes a second SIP-ETag header
9. Kamailio recieves the OK
10. Kamailio recieves the OK

The presence table now has two seperate dialogs for the call because 
Kamailio didn't send the SIP-If-Match header as it did not yet receive 
the reply from presence.

When the two phones start ringing at the same time, the time between the 
two packets arriving at the server is shorter than a round trip to the 
presence server.

In the second scenario, Kamailio never updates the presence information 
using the first SIP-ETag, so the light on my phone stays stuck at "ringing".

Where do I go from here ?

Thanks,

David



















More information about the sr-users mailing list