diff options
Diffstat (limited to 'main')
-rw-r--r-- | main/sdp_options.c | 3 | ||||
-rw-r--r-- | main/sdp_private.h | 6 | ||||
-rw-r--r-- | main/sdp_state.c | 27 |
3 files changed, 20 insertions, 16 deletions
diff --git a/main/sdp_options.c b/main/sdp_options.c index 9b57e189f..ab8fb2973 100644 --- a/main/sdp_options.c +++ b/main/sdp_options.c @@ -55,12 +55,11 @@ type ast_sdp_options_get_##field(const struct ast_sdp_options *options) \ } \ DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(media_address, 0); +DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(interface_address, 0); DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(sdpowner, 0); DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(sdpsession, 0); DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(rtp_engine, 0); -DEFINE_GETTERS_SETTERS_FOR(unsigned int, bind_rtp_to_media_address); -DEFINE_GETTERS_SETTERS_FOR(unsigned int, bind_udptl_to_media_address); DEFINE_GETTERS_SETTERS_FOR(unsigned int, rtp_symmetric); DEFINE_GETTERS_SETTERS_FOR(unsigned int, udptl_symmetric); DEFINE_GETTERS_SETTERS_FOR(enum ast_t38_ec_modes, udptl_error_correction); diff --git a/main/sdp_private.h b/main/sdp_private.h index c90a57485..a0b63df03 100644 --- a/main/sdp_private.h +++ b/main/sdp_private.h @@ -24,8 +24,10 @@ struct ast_sdp_options { AST_DECLARE_STRING_FIELDS( - /*! Optional media address to use in SDP */ + /*! Media address to use in SDP */ AST_STRING_FIELD(media_address); + /*! Optional address of the interface media should use. */ + AST_STRING_FIELD(interface_address); /*! SDP origin username */ AST_STRING_FIELD(sdpowner); /*! SDP session name */ @@ -34,8 +36,6 @@ struct ast_sdp_options { AST_STRING_FIELD(rtp_engine); ); struct { - unsigned int bind_rtp_to_media_address:1; - unsigned int bind_udptl_to_media_address:1; unsigned int rtp_symmetric:1; unsigned int udptl_symmetric:1; unsigned int rtp_ipv6:1; diff --git a/main/sdp_state.c b/main/sdp_state.c index 3a87a81e2..0da93e4ac 100644 --- a/main/sdp_state.c +++ b/main/sdp_state.c @@ -150,13 +150,15 @@ static struct ast_rtp_instance *create_rtp(const struct ast_sdp_options *options { struct ast_rtp_instance *rtp; struct ast_rtp_engine_ice *ice; - struct ast_sockaddr temp_media_address; static struct ast_sockaddr address_rtp; - struct ast_sockaddr *media_address = &address_rtp; + struct ast_sockaddr *media_address = &address_rtp; - if (options->bind_rtp_to_media_address && !ast_strlen_zero(options->media_address)) { - ast_sockaddr_parse(&temp_media_address, options->media_address, 0); - media_address = &temp_media_address; + if (!ast_strlen_zero(options->interface_address)) { + if (!ast_sockaddr_parse(&address_rtp, options->interface_address, 0)) { + ast_log(LOG_ERROR, "Attempted to bind RTP to invalid media address: %s\n", + options->interface_address); + return NULL; + } } else { if (ast_check_ipv6()) { ast_sockaddr_parse(&address_rtp, "::", 0); @@ -165,7 +167,8 @@ static struct ast_rtp_instance *create_rtp(const struct ast_sdp_options *options } } - if (!(rtp = ast_rtp_instance_new(options->rtp_engine, sched, media_address, NULL))) { + rtp = ast_rtp_instance_new(options->rtp_engine, sched, media_address, NULL); + if (!rtp) { ast_log(LOG_ERROR, "Unable to create RTP instance using RTP engine '%s'\n", options->rtp_engine); return NULL; @@ -204,13 +207,15 @@ static struct ast_rtp_instance *create_rtp(const struct ast_sdp_options *options static struct sdp_state_udptl *create_udptl(const struct ast_sdp_options *options) { struct sdp_state_udptl *udptl; - struct ast_sockaddr temp_media_address; static struct ast_sockaddr address_udptl; - struct ast_sockaddr *media_address = &address_udptl; + struct ast_sockaddr *media_address = &address_udptl; - if (options->bind_udptl_to_media_address && !ast_strlen_zero(options->media_address)) { - ast_sockaddr_parse(&temp_media_address, options->media_address, 0); - media_address = &temp_media_address; + if (!ast_strlen_zero(options->interface_address)) { + if (!ast_sockaddr_parse(&address_udptl, options->interface_address, 0)) { + ast_log(LOG_ERROR, "Attempted to bind UDPTL to invalid media address: %s\n", + options->interface_address); + return NULL; + } } else { if (ast_check_ipv6()) { ast_sockaddr_parse(&address_udptl, "::", 0); |