[asterisk-commits] mmichelson: branch mmichelson/sip_endpoint_reorg r395546 - in /team/mmichelso...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Jul 26 13:40:48 CDT 2013


Author: mmichelson
Date: Fri Jul 26 13:40:46 2013
New Revision: 395546

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=395546
Log:
Un-anonymize the structs within an ast_sip_endpoint (except media).

This allows to easily create initialization/destruction functions for the various types,
should they be required. This in turn allows for some string parameters to be moved from
the top-level endpoint structure to places where they belong.

Media will be handled in its own commit since it is a pretty large changeset.


Modified:
    team/mmichelson/sip_endpoint_reorg/include/asterisk/res_sip.h
    team/mmichelson/sip_endpoint_reorg/res/res_sip/sip_configuration.c
    team/mmichelson/sip_endpoint_reorg/res/res_sip_mwi.c
    team/mmichelson/sip_endpoint_reorg/res/res_sip_one_touch_record_info.c

Modified: team/mmichelson/sip_endpoint_reorg/include/asterisk/res_sip.h
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_endpoint_reorg/include/asterisk/res_sip.h?view=diff&rev=395546&r1=395545&r2=395546
==============================================================================
--- team/mmichelson/sip_endpoint_reorg/include/asterisk/res_sip.h (original)
+++ team/mmichelson/sip_endpoint_reorg/include/asterisk/res_sip.h Fri Jul 26 13:40:46 2013
@@ -317,6 +317,99 @@
 };
 
 /*!
+ * \brief Session timers options
+ */
+struct ast_sip_timer_options {
+	/*! Minimum session expiration period, in seconds */
+	unsigned int min_se;
+	/*! Session expiration period, in seconds */
+	unsigned int sess_expires;
+};
+
+/*!
+ * \brief Endpoint configuration for SIP extensions.
+ *
+ * SIP extensions, in this case refers to features
+ * indicated in Supported or Required headers.
+ */
+struct ast_sip_endpoint_extensions {
+	/*! Enabled SIP extensions */
+	unsigned int flags;
+	/*! Timer options */
+	struct ast_sip_timer_options timer;
+};
+
+struct ast_sip_mwi_configuration {
+	AST_DECLARE_STRING_FIELDS(
+		/*! Configured voicemail boxes for this endpoint. Used for MWI */
+		AST_STRING_FIELD(mailboxes);
+		/*! Username to use when sending MWI NOTIFYs to this endpoint */
+		AST_STRING_FIELD(fromuser);
+	);
+	/* Should mailbox states be combined into a single notification? */
+	unsigned int aggregate;
+};
+
+struct ast_sip_endpoint_subscription_configuration {
+	/*! Indicates if endpoint is allowed to initiate subscriptions */
+	unsigned int allow;
+	/*! The minimum allowed expiration for subscriptions from endpoint */
+	unsigned int minexpiry;
+	/*! Message waiting configuration */
+	struct ast_sip_mwi_configuration mwi;
+};
+
+struct ast_sip_endpoint_nat_configuration {
+	/*! Whether to force using the source IP address/port for sending responses */
+	unsigned int force_rport;
+	/*! Whether to rewrite the Contact header with the source IP address/port or not */
+	unsigned int rewrite_contact;
+};
+
+struct ast_sip_endpoint_id_configuration {
+	struct ast_party_id self;
+	/*! Do we accept identification information from this endpoint */
+	unsigned int trust_inbound;
+	/*! Do we send private identification information to this endpoint? */
+	unsigned int trust_outbound;
+	/*! Do we send P-Asserted-Identity headers to this endpoint? */
+	unsigned int send_pai;
+	/*! Do we send Remote-Party-ID headers to this endpoint? */
+	unsigned int send_rpid;
+	/*! Do we add Diversion headers to applicable outgoing requests/responses? */
+	unsigned int send_diversion;
+	/*! When performing connected line update, which method should be used */
+	enum ast_sip_session_refresh_method refresh_method;
+};
+
+struct ast_sip_endpoint_pickup_configuration {
+	/*! Call group */
+	ast_group_t callgroup;
+	/*! Pickup group */
+	ast_group_t pickupgroup;
+	/*! Named call group */
+	struct ast_namedgroups *named_callgroups;
+	/*! Named pickup group */
+	struct ast_namedgroups *named_pickupgroups;
+};
+
+struct ast_sip_info_recording_configuration {
+	AST_DECLARE_STRING_FIELDS(
+		/*! Feature to enact when one-touch recording INFO with Record: On is received */
+		AST_STRING_FIELD(onfeature);
+		/*! Feature to enact when one-touch recording INFO with Record: Off is received */
+		AST_STRING_FIELD(offfeature);
+	);
+	/*! Is one-touch recording permitted? */
+	unsigned int enabled;
+};
+
+struct ast_sip_endpoint_info_configuration {
+	/*! Configuration for one-touch recording */
+	struct ast_sip_info_recording_configuration recording;
+};
+
+/*!
  * \brief An entity with which Asterisk communicates
  */
 struct ast_sip_endpoint {
@@ -334,18 +427,12 @@
 		AST_STRING_FIELD(mohsuggest);
 		/*! Optional external media address to use in SDP */
 		AST_STRING_FIELD(external_media_address);
-		/*! Configured voicemail boxes for this endpoint. Used for MWI */
-		AST_STRING_FIELD(mailboxes);
 		/*! Configured RTP engine for this endpoint. */
 		AST_STRING_FIELD(rtp_engine);
 		/*! Configured tone zone for this endpoint. */
 		AST_STRING_FIELD(zone);
 		/*! Configured language for this endpoint. */
 		AST_STRING_FIELD(language);
-		/*! Feature to enact when one-touch recording INFO with Record: On is received */
-		AST_STRING_FIELD(recordonfeature);
-		/*! Feature to enact when one-touch recording INFO with Record: Off is received */
-		AST_STRING_FIELD(recordofffeature);
 		/*! SDP origin username */
 		AST_STRING_FIELD(sdpowner);
 		/*! SDP session name */
@@ -354,20 +441,9 @@
 		AST_STRING_FIELD(fromuser);
 		/*! Domain to place in From header */
 		AST_STRING_FIELD(fromdomain);
-		/*! Username to use when sending MWI NOTIFYs to this endpoint */
-		AST_STRING_FIELD(mwi_from);
 	);
-	/*! Configuration for extensions (i.e. Supported and Required headers) */
-	struct {
-		/*! Enabled SIP extensions */
-		unsigned int flags;
-		struct {
-			/*! Minimum session expiration period, in seconds */
-			unsigned int min_se;
-			/*! Session expiration period, in seconds */
-			unsigned int sess_expires;
-		} timer;
-	} extensions;
+	/*! Configuration for extensions */
+	struct ast_sip_endpoint_extensions extensions;
 	/*! Configuration relating to media */
 	struct {
 		/*! RTP media configuration */
@@ -413,55 +489,12 @@
 		/*! Priority for video streams */
 		unsigned int cos_video;
 	} media;
-	struct {
-		/*! Indicates if endpoint is allowed to initiate subscriptions */
-		unsigned int allow;
-		/*! The minimum allowed expiration for subscriptions from endpoint */
-		unsigned int minexpiry;
-		struct {
-			/*! Should unsolicited MWI be aggregated into a single NOTIFY? */
-			unsigned int aggregate;
-		} mwi;
-	} subscription;
-	struct {
-		/*! Whether to force using the source IP address/port for sending responses */
-		unsigned int force_rport;
-		/*! Whether to rewrite the Contact header with the source IP address/port or not */
-		unsigned int rewrite_contact;
-	} nat;
-	struct {
-		struct ast_party_id self;
-		/*! Do we accept identification information from this endpoint */
-		unsigned int trust_inbound;
-		/*! Do we send private identification information to this endpoint? */
-		unsigned int trust_outbound;
-		/*! Do we send P-Asserted-Identity headers to this endpoint? */
-		unsigned int send_pai;
-		/*! Do we send Remote-Party-ID headers to this endpoint? */
-		unsigned int send_rpid;
-		/*! Do we add Diversion headers to applicable outgoing requests/responses? */
-		unsigned int send_diversion;
-		/*! When performing connected line update, which method should be used */
-		enum ast_sip_session_refresh_method refresh_method;
-	} id;
-	struct {
-		/*! Call group */
-		ast_group_t callgroup;
-		/*! Pickup group */
-		ast_group_t pickupgroup;
-		/*! Named call group */
-		struct ast_namedgroups *named_callgroups;
-		/*! Named pickup group */
-		struct ast_namedgroups *named_pickupgroups;
-	} pickup;
+	struct ast_sip_endpoint_subscription_configuration subscription;
+	struct ast_sip_endpoint_nat_configuration nat;
+	struct ast_sip_endpoint_id_configuration id;
 	/*! Configuration options for INFO packages */
-	struct {
-		/*! Configuration for one-touch recording */
-		struct {
-			/*! Is one-touch recording permitted? */
-			unsigned int enabled;
-		} recording;
-	} info;
+	struct ast_sip_endpoint_info_configuration info;
+	struct ast_sip_endpoint_pickup_configuration pickup;
 	/*! Domain to which this endpoint belongs */
 	struct ast_sip_domain *domain;
 	/*! Address of record for incoming registrations */

Modified: team/mmichelson/sip_endpoint_reorg/res/res_sip/sip_configuration.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_endpoint_reorg/res/res_sip/sip_configuration.c?view=diff&rev=395546&r1=395545&r2=395546
==============================================================================
--- team/mmichelson/sip_endpoint_reorg/res/res_sip/sip_configuration.c (original)
+++ team/mmichelson/sip_endpoint_reorg/res/res_sip/sip_configuration.c Fri Jul 26 13:40:46 2013
@@ -650,7 +650,7 @@
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_pai", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.send_pai));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_rpid", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.send_rpid));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_diversion", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, id.send_diversion));
-	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "mailboxes", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, mailboxes));
+	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "mailboxes", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, subscription.mwi.mailboxes));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "aggregate_mwi", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, subscription.mwi.aggregate));
 	ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "media_encryption", "no", media_encryption_handler, NULL, 0, 0);
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "use_avpf", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.rtp.use_avpf));
@@ -664,8 +664,8 @@
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "rtpengine", "asterisk", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, rtp_engine));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "tonezone", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, zone));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "language", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, language));
-	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "recordonfeature", "automixmon", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, recordonfeature));
-	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "recordofffeature", "automixmon", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, recordofffeature));
+	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "recordonfeature", "automixmon", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, info.recording.onfeature));
+	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "recordofffeature", "automixmon", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, info.recording.offfeature));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "allowtransfer", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, allowtransfer));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "sdpowner", "-", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, sdpowner));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "sdpsession", "Asterisk", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, sdpsession));
@@ -678,7 +678,7 @@
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "subminexpirey", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, subscription.minexpiry));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "fromuser", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, fromuser));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "fromdomain", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, fromdomain));
-	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "mwifromuser", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, mwi_from));
+	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "mwifromuser", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, subscription.mwi.fromuser));
 	ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "dtlsverify", "", dtls_handler, NULL, 0, 0);
 	ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "dtlsrekey", "", dtls_handler, NULL, 0, 0);
 	ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "dtlscertfile", "", dtls_handler, NULL, 0, 0);
@@ -752,6 +752,16 @@
 	return 0;
 }
 
+static void subscription_configuration_destroy(struct ast_sip_endpoint_subscription_configuration *subscription)
+{
+	ast_string_field_free_memory(&subscription->mwi);
+}
+
+static void info_configuration_destroy(struct ast_sip_endpoint_info_configuration *info)
+{
+	ast_string_field_free_memory(&info->recording);
+}
+
 static void endpoint_destructor(void* obj)
 {
 	struct ast_sip_endpoint *endpoint = obj;
@@ -761,6 +771,8 @@
 	if (endpoint->media.codecs) {
 		ast_format_cap_destroy(endpoint->media.codecs);
 	}
+	subscription_configuration_destroy(&endpoint->subscription);
+	info_configuration_destroy(&endpoint->info);
 	ast_sip_auth_array_destroy(&endpoint->inbound_auths);
 	ast_sip_auth_array_destroy(&endpoint->outbound_auths);
 	ast_party_id_free(&endpoint->id.self);
@@ -769,6 +781,16 @@
 	ao2_cleanup(endpoint->persistent);
 }
 
+static int init_subscription_configuration(struct ast_sip_endpoint_subscription_configuration *subscription)
+{
+	return ast_string_field_init(&subscription->mwi, 64);
+}
+
+static int init_info_configuration(struct ast_sip_endpoint_info_configuration *info)
+{
+	return ast_string_field_init(&info->recording, 32);
+}
+
 void *ast_sip_endpoint_alloc(const char *name)
 {
 	struct ast_sip_endpoint *endpoint = ast_sorcery_generic_alloc(sizeof(*endpoint), endpoint_destructor);
@@ -780,6 +802,14 @@
 		return NULL;
 	}
 	if (!(endpoint->media.codecs = ast_format_cap_alloc_nolock())) {
+		ao2_cleanup(endpoint);
+		return NULL;
+	}
+	if (init_subscription_configuration(&endpoint->subscription)) {
+		ao2_cleanup(endpoint);
+		return NULL;
+	}
+	if (init_info_configuration(&endpoint->info)) {
 		ao2_cleanup(endpoint);
 		return NULL;
 	}

Modified: team/mmichelson/sip_endpoint_reorg/res/res_sip_mwi.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_endpoint_reorg/res/res_sip_mwi.c?view=diff&rev=395546&r1=395545&r2=395546
==============================================================================
--- team/mmichelson/sip_endpoint_reorg/res/res_sip_mwi.c (original)
+++ team/mmichelson/sip_endpoint_reorg/res/res_sip_mwi.c Fri Jul 26 13:40:46 2013
@@ -281,12 +281,12 @@
 		return 0;
 	}
 
-	if (!ast_strlen_zero(endpoint->mwi_from)) {
+	if (!ast_strlen_zero(endpoint->subscription.mwi.fromuser)) {
 		pjsip_fromto_hdr *from = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_FROM, NULL);
 		pjsip_name_addr *from_name_addr = (pjsip_name_addr *) from->uri;
 		pjsip_sip_uri *from_uri = pjsip_uri_get_uri(from_name_addr->uri);
 
-		pj_strdup2(tdata->pool, &from_uri->user, endpoint->mwi_from);
+		pj_strdup2(tdata->pool, &from_uri->user, endpoint->subscription.mwi.fromuser);
 	}
 
 	switch (state) {
@@ -627,7 +627,7 @@
 	char *mailboxes;
 	char *mailbox;
 
-	if (ast_strlen_zero(endpoint->mailboxes)) {
+	if (ast_strlen_zero(endpoint->subscription.mwi.mailboxes)) {
 		return 0;
 	}
 
@@ -638,7 +638,7 @@
 		}
 	}
 
-	mailboxes = ast_strdupa(endpoint->mailboxes);
+	mailboxes = ast_strdupa(endpoint->subscription.mwi.mailboxes);
 	while ((mailbox = strsep(&mailboxes, ","))) {
 		struct mwi_subscription *sub = aggregate_sub ?:
 			mwi_subscription_alloc(endpoint, AST_SIP_SUBSCRIBER, 0, NULL);

Modified: team/mmichelson/sip_endpoint_reorg/res/res_sip_one_touch_record_info.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_endpoint_reorg/res/res_sip_one_touch_record_info.c?view=diff&rev=395546&r1=395545&r2=395546
==============================================================================
--- team/mmichelson/sip_endpoint_reorg/res/res_sip_one_touch_record_info.c (original)
+++ team/mmichelson/sip_endpoint_reorg/res/res_sip_one_touch_record_info.c Fri Jul 26 13:40:46 2013
@@ -62,9 +62,9 @@
 	}
 
 	if (!pj_stricmp2(&record->hvalue, "on")) {
-		feature = session->endpoint->recordonfeature;
+		feature = session->endpoint->info.recording.onfeature;
 	} else if (!pj_stricmp2(&record->hvalue, "off")) {
-		feature = session->endpoint->recordofffeature;
+		feature = session->endpoint->info.recording.offfeature;
 	} else {
 		/* Don't send response because another module may handle this */
 		return 0;




More information about the asterisk-commits mailing list