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

Reply via email to