[SR-Users] pua_xmpp questions
Daniel-Constantin Mierla
miconda at gmail.com
Wed Aug 10 13:44:43 CEST 2011
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20110810/8d354f51/attachment-0001.htm>
More information about the sr-users
mailing list