I forward this mail with an attached fix for the issue I encountered.
It enables the service lookup to include parameters from the URI.
So the RLS now respond with a 200OK to the subscribe request for a
parametized service uri.
But I'm still stuck because the service node parser doesn't handle
resource-list tag in the service node so the RLS doesn't expand
subscription...
This could be fixed inside notify.c:process_list_and_exec
Eric.
---------- Forwarded message ----------
From: Eric PTAK <[email protected]>
Date: 2008/12/13
Subject: Re: [RLS] Cannot found service uri in rls-services
To: [email protected]
After a look at modules/rls/subcribe.c from trunk, I found line 557 :
if(uandd_to_uri(msg->parsed_uri.user, msg->parsed_uri.host,
&subs.pres_uri)< 0)
then, line 566 :
if( get_resource_list(&subs.pres_uri, fu.user, fu.host,
&service_node, &doc) < 0)
In my memory, the pres_uri should include the parameters.
Eric.
2008/12/12 Eric PTAK <[email protected]>
Hi all,
>
> I'm currently integrating OpenSIPS with OpenXCAP.
> After a lot a problem with ubuntu libraries in order to setup openxcap, I'm
> now facing to another issue with RLS module.
> I'm using Mercuro and it subsribes to sip:al...@domain;pres-list=Default,
> but the RLS looks for a service at sip:al...@domain so it response by a
> 404 Not Found error.
>
> This is the xml files from xcap :
>
> ep...@rd-srv-devlnx2:~$ <ep...@rd-srv-devlnx2:%7E$> xcapclient --app
> rls-services get
> get
> http://10.26.52.122:8080/xcap-root/rls-services/users/sip:al...@domain/index
> etag: "d113935c4c7324c99077a925492251b2"
> content-type: application/rls-services+xml
> content-length: 467
> <?xml version="1.0" encoding="utf-8"?>
> <rls-services xmlns:rl="urn:ietf:params:xml:ns:resource-lists"
> xmlns="urn:ietf:params:xml:ns:rls-services">
> <service uri="sip:al...@domain;pres-list=Default">
> <resource-list>
> http://10.26.52.122:8080/xcap-root/resource-lists/users/sip%3aalice%40domain/index/~~/resource-lists/list...@name=%22default%22%5d<http://10.26.52.122:8080/xcap-root/resource-lists/users/sip%3aalice%40domain/index/%7E%7E/resource-lists/list...@name=%22default%22%5d>
> </resource-list>
> <packages>
> <package>presence</package>
> </packages>
> </service>
> </rls-services>
>
> ep...@rd-srv-devlnx2:~$ <ep...@rd-srv-devlnx2:%7E$> xcapclient --app
> resource-lists get
> get
> http://10.26.52.122:8080/xcap-root/resource-lists/users/sip:al...@domain/index
> etag: "e153e7e4688122a04434b77cd1ecb5e1"
> content-type: application/resource-lists+xml
> content-length: 324
> <?xml version="1.0" encoding="utf-8"?>
> <resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists">
> <list name="Default">
> <display-name>All Contacts</display-name>
> <entry uri="sip:b...@domain"
> xmlns="urn:ietf:params:xml:ns:resource-lists">
> <display-name>bob</display-name>
> </entry></list>
> </resource-lists>
> and this is the stack trace :
>
> Dec 12 15:17:15 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]: SUBSCRIBE
> presence from sip:al...@domain to sip:al...@domain;pres-list=Default
> (Mercuro IMS Client Beta (4.0.1011.0))
> Dec 12 15:17:15 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:core:parse_headers: flags=ffffffffffffffff
> Dec 12 15:17:15 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:core:parse_headers: flags=ffffffffffffffff
> Dec 12 15:17:15 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:presence:search_event: start event= [presence]
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:rls:rls_handle_subscribe: 'To' header ALREADY PARSED: <sip:al...@domain
> ;pres-list=Default>
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:rls:get_resource_list: Searched RL document for user sip:al...@domain
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:core:db_new_result: allocate 28 bytes for result set at 0x81b52b0
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_get_columns: 2 columns returned from the query
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:core:db_allocate_columns: allocate 8 bytes for result names at 0x81b5af8
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:core:db_allocate_columns: allocate 8 bytes for result types at 0x81b5360
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_get_columns: allocate 8 bytes for RES_NAMES[0] at
> 0x81b5820
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_get_columns: RES_NAMES(0x81b5820)[0]=[doc]
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_get_columns: use DB_BLOB result type
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_get_columns: allocate 8 bytes for RES_NAMES[1] at
> 0x81b5838
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_get_columns: RES_NAMES(0x81b5838)[1]=[etag]
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_get_columns: use DB_STRING result type
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_convert_rows: allocate 8 bytes for rows at 0x81b5948
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_convert_row: allocate 40 bytes for row values at
> 0x81b5860
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_str2val: converting BLOB [<?xml version="1.0"
> encoding="utf-8"?>^M <rls-services
> xmlns:rl="urn:ietf:params:xml:ns:resource-lists"
> xmlns="urn:ietf:params:xml:ns:rls-services">^M <service
> uri="sip:al...@domain;pres-list=Default">^M <resource-list>
> http://10.26.52.122:8080/xcap-root/resource-lists/users/sip%3aalice%40domain/index/~~/resource-lists/list...@name=%22default%22%5d<http://10.26.52.122:8080/xcap-root/resource-lists/users/sip%3aalice%40domain/index/%7E%7E/resource-lists/list...@name=%22default%22%5d></resource-list>^M
> <packages>^M <package>presence</package>^M </packages>^M
> </service>^M </rls-services>]
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:db_mysql:db_mysql_str2val: converting STRING
> [d113935c4c7324c99077a925492251b2]
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:rls:get_resource_list: rls_services document: <?xml version="1.0"
> encoding="utf-8"?>^M <rls-services
> xmlns:rl="urn:ietf:params:xml:ns:resource-lists"
> xmlns="urn:ietf:params:xml:ns:rls-services">^M <service
> uri="sip:al...@domain;pres-list=Default">^M <resource-list>
> http://10.26.52.122:8080/xcap-root/resource-lists/users/sip%3aalice%40domain/index/~~/resource-lists/list...@name=%22default%22%5d<http://10.26.52.122:8080/xcap-root/resource-lists/users/sip%3aalice%40domain/index/%7E%7E/resource-lists/list...@name=%22default%22%5d></resource-list>^M
> <packages>^M <package>presence</package>^M </packages>^M
> </service>^M </rls-services>
> Dec 12 15:17:16 rd-srv-devlnx2 /usr/local/sbin/opensips[25465]:
> DBG:rls:get_resource_list: service uri sip:al...@domain not found in rl
> document for user sip:al...@domain
>
Index: modules/presence/utils_func.h
===================================================================
--- modules/presence/utils_func.h (révision 5055)
+++ modules/presence/utils_func.h (copie de travail)
@@ -71,6 +71,45 @@
return 0;
}
+static inline int uanddandp_to_uri(str user, str domain, str params, str *out)
+{
+ int size;
+
+ if(out==0)
+ return -1;
+
+ size = user.len + domain.len + params.len +8;
+
+ out->s = (char*)pkg_malloc(size);
+ if(out->s == NULL)
+ {
+ LM_ERR("no more memory\n");
+ return -1;
+ }
+ strcpy(out->s,"sip:");
+ out->len = 4;
+ if( user.len != 0)
+ {
+ memcpy(out->s+out->len, user.s, user.len);
+ out->len += user.len;
+ out->s[out->len++] = '@';
+ }
+
+ memcpy(out->s + out->len, domain.s, domain.len);
+ out->len += domain.len;
+
+ if (params.len != 0)
+ {
+ out->s[out->len++] = ';';
+ memcpy(out->s+out->len, params.s, params.len);
+ out->len += params.len;
+ }
+
+ out->s[out->len] = '\0';
+
+ return 0;
+}
+
static inline str* get_local_contact(struct sip_msg* msg)
{
str ip;
Index: modules/rls/subscribe.c
===================================================================
--- modules/rls/subscribe.c (révision 5055)
+++ modules/rls/subscribe.c (copie de travail)
@@ -554,8 +554,8 @@
}
/*verify if Request URI represents a list by asking xcap server*/
- if(uandd_to_uri(msg->parsed_uri.user, msg->parsed_uri.host,
- &subs.pres_uri)< 0)
+ if(uanddandp_to_uri(msg->parsed_uri.user, msg->parsed_uri.host,
+ msg->parsed_uri.params, &subs.pres_uri)< 0)
{
LM_ERR("while constructing uri from user and domain\n");
reply_code = 500;
_______________________________________________
Devel mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/devel