[sr-dev] git:4.3:41a211e6: modules/rls: normalize RLS entry URIs

Juha Heinanen jh at tutpro.com
Fri Jul 3 20:55:42 CEST 2015


Module: kamailio
Branch: 4.3
Commit: 41a211e6c13dcecaa6752238d63dfae932433ea7
URL: https://github.com/kamailio/kamailio/commit/41a211e6c13dcecaa6752238d63dfae932433ea7

Author: Juha Heinanen <jh at tutpro.com>
Committer: Juha Heinanen <jh at tutpro.com>
Date: 2015-07-03T21:54:22+03:00

modules/rls: normalize RLS entry URIs

- RLS entry URI is xs:AnyURI, which may be an absolute or relative URI.
  In relative URI, URI scheme is missing.

(cherry picked from commit 68bb6b35098f5555ca35ddb21527660e46b7336a)

---

Modified: modules/rls/subscribe.c

---

Diff:  https://github.com/kamailio/kamailio/commit/41a211e6c13dcecaa6752238d63dfae932433ea7.diff
Patch: https://github.com/kamailio/kamailio/commit/41a211e6c13dcecaa6752238d63dfae932433ea7.patch

---

diff --git a/modules/rls/subscribe.c b/modules/rls/subscribe.c
index 09d988b..a4735b2 100644
--- a/modules/rls/subscribe.c
+++ b/modules/rls/subscribe.c
@@ -982,23 +982,32 @@ int send_resource_subs(char* uri, void* param)
 	str pres_uri, *tmp_str;
 	struct sip_uri parsed_pres_uri;
 	int duplicate = 0;
+	str *normalized_uri;
 	
 	subs_info_t *s = (subs_info_t *) ((void**)param)[0];
 	list_entry_t **rls_contact_list = (list_entry_t **) ((void**)param)[1];
 
 	pres_uri.s = uri;
 	pres_uri.len = strlen(uri);
-	if (parse_uri(pres_uri.s, pres_uri.len, &parsed_pres_uri) < 0)
-	{
-		LM_ERR("bad uri: %.*s\n", pres_uri.len, pres_uri.s);
-		return -1;
+
+	normalized_uri = normalize_sip_uri(&pres_uri);
+	if (normalized_uri->s == NULL || normalized_uri->len == 0) {
+	    LM_ERR("failed to normalize RLS entry URI %.*s\n",
+		   pres_uri.len, pres_uri.s);
+	    return -1;
+	}
+	
+	if (parse_uri(normalized_uri->s, normalized_uri->len, &parsed_pres_uri)
+	    < 0) {
+	    LM_ERR("bad uri: %.*s\n", normalized_uri->len, normalized_uri->s);
+	    return -1;
 	}
 
 	if (check_self(&parsed_pres_uri.host, 0, PROTO_NONE) != 1
 		&& rls_disable_remote_presence != 0)
 	{
 		LM_WARN("Unable to subscribe to remote contact %.*s for watcher %.*s\n",
-				pres_uri.len, pres_uri.s,
+				normalized_uri->len, normalized_uri->s,
 				s->watcher_uri->len,
 				s->watcher_uri->s);
 		return 1;
@@ -1009,8 +1018,8 @@ int send_resource_subs(char* uri, void* param)
 	if (rls_max_backend_subs > 0 && ++counter > rls_max_backend_subs)
 		return 1;
 
-	s->pres_uri = &pres_uri;
-	s->remote_target = &pres_uri;
+	s->pres_uri = normalized_uri;
+	s->remote_target = normalized_uri;
 
 	/* Build list of contacts... checking each contact exists only once */
 	if ((tmp_str = (str *)pkg_malloc(sizeof(str))) == NULL)
@@ -1024,8 +1033,8 @@ int send_resource_subs(char* uri, void* param)
 		LM_ERR("out of private memory\n");
 		return -1;
 	}
-	memcpy(tmp_str->s, pres_uri.s, pres_uri.len);
-	tmp_str->len = pres_uri.len;
+	memcpy(tmp_str->s, normalized_uri->s, normalized_uri->len);
+	tmp_str->len = normalized_uri->len;
 	*rls_contact_list = list_insert(tmp_str, *rls_contact_list, &duplicate);
 	if (duplicate != 0)
 	{




More information about the sr-dev mailing list