mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
Merge "pjsip_sdp_rtp: Add option endpoint/bind_rtp_to_media_address"
This commit is contained in:
@@ -233,6 +233,14 @@
|
||||
</para></note>
|
||||
</description>
|
||||
</configOption>
|
||||
<configOption name="bind_rtp_to_media_address">
|
||||
<synopsis>Bind the RTP instance to the media_address</synopsis>
|
||||
<description><para>
|
||||
If media_address is specified, this option causes the RTP instance to be bound to the
|
||||
specified ip address which causes the packets to be sent from that address.
|
||||
</para>
|
||||
</description>
|
||||
</configOption>
|
||||
<configOption name="force_rport" default="yes">
|
||||
<synopsis>Force use of return port</synopsis>
|
||||
</configOption>
|
||||
|
@@ -1847,6 +1847,7 @@ int ast_res_pjsip_initialize_configuration(void)
|
||||
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "outbound_auth", "", outbound_auth_handler, outbound_auths_to_str, 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", "media_address", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, media.address));
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "bind_rtp_to_media_address", "no", OPT_BOOL_T, 1, STRFLDSET(struct ast_sip_endpoint, media.bind_rtp_to_media_address));
|
||||
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "identify_by", "username", ident_handler, ident_to_str, 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, direct_media_method_to_str, NULL, 0, 0);
|
||||
|
@@ -175,8 +175,15 @@ static int rtp_check_timeout(const void *data)
|
||||
static int create_rtp(struct ast_sip_session *session, struct ast_sip_session_media *session_media, unsigned int ipv6)
|
||||
{
|
||||
struct ast_rtp_engine_ice *ice;
|
||||
struct ast_sockaddr temp_media_address;
|
||||
struct ast_sockaddr *media_address = ipv6 ? &address_ipv6 : &address_ipv4;
|
||||
|
||||
if (!(session_media->rtp = ast_rtp_instance_new(session->endpoint->media.rtp.engine, sched, ipv6 ? &address_ipv6 : &address_ipv4, NULL))) {
|
||||
if (session->endpoint->media.bind_rtp_to_media_address && !ast_strlen_zero(session->endpoint->media.address)) {
|
||||
ast_sockaddr_parse(&temp_media_address, session->endpoint->media.address, 0);
|
||||
media_address = &temp_media_address;
|
||||
}
|
||||
|
||||
if (!(session_media->rtp = ast_rtp_instance_new(session->endpoint->media.rtp.engine, sched, media_address, NULL))) {
|
||||
ast_log(LOG_ERROR, "Unable to create RTP instance using RTP engine '%s'\n", session->endpoint->media.rtp.engine);
|
||||
return -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user