[SR-Users] pua_xmpp questions

Daniel-Constantin Mierla miconda at gmail.com
Fri Aug 12 22:58:40 CEST 2011


Hello,

I applied the patches to master branch. One seemed to be in the reverse 
order (diff between file.new and file.old instead of diff between 
file.old and file.new), can you double-check if that is ok? If fine, 
then I will backport to 3.1 branch as well.

Cheers,
Daniel

On 8/10/11 1:44 PM, Daniel-Constantin Mierla wrote:
> Hi Laura,
>
> thanks, I will apply the patches soon.
>
> Cheers,
> Daniel
>
> On 8/10/11 12:32 PM, laura testi wrote:
>> Hi Daniel,
>> please find the attached diff files and the files patched.
>>
>> Best Regards,
>> Laura
>>
>> On Tue, Aug 9, 2011 at 4:34 PM, Daniel-Constantin Mierla
>> <miconda at gmail.com>  wrote:
>>> Hi Laura,
>>>
>>> thanks for the patches. I will apply them. Can you attach the patches as
>>> files instead of pasting them inline, so I can just download them from email
>>> and apply? The mail client breaks the withe-spacing and will take me some
>>> time to align them.
>>>
>>> Cheers,
>>> Daniel
>>>
>>> On 8/8/11 6:00 PM, laura testi wrote:
>>>> Thank you very much for your reply.
>>>>
>>>> Finally we have successfully configure the xmpp gateway to work (both
>>>> presence and IM) with another kamailio server which provide SIP
>>>> REGISTRAR/PROXY/PRESENCE (with integrated xcap function).
>>>>
>>>> The key points are to put the server address parameter of presence and
>>>> pua_xmpp module to the gateway itself instead of the main Presence
>>>> Server of the SIP/SIMPLE domains. But the outbound_proxy of the xmpp
>>>> module must point to the main PROXY server of the SIP/SIMPLE domains.
>>>> The outbound_proxy of pua is not specify, so it point itself.
>>>>
>>>> following are this part of the configuration:
>>>> modparam("xmpp", "outbound_proxy", "<main_proxy_uri>")
>>>> modparam("presence", "server_address","sip:10.10.5.210:5060")
>>>> modparam("pua_xmpp", "server_address","sip:10.10.5.210:5060")
>>>>
>>>> Now it works fine withe some bugs:
>>>> - xmpp add sip contact: ok
>>>> - sip add xmpp contact: ok
>>>> - xmpp see the sip contact presence: ok
>>>> - sip see the xmpp contact presence: ok
>>>> - sip IM to xmpp: ok
>>>> - xmpp IM to sip: ok
>>>>
>>>> the bugs we found are following:
>>>> - the online/offline status is ok in both direction (SIP<-->    XMPP)
>>>> - other status (away/busy) is not ok from XMPP to SIP
>>>> - busy status is not ok from SIP to XMPP
>>>> - each time XMPP contact change the status, triger a new SUBSCRIBE in xmpp
>>>>    gateway which generate multiple same subscriptions with different callid
>>>>    in both active_watchers and pua tables. This also makes multiple
>>>> multiple NOTIFY
>>>>    generation from the main Presence Server to GW when the SIP contact
>>>> change
>>>>    it's status
>>>>
>>>> We have make the following patches in the pua_xmpp module that fix the
>>>> above bugs. Hope it can help.
>>>>
>>>> -------------------------------------------------------------------------------------------------------------------------
>>>> # diff -u simple2xmpp.c.orig simple2xmpp.c
>>>> --- simple2xmpp.c.orig  2011-08-05 16:11:55.000000000 +0200
>>>> +++ simple2xmpp.c       2011-08-08 14:57:25.000000000 +0200
>>>> @@ -87,7 +87,7 @@
>>>>          if(msg->to->parsed != NULL)
>>>>          {
>>>>                  pto = (struct to_body*)msg->to->parsed;
>>>> -               LM_ERR("'To' header ALREADY
>>>> PARSED:<%.*s>\n",pto->uri.len,pto->uri.s);
>>>> +               LM_DBG("'To' header ALREADY
>>>> PARSED:<%.*s>\n",pto->uri.len,pto->uri.s);
>>>>          }
>>>>          else
>>>>          {
>>>> @@ -415,7 +415,8 @@
>>>>                  goto error;
>>>>          }
>>>>
>>>> -       if(xmlStrcasecmp((unsigned char*)note, (unsigned char*)"away")==
>>>> 0)
>>>> +       if((xmlStrcasecmp((unsigned char*)note, (unsigned char*)"away")==
>>>> 0)||
>>>> +                       (xmlStrcasecmp((unsigned char*)note, (unsigned
>>>> char*)"On the phone")== 0))
>>>>          {
>>>>                  new_node = xmlNewChild(xmpp_root, NULL, BAD_CAST "show",
>>>>                                  BAD_CAST "away");
>>>> @@ -456,12 +457,14 @@
>>>>                                          LM_ERR("while adding node:
>>>> idle\n");
>>>>                                          goto error;
>>>>                                  }
>>>> -                       }
>>>> -                       else */
>>>> +                       }*/
>>>> +                       else
>>>>                                  if((xmlStrcasecmp((unsigned char*)note,
>>>>                                          (unsigned char*)"dnd")== 0)||
>>>>                                          (xmlStrcasecmp((unsigned
>>>> char*)note,
>>>> -                                               (unsigned char*)"do
>>>> not disturb")== 0))
>>>> +                                               (unsigned char*)"do
>>>> not disturb")== 0)||
>>>> +                                       (xmlStrcasecmp((unsigned
>>>> char*)note,
>>>> +                                       (unsigned char*)"Busy (DND)")==
>>>> 0))
>>>>                                  {
>>>>                                          new_node =
>>>> xmlNewChild(xmpp_root, NULL, BAD_CAST "show",
>>>>                                                          BAD_CAST "dnd");
>>>> @@ -471,6 +474,8 @@
>>>>                                                  goto error;
>>>>                                          }
>>>>                                  }
>>>> +                               else
>>>> +                                       LM_DBG("Not Found Status\n");
>>>>
>>>>
>>>>          /* adding status node */
>>>>
>>>>
>>>>
>>>>
>>>> -------------------------------------------------------------------------------------------------------------------------
>>>> # diff -u xmpp2simple.c.orig xmpp2simple.c
>>>> --- xmpp2simple.c.orig  2011-08-05 12:37:48.000000000 +0200
>>>> +++ xmpp2simple.c       2011-08-08 15:51:56.000000000 +0200
>>>> @@ -76,13 +76,13 @@
>>>>          {
>>>>                  LM_DBG("type attribut not present\n");
>>>>                  build_publish(pres_node, -1);
>>>> -               if(presence_subscribe(pres_node, 3600, XMPP_SUBSCRIBE)<
>>>>   0)
>>>> +       /*      if(presence_subscribe(pres_node, 3600, XMPP_SUBSCRIBE)<
>>>>   0)
>>>>                  {
>>>>                                  LM_ERR("when sending subscribe for
>>>> presence");
>>>>                                  xmlFree(pres_type);
>>>>                                  goto error;
>>>>                  }
>>>> -
>>>> +       */
>>>>
>>>>                  /* send subscribe after publish because in xmpp
>>>> subscribe message
>>>>                   * comes only when a new contact is inserted in buddy list
>>>> */
>>>> @@ -161,6 +161,8 @@
>>>>          char* type= NULL;
>>>>          char* status= NULL;
>>>>
>>>> +
>>>> +
>>>>          LM_DBG("start\n");
>>>>
>>>>          entity=(char*)pkg_malloc(7+ strlen(uri)*sizeof(char));
>>>> @@ -243,13 +245,13 @@
>>>>          if(show_cont)
>>>>          {
>>>>                  if(strcmp(show_cont, "xa")== 0)
>>>> -                       status= "not available";
>>>> +                       status= "Away";
>>>>                  else
>>>>                          if(strcmp(show_cont, "chat")== 0)
>>>> -                               status= "free for chat";
>>>> +                       status= "Online";
>>>>                  else
>>>>                          if(strcmp(show_cont, "dnd")== 0)
>>>> -                               status= "do not disturb";
>>>> +                       status= "Busy (DND)";
>>>>                  else
>>>>                          status= show_cont;
>>>>          }
>>>> @@ -264,8 +266,8 @@
>>>>                          goto error;
>>>>                  }
>>>>                  */
>>>> -               node = xmlNewChild(root_node, NULL, BAD_CAST "note",
>>>> -                               BAD_CAST status_cont);
>>>> +               node = xmlNewChild(tuple_node, NULL, BAD_CAST "note",
>>>> +                               BAD_CAST status);
>>>>                  if(node== NULL)
>>>>                  {
>>>>                          LM_ERR("while adding node\n");
>>>> @@ -273,8 +275,8 @@
>>>>                  }
>>>>          }else
>>>>                  if(show_cont)
>>>> -               {
>>>> -                       node = xmlNewChild(root_node, NULL, BAD_CAST
>>>> "note",
>>>> +               {
>>>> +                       node = xmlNewChild(tuple_node, NULL, BAD_CAST
>>>> "note",
>>>>                                          BAD_CAST status);
>>>>                          if(node== NULL)
>>>>                          {
>>>> @@ -295,23 +297,6 @@
>>>>                                  goto error;
>>>>                          }
>>>>                  }
>>>> -               node=  xmlNewChild(person_node, NULL, BAD_CAST
>>>> "activities",
>>>> -                               BAD_CAST 0);
>>>> -               if(node== NULL)
>>>> -               {
>>>> -                       LM_ERR("while adding node\n");
>>>> -                       goto error;
>>>> -               }
>>>> -
>>>> -
>>>> -               if( xmlNewChild(person_node, NULL, BAD_CAST "note",
>>>> -                                       BAD_CAST status )== NULL)
>>>> -               {
>>>> -                       LM_ERR("while adding node\n");
>>>> -                       goto error;
>>>> -               }
>>>> -
>>>> -
>>>>          }
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Mon, Aug 1, 2011 at 12:10 PM, Daniel-Constantin Mierla
>>>> <miconda at gmail.com>    wrote:
>>>>> Hello,
>>>>>
>>>>> On 7/29/11 10:32 AM, laura testi wrote:
>>>>>> Hi all,
>>>>>> we are trying to setup a kamailio presence server in SIP/SIMPLE domain
>>>>>> to interwork with XMPP domains including the GTalk (see the config
>>>>>> below). The architecture is like this:
>>>>>> - SIP/SIMPLE server: kamailio3.14 with full configuration with XCAP
>>>>>> integration
>>>>>> - XMPP Gateway: another kamailio server + ejabberd server
>>>>>>      - component mode
>>>>>>      - xmpp moduleL: outbound proxy to the Kamailio SIP/SIMPLE server
>>>>>>      - pua_xmpp: no outbound proxy?
>>>>>> - XMPP server: ejabberd
>>>>>>
>>>>>> The users from XMPP domain can add the SIP account and see the
>>>>>> presence of the SIP users, but not vice versa. The chat from both
>>>>>> directions works fine.
>>>>>>
>>>>>> in the Presence Server, we have configured the kamailio with XCAP
>>>>>> integration. We have the following doubts:
>>>>>> - does pua_xmpp/pua modules need the xcap integration for the presence
>>>>>> integration with xmpp domains?
>>>>> no, there is no requirement of xcap for sip-xmpp presence gatewaying.
>>>>>>    because to use xcap for presence authorization rules, it needs the
>>>>>> sip clients support the xcap
>>>>>> - does pua_xmpp/pua support xcap? otherwise how to works?
>>>>> This mechanism of auth rules in SIP is not compatible with XMPP, afaik.
>>>>> In
>>>>> xmpp they have in-band (using XMPP) transfer of the buddy list, unlike in
>>>>> SIMPLE where is XCAP over HTTP -- it is more like end-to-end presence
>>>>> model
>>>>> from early sip specifications.
>>>>>
>>>>>
>>>>>> - in case of multiple SIP/SIMPLE presence server, how we can configure
>>>>>> the server_address of
>>>>>>    pua_xmpp and presence parameter in xmpp gw?
>>>>> Either use many instances or, as workaround, somehow route the traffic to
>>>>> itself or other instance in order to re-write some headers.
>>>>>
>>>>> Cheers,
>>>>> Daniel
>>>>>
>>>>>
>>>>>> Can you help us to clarify the doubts please?
>>>>>>
>>>>>> Many thanks in advanced!
>>>>>>
>>>>>> Best Regards,
>>>>>> Laura
>>>>>>
>>>>>>
>>>>>> PS: following are the main configuration of the xmpp GW:
>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------------------------------
>>>>>> ...
>>>>>> modparam("xmpp", "domain_separator", "*")
>>>>>> modparam("xmpp", "backend", "component")
>>>>>> modparam("xmpp", "gateway_domain", "<mygwdomain>")
>>>>>> modparam("xmpp", "xmpp_domain", "<mygwdomain>")
>>>>>> modparam("xmpp", "xmpp_host", "127.0.0.1")
>>>>>> modparam("xmpp", "xmpp_password", "secret")
>>>>>> modparam("xmpp", "outbound_proxy", "<my oubound proxy uri>")
>>>>>> modparam("pua", "outbound_proxy", "<my outbound proxy uri>")
>>>>>> modparam("pua", "update_period", 60)
>>>>>> modparam("pua", "default_expires", 1200)
>>>>>> modparam("presence", "server_address", "<my presence server uri>")
>>>>>> modparam("pua_xmpp", "server_address", "<my presence server uri>")
>>>>>>
>>>>>>
>>>>>>
>>>>>> route{
>>>>>>    route(REQINIT);
>>>>>>    t_check_trans();
>>>>>>
>>>>>>   if (uri =~ "sip:.+ at .*<myxmppdomain>") {
>>>>>>      route(PRESENCE);
>>>>>>      if ($rU==$null)
>>>>>>      {
>>>>>>        # request with no Username in RURI
>>>>>>        sl_send_reply("484","Address Incomplete");
>>>>>>        exit;
>>>>>>      }
>>>>>>      route(CHAT);
>>>>>>    }
>>>>>>
>>>>>>   xlog("L_INFO", "*** xmpp: unhandled message type\n");
>>>>>>   t_reply("503", "Service unavailable");
>>>>>>   return;
>>>>>>
>>>>>> }
>>>>>>
>>>>>> ...
>>>>>>
>>>>>> route[CHAT] {
>>>>>>         if(!is_method("MESSAGE"))
>>>>>>              return;
>>>>>>
>>>>>>         if (!t_newtran()) {
>>>>>>            sl_reply_error();
>>>>>>            exit;
>>>>>>         }
>>>>>>
>>>>>>         xlog("L_INFO", "*** xmpp-handled MESSAGE message.");
>>>>>>         if ($cT=~"^text/plain") {
>>>>>>                 if (xmpp_send_message()) {
>>>>>>                   t_reply("200", "Accepted");
>>>>>>                 } else {
>>>>>>                   t_reply("404", "Not found");
>>>>>>                 }
>>>>>>         } else {
>>>>>>                 xlog("L_INFO", "*** xmpp-handled MESSAGE, ignoring not
>>>>>> text
>>>>>> messages");
>>>>>>                 t_reply("200", "Accepted");
>>>>>>         }
>>>>>>
>>>>>>         t_release();
>>>>>>         exit;
>>>>>> }
>>>>>>
>>>>>> route[PRESENCE] {
>>>>>>    if(!is_method("PUBLISH|SUBSCRIBE|NOTIFY"))
>>>>>>      return;
>>>>>>
>>>>>>    # create new transaction to catch retransmissions
>>>>>>    if (!t_newtran())
>>>>>>    {
>>>>>>      sl_reply_error();
>>>>>>      exit;
>>>>>>    }
>>>>>>
>>>>>>    if( is_method("NOTIFY"))
>>>>>>    {
>>>>>>      xlog("L_INFO", "*** xmpp-handled NOTIFY message.");
>>>>>>                 if(pua_xmpp_notify())
>>>>>>                         t_reply("200", "OK");
>>>>>>                 t_release();
>>>>>>                 exit;
>>>>>>    } else if( is_method("SUBSCRIBE"))
>>>>>>         {
>>>>>>                 xlog("L_INFO", "*** xmpp-handled SUBSCRIBE message.\n");
>>>>>>                 handle_subscribe();
>>>>>>                 if($(hdr(Event))== "presence")
>>>>>>                 {
>>>>>>                         pua_xmpp_req_winfo("$ruri", "$hdr(Expires)");
>>>>>>                 }
>>>>>>                 t_release();
>>>>>>                 exit;
>>>>>>   } else if(is_method("PUBLISH"))
>>>>>>   {
>>>>>>      handle_publish();
>>>>>>      t_release();
>>>>>>      exit;
>>>>>>   }
>>>>>> }
>>>>>>
>>>>>> ...
>>>>>>
>>>>>> _______________________________________________
>>>>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>>>>>> sr-users at lists.sip-router.org
>>>>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>> --
>>>>> Daniel-Constantin Mierla --http://www.asipto.com
>>>>> Kamailio Advanced Training, Oct 10-13, Berlin:http://asipto.com/u/kat
>>>>> http://linkedin.com/in/miconda  -- http://twitter.com/miconda
>>>>>
>>>>>
>>>> _______________________________________________
>>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>>>> sr-users at lists.sip-router.org
>>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>> --
>>> Daniel-Constantin Mierla --http://www.asipto.com
>>> Kamailio Advanced Training, Oct 10-13, Berlin:http://asipto.com/u/kat
>>> http://linkedin.com/in/miconda  -- http://twitter.com/miconda
>>>
>> >
>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>> sr-users at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
> -- 
> Daniel-Constantin Mierla --http://www.asipto.com
> Kamailio Advanced Training, Oct 10-13, Berlin:http://asipto.com/u/kat
> http://linkedin.com/in/miconda  -- http://twitter.com/miconda
>
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users

-- 
Daniel-Constantin Mierla -- http://www.asipto.com
Kamailio Advanced Training, Oct 10-13, Berlin: http://asipto.com/u/kat
http://linkedin.com/in/miconda -- http://twitter.com/miconda

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20110812/d5ca7efd/attachment-0001.htm>


More information about the sr-users mailing list