[sr-dev] git:master: pua_reginfo: reflect use domain from usrloc

Daniel-Constantin Mierla miconda at gmail.com
Mon Nov 4 10:05:37 CET 2013


Module: sip-router
Branch: master
Commit: 8a246b06838b99e63d86fe186b23a23f57347548
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=8a246b06838b99e63d86fe186b23a23f57347548

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Mon Nov  4 10:04:35 2013 +0100

pua_reginfo: reflect use domain from usrloc

- avoid duplicate contacts if domain is not considered
- patch by  Wonbin Cho, FS#350

---

 modules/pua_reginfo/notify.c      |   24 ++++++++++++++++--------
 modules/pua_reginfo/pua_reginfo.c |    7 +++++++
 modules/pua_reginfo/pua_reginfo.h |    2 ++
 3 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/modules/pua_reginfo/notify.c b/modules/pua_reginfo/notify.c
index 1187e34..c1ea699 100644
--- a/modules/pua_reginfo/notify.c
+++ b/modules/pua_reginfo/notify.c
@@ -208,6 +208,8 @@ int reginfo_parse_event(char * s) {
 int process_body(str notify_body, udomain_t * domain) {
 	xmlDocPtr doc= NULL;
 	xmlNodePtr doc_root = NULL, registrations = NULL, contacts = NULL, uris = NULL;
+	char uri[MAX_URI_SIZE];
+	str aor_key = {0, 0};
 	str aor = {0, 0};
 	str callid = {0, 0};
 	str contact_uri = {0, 0};
@@ -260,14 +262,20 @@ int process_body(str notify_body, udomain_t * domain) {
 			goto next_registration;
 		}
 
+		if (reginfo_use_domain) {
+			aor_key.s = uri;
+		} else {
+			aor_key.s = parsed_aor.user.s;
+		}
+		aor_key.len = strlen(aor_key.s);
 		/* Now let's lock that domain for this AOR: */		
-		ul.lock_udomain(domain, &aor);
+		ul.lock_udomain(domain, &aor_key);
 		/* and retrieve the user-record for this user: */
-		result = ul.get_urecord(domain, &aor, &ul_record);
+		result = ul.get_urecord(domain, &aor_key, &ul_record);
 		if (result < 0) {
-			ul.unlock_udomain(domain, &aor);
+			ul.unlock_udomain(domain, &aor_key);
 			LM_ERR("failed to query usrloc (AOR %.*s)\n",
-				aor.len, aor.s);
+				aor_key.len, aor_key.s);
 			goto next_registration;
 		}
 		/* If no contacts found, then set the ul_record to NULL */
@@ -285,7 +293,7 @@ int process_body(str notify_body, udomain_t * domain) {
 					}
 					ul_contact = ul_contact->next;
 				}
-				if (ul.delete_urecord(domain, &aor, ul_record) < 0) {
+				if (ul.delete_urecord(domain, &aor_key, ul_record) < 0) {
 					LM_ERR("failed to remove record from usrloc\n");
 				}
 				/* If already a registration with contacts was found, then keep that result.
@@ -371,7 +379,7 @@ int process_body(str notify_body, udomain_t * domain) {
 						contact_uri.len, contact_uri.s);
 
 					/* Add to Usrloc: */
-					result = process_contact(domain, &ul_record, parsed_aor.user, callid, cseq, expires, event, contact_uri);
+					result = process_contact(domain, &ul_record, aor_key, callid, cseq, expires, event, contact_uri);
 				
 					/* Process the result */
 					if (final_result != RESULT_CONTACTS_FOUND) final_result = result;
@@ -385,8 +393,8 @@ next_contact:
 next_registration:
 		// if (ul_record) ul.release_urecord(ul_record);		
 		/* Unlock the domain for this AOR: */
-		if (aor.len > 0)
-			ul.unlock_udomain(domain, &aor);
+		if (aor_key.len > 0)
+			ul.unlock_udomain(domain, &aor_key);
 
 		registrations = registrations->next;
 	}
diff --git a/modules/pua_reginfo/pua_reginfo.c b/modules/pua_reginfo/pua_reginfo.c
index 73d7113..b3ddb26 100644
--- a/modules/pua_reginfo/pua_reginfo.c
+++ b/modules/pua_reginfo/pua_reginfo.c
@@ -46,6 +46,8 @@ int publish_reginfo = 1;
 
 sruid_t _reginfo_sruid;
 
+int reginfo_use_domain = 0;
+
 /** Fixup functions */
 static int domain_fixup(void** param, int param_no);
 
@@ -167,6 +169,11 @@ static int mod_init(void)
 	if(sruid_init(&_reginfo_sruid, (char)'-', "regi", SRUID_INC)<0)
 		return -1;
 
+	/*
+	 * Import use_domain parameter from usrloc
+	 */
+	reginfo_use_domain = ul.use_domain;
+
 	return 0;
 }
 
diff --git a/modules/pua_reginfo/pua_reginfo.h b/modules/pua_reginfo/pua_reginfo.h
index 2ff8e54..972ae0b 100644
--- a/modules/pua_reginfo/pua_reginfo.h
+++ b/modules/pua_reginfo/pua_reginfo.h
@@ -34,4 +34,6 @@ str server_address;
 extern usrloc_api_t ul; /*!< Structure containing pointers to usrloc functions*/
 extern pua_api_t pua; /*!< Structure containing pointers to PUA functions*/
 
+extern int reginfo_use_domain;
+
 #endif




More information about the sr-dev mailing list