[asterisk-commits] mmichelson: branch 12 r412582 - /branches/12/res/res_pjsip/location.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Apr 18 11:39:58 CDT 2014


Author: mmichelson
Date: Fri Apr 18 11:39:52 2014
New Revision: 412582

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=412582
Log:
Allow for multiple contacts to be configured in a single contact= line.

This is useful for configuring multiple permanent contacts for an AOR when using
realtime AORs.

Review: https://reviewboard.asterisk.org/r/3462


Modified:
    branches/12/res/res_pjsip/location.c

Modified: branches/12/res/res_pjsip/location.c
URL: http://svnview.digium.com/svn/asterisk/branches/12/res/res_pjsip/location.c?view=diff&rev=412582&r1=412581&r2=412582
==============================================================================
--- branches/12/res/res_pjsip/location.c (original)
+++ branches/12/res/res_pjsip/location.c Fri Apr 18 11:39:52 2014
@@ -290,31 +290,37 @@
 {
 	struct ast_sip_aor *aor = obj;
 	const char *aor_id = ast_sorcery_object_get_id(aor);
-	struct ast_sip_contact *contact;
-	char contact_id[strlen(aor_id) + strlen(var->value) + 2 + 1];
-
-	if (ast_sip_push_task_synchronous(NULL, permanent_contact_validate, (char *) var->value)) {
-		ast_log(LOG_ERROR, "Permanent URI on aor '%s' with contact '%s' failed to parse\n",
-			aor_id, var->value);
-		return -1;
-	}
-
-	if (!aor->permanent_contacts) {
-		aor->permanent_contacts = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK,
-			AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, permanent_uri_sort_fn, NULL);
+	char *contacts = ast_strdupa(var->value);
+	char *contact_uri;
+
+	while ((contact_uri = strsep(&contacts, ","))) {
+		struct ast_sip_contact *contact;
+		char contact_id[strlen(aor_id) + strlen(contact_uri) + 2 + 1];
+
+		if (ast_sip_push_task_synchronous(NULL, permanent_contact_validate, contact_uri)) {
+			ast_log(LOG_ERROR, "Permanent URI on aor '%s' with contact '%s' failed to parse\n",
+				ast_sorcery_object_get_id(aor), contact_uri);
+			return -1;
+		}
+
 		if (!aor->permanent_contacts) {
+			aor->permanent_contacts = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_NOLOCK,
+				AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, permanent_uri_sort_fn, NULL);
+			if (!aor->permanent_contacts) {
+				return -1;
+			}
+		}
+
+		snprintf(contact_id, sizeof(contact_id), "%s@@%s", aor_id, contact_uri);
+		contact = ast_sorcery_alloc(ast_sip_get_sorcery(), "contact", contact_id);
+		if (!contact) {
 			return -1;
 		}
-	}
-
-	snprintf(contact_id, sizeof(contact_id), "%s@@%s", aor_id, var->value);
-	contact = ast_sorcery_alloc(ast_sip_get_sorcery(), "contact", contact_id);
-	if (!contact) {
-		return -1;
-	}
-	ast_string_field_set(contact, uri, var->value);
-	ao2_link(aor->permanent_contacts, contact);
-	ao2_ref(contact, -1);
+
+		ast_string_field_set(contact, uri, contact_uri);
+		ao2_link(aor->permanent_contacts, contact);
+		ao2_ref(contact, -1);
+	}
 
 	return 0;
 }




More information about the asterisk-commits mailing list