[svn-commits] mmichelson: branch mmichelson/sip_endpoint_reorg r395547 - in /team/mmichelso...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Fri Jul 26 14:15:51 CDT 2013
Author: mmichelson
Date: Fri Jul 26 14:15:49 2013
New Revision: 395547
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=395547
Log:
Un-anonymize media configuration structures.
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_sdp_rtp.c
team/mmichelson/sip_endpoint_reorg/res/res_sip_session.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=395547&r1=395546&r2=395547
==============================================================================
--- team/mmichelson/sip_endpoint_reorg/include/asterisk/res_sip.h (original)
+++ team/mmichelson/sip_endpoint_reorg/include/asterisk/res_sip.h Fri Jul 26 14:15:49 2013
@@ -409,6 +409,67 @@
struct ast_sip_info_recording_configuration recording;
};
+struct ast_sip_media_rtp_configuration {
+ AST_DECLARE_STRING_FIELDS(
+ /*! Configured RTP engine for this endpoint. */
+ AST_STRING_FIELD(engine);
+ );
+ /*! Whether IPv6 RTP is enabled or not */
+ unsigned int ipv6;
+ /*! Whether symmetric RTP is enabled or not */
+ unsigned int symmetric;
+ /*! Whether ICE support is enabled or not */
+ unsigned int ice_support;
+ /*! Whether to use the "ptime" attribute received from the endpoint or not */
+ unsigned int use_ptime;
+ /*! Do we use AVPF exclusively for this endpoint? */
+ unsigned int use_avpf;
+ /*! \brief DTLS-SRTP configuration information */
+ struct ast_rtp_dtls_cfg dtls_cfg;
+ /*! Should SRTP use a 32 byte tag instead of an 80 byte tag? */
+ unsigned int srtp_tag_32;
+ /*! Do we use media encryption? what type? */
+ enum ast_sip_session_media_encryption encryption;
+};
+
+struct ast_sip_direct_media_configuration {
+ /*! Boolean indicating if direct_media is permissible */
+ unsigned int enabled;
+ /*! When using direct media, which method should be used */
+ enum ast_sip_session_refresh_method method;
+ /*! Take steps to mitigate glare for direct media */
+ enum ast_sip_direct_media_glare_mitigation glare_mitigation;
+ /*! Do not attempt direct media session refreshes if a media NAT is detected */
+ unsigned int disable_on_nat;
+};
+
+
+struct ast_sip_endpoint_media_configuration {
+ AST_DECLARE_STRING_FIELDS(
+ /*! Optional external media address to use in SDP */
+ AST_STRING_FIELD(external_address);
+ /*! SDP origin username */
+ AST_STRING_FIELD(sdpowner);
+ /*! SDP session name */
+ AST_STRING_FIELD(sdpsession);
+ );
+ /*! RTP media configuration */
+ struct ast_sip_media_rtp_configuration rtp;
+ /*! Direct media options */
+ struct ast_sip_direct_media_configuration direct_media;
+ /*! Codec preferences */
+ struct ast_codec_pref prefs;
+ /*! Configured codecs */
+ struct ast_format_cap *codecs;
+ /*! DSCP TOS bits for audio streams */
+ unsigned int tos_audio;
+ /*! Priority for audio streams */
+ unsigned int cos_audio;
+ /*! DSCP TOS bits for video streams */
+ unsigned int tos_video;
+ /*! Priority for video streams */
+ unsigned int cos_video;
+};
/*!
* \brief An entity with which Asterisk communicates
*/
@@ -425,18 +486,10 @@
AST_STRING_FIELD(aors);
/*! Musiconhold class to suggest that the other side use when placing on hold */
AST_STRING_FIELD(mohsuggest);
- /*! Optional external media address to use in SDP */
- AST_STRING_FIELD(external_media_address);
- /*! 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);
- /*! SDP origin username */
- AST_STRING_FIELD(sdpowner);
- /*! SDP session name */
- AST_STRING_FIELD(sdpsession);
/*! Default username to place in From header */
AST_STRING_FIELD(fromuser);
/*! Domain to place in From header */
@@ -445,50 +498,7 @@
/*! Configuration for extensions */
struct ast_sip_endpoint_extensions extensions;
/*! Configuration relating to media */
- struct {
- /*! RTP media configuration */
- struct {
- /*! Whether IPv6 RTP is enabled or not */
- unsigned int ipv6;
- /*! Whether symmetric RTP is enabled or not */
- unsigned int symmetric;
- /*! Whether ICE support is enabled or not */
- unsigned int ice_support;
- /*! Whether to use the "ptime" attribute received from the endpoint or not */
- unsigned int use_ptime;
- /*! Do we use AVPF exclusively for this endpoint? */
- unsigned int use_avpf;
- /*! \brief DTLS-SRTP configuration information */
- struct ast_rtp_dtls_cfg dtls_cfg;
- /*! Should SRTP use a 32 byte tag instead of an 80 byte tag? */
- unsigned int srtp_tag_32;
- /*! Do we use media encryption? what type? */
- enum ast_sip_session_media_encryption encryption;
- } rtp;
- /*! Direct media options */
- struct {
- /*! Boolean indicating if direct_media is permissible */
- unsigned int enabled;
- /*! When using direct media, which method should be used */
- enum ast_sip_session_refresh_method method;
- /*! Take steps to mitigate glare for direct media */
- enum ast_sip_direct_media_glare_mitigation glare_mitigation;
- /*! Do not attempt direct media session refreshes if a media NAT is detected */
- unsigned int disable_on_nat;
- } direct_media;
- /*! Codec preferences */
- struct ast_codec_pref prefs;
- /*! Configured codecs */
- struct ast_format_cap *codecs;
- /*! DSCP TOS bits for audio streams */
- unsigned int tos_audio;
- /*! Priority for audio streams */
- unsigned int cos_audio;
- /*! DSCP TOS bits for video streams */
- unsigned int tos_video;
- /*! Priority for video streams */
- unsigned int cos_video;
- } media;
+ struct ast_sip_endpoint_media_configuration media;
struct ast_sip_endpoint_subscription_configuration subscription;
struct ast_sip_endpoint_nat_configuration nat;
struct ast_sip_endpoint_id_configuration id;
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=395547&r1=395546&r2=395547
==============================================================================
--- 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 14:15:49 2013
@@ -635,7 +635,7 @@
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "auth", "", inbound_auth_handler, NULL, 0, 0);
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "outbound_auth", "", outbound_auth_handler, NULL, 0, 0);
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "aors", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, aors));
- ast_sorcery_object_field_register(sip_sorcery, "endpoint", "external_media_address", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, external_media_address));
+ ast_sorcery_object_field_register(sip_sorcery, "endpoint", "external_media_address", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, media.external_address));
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "identify_by", "username,location", ident_handler, NULL, 0, 0);
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "direct_media", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.direct_media.enabled));
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "direct_media_method", "invite", direct_media_method_handler, NULL, 0, 0);
@@ -661,14 +661,14 @@
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "namedcallgroup", "", named_groups_handler, NULL, 0, 0);
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "namedpickupgroup", "", named_groups_handler, NULL, 0, 0);
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "devicestate_busy_at", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, devicestate_busy_at));
- 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", "rtpengine", "asterisk", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, media.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, 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));
+ ast_sorcery_object_field_register(sip_sorcery, "endpoint", "sdpowner", "-", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, media.sdpowner));
+ ast_sorcery_object_field_register(sip_sorcery, "endpoint", "sdpsession", "Asterisk", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, media.sdpsession));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "tos_audio", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, media.tos_audio));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "tos_video", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, media.tos_video));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "cos_audio", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, media.cos_audio));
@@ -762,6 +762,12 @@
ast_string_field_free_memory(&info->recording);
}
+static void media_configuration_destroy(struct ast_sip_endpoint_media_configuration *media)
+{
+ ast_string_field_free_memory(&media->rtp);
+ ast_string_field_free_memory(media);
+}
+
static void endpoint_destructor(void* obj)
{
struct ast_sip_endpoint *endpoint = obj;
@@ -773,6 +779,7 @@
}
subscription_configuration_destroy(&endpoint->subscription);
info_configuration_destroy(&endpoint->info);
+ media_configuration_destroy(&endpoint->media);
ast_sip_auth_array_destroy(&endpoint->inbound_auths);
ast_sip_auth_array_destroy(&endpoint->outbound_auths);
ast_party_id_free(&endpoint->id.self);
@@ -791,6 +798,11 @@
return ast_string_field_init(&info->recording, 32);
}
+static int init_media_configuration(struct ast_sip_endpoint_media_configuration *media)
+{
+ return ast_string_field_init(media, 64) || ast_string_field_init(&media->rtp, 32);
+}
+
void *ast_sip_endpoint_alloc(const char *name)
{
struct ast_sip_endpoint *endpoint = ast_sorcery_generic_alloc(sizeof(*endpoint), endpoint_destructor);
@@ -810,6 +822,10 @@
return NULL;
}
if (init_info_configuration(&endpoint->info)) {
+ ao2_cleanup(endpoint);
+ return NULL;
+ }
+ if (init_media_configuration(&endpoint->media)) {
ao2_cleanup(endpoint);
return NULL;
}
Modified: team/mmichelson/sip_endpoint_reorg/res/res_sip_sdp_rtp.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_endpoint_reorg/res/res_sip_sdp_rtp.c?view=diff&rev=395547&r1=395546&r2=395547
==============================================================================
--- team/mmichelson/sip_endpoint_reorg/res/res_sip_sdp_rtp.c (original)
+++ team/mmichelson/sip_endpoint_reorg/res/res_sip_sdp_rtp.c Fri Jul 26 14:15:49 2013
@@ -108,8 +108,8 @@
{
struct ast_rtp_engine_ice *ice;
- if (!(session_media->rtp = ast_rtp_instance_new(session->endpoint->rtp_engine, sched, ipv6 ? &address_ipv6 : &address_ipv4, NULL))) {
- ast_log(LOG_ERROR, "Unable to create RTP instance using RTP engine '%s'\n", session->endpoint->rtp_engine);
+ if (!(session_media->rtp = ast_rtp_instance_new(session->endpoint->media.rtp.engine, sched, ipv6 ? &address_ipv6 : &address_ipv4, NULL))) {
+ ast_log(LOG_ERROR, "Unable to create RTP instance using RTP engine '%s'\n", session->endpoint->media.rtp.engine);
return -1;
}
@@ -887,7 +887,7 @@
/* Add connection level details */
if (direct_media_enabled) {
ast_copy_string(hostip, ast_sockaddr_stringify_fmt(&session_media->direct_media_addr, AST_SOCKADDR_STR_ADDR), sizeof(hostip));
- } else if (ast_strlen_zero(session->endpoint->external_media_address)) {
+ } else if (ast_strlen_zero(session->endpoint->media.external_address)) {
pj_sockaddr localaddr;
if (pj_gethostip(session->endpoint->media.rtp.ipv6 ? pj_AF_INET6() : pj_AF_INET(), &localaddr)) {
@@ -895,7 +895,7 @@
}
pj_sockaddr_print(&localaddr, hostip, sizeof(hostip), 2);
} else {
- ast_copy_string(hostip, session->endpoint->external_media_address, sizeof(hostip));
+ ast_copy_string(hostip, session->endpoint->media.external_address, sizeof(hostip));
}
media->conn->net_type = STR_IN;
Modified: team/mmichelson/sip_endpoint_reorg/res/res_sip_session.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_endpoint_reorg/res/res_sip_session.c?view=diff&rev=395547&r1=395546&r2=395547
==============================================================================
--- team/mmichelson/sip_endpoint_reorg/res/res_sip_session.c (original)
+++ team/mmichelson/sip_endpoint_reorg/res/res_sip_session.c Fri Jul 26 14:15:49 2013
@@ -1801,11 +1801,11 @@
local->origin.id = offer->origin.id;
}
- pj_strdup2(inv->pool, &local->origin.user, session->endpoint->sdpowner);
+ pj_strdup2(inv->pool, &local->origin.user, session->endpoint->media.sdpowner);
local->origin.net_type = STR_IN;
local->origin.addr_type = session->endpoint->media.rtp.ipv6 ? STR_IP6 : STR_IP4;
local->origin.addr = *pj_gethostname();
- pj_strdup2(inv->pool, &local->name, session->endpoint->sdpsession);
+ pj_strdup2(inv->pool, &local->name, session->endpoint->media.sdpsession);
/* Now let the handlers add streams of various types, pjmedia will automatically reorder the media streams for us */
successful = ao2_callback_data(session->media, OBJ_MULTIPLE, add_sdp_streams, local, session);
More information about the svn-commits
mailing list