mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-10 06:49:40 +00:00
Merge "pjsip_sdp_rtp: Add option endpoint/bind_rtp_to_media_address" into 13
This commit is contained in:
8
CHANGES
8
CHANGES
@@ -46,6 +46,14 @@ Queue
|
|||||||
* Added field ReasonPause on QueueMemberStatus if set when paused, the reason
|
* Added field ReasonPause on QueueMemberStatus if set when paused, the reason
|
||||||
the queue member was paused.
|
the queue member was paused.
|
||||||
|
|
||||||
|
res_pjsip_sdp_rtp
|
||||||
|
------------------
|
||||||
|
* A new option (bind_rtp_to_media_address) has been added to endpoint which
|
||||||
|
will cause res_pjsip_sdp_rtp to actually bind the RTP instance to the
|
||||||
|
media_address as well as using it in the SDP. If set, RTP packets will now
|
||||||
|
originate from the media address instead of the operating system's "primary"
|
||||||
|
ip address.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
--- Functionality changes from Asterisk 13.6.0 to Asterisk 13.7.0 ------------
|
--- Functionality changes from Asterisk 13.6.0 to Asterisk 13.7.0 ------------
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
@@ -615,6 +615,9 @@
|
|||||||
;disallow= ; Media Codec s to disallow (default: "")
|
;disallow= ; Media Codec s to disallow (default: "")
|
||||||
;dtmf_mode=rfc4733 ; DTMF mode (default: "rfc4733")
|
;dtmf_mode=rfc4733 ; DTMF mode (default: "rfc4733")
|
||||||
;media_address= ; IP address used in SDP for media handling (default: "")
|
;media_address= ; IP address used in SDP for media handling (default: "")
|
||||||
|
;bind_rtp_to_media_address= ; Bind the RTP session to the media_address.
|
||||||
|
; This causes all RTP packets to be sent from
|
||||||
|
; the specified address. (default: "no")
|
||||||
;force_rport=yes ; Force use of return port (default: "yes")
|
;force_rport=yes ; Force use of return port (default: "yes")
|
||||||
;ice_support=no ; Enable the ICE mechanism to help traverse NAT (default: "no")
|
;ice_support=no ; Enable the ICE mechanism to help traverse NAT (default: "no")
|
||||||
;identify_by=username ; Way s for Endpoint to be identified (default:
|
;identify_by=username ; Way s for Endpoint to be identified (default:
|
||||||
|
@@ -0,0 +1,31 @@
|
|||||||
|
"""add bind_rtp_to_media_address to pjsip
|
||||||
|
|
||||||
|
Revision ID: 26d7f3bf0fa5
|
||||||
|
Revises: 2d078ec071b7
|
||||||
|
Create Date: 2016-01-07 12:23:42.894400
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '26d7f3bf0fa5'
|
||||||
|
down_revision = '2d078ec071b7'
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from sqlalchemy.dialects.postgresql import ENUM
|
||||||
|
|
||||||
|
YESNO_NAME = 'yesno_values'
|
||||||
|
YESNO_VALUES = ['yes', 'no']
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
############################# Enums ##############################
|
||||||
|
|
||||||
|
# yesno_values have already been created, so use postgres enum object
|
||||||
|
# type to get around "already created" issue - works okay with mysql
|
||||||
|
yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)
|
||||||
|
|
||||||
|
op.add_column('ps_endpoints', sa.Column('bind_rtp_to_media_address', yesno_values))
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_column('ps_endpoints', 'bind_rtp_to_media_address')
|
@@ -571,6 +571,8 @@ struct ast_sip_endpoint_media_configuration {
|
|||||||
unsigned int cos_video;
|
unsigned int cos_video;
|
||||||
/*! Is g.726 packed in a non standard way */
|
/*! Is g.726 packed in a non standard way */
|
||||||
unsigned int g726_non_standard;
|
unsigned int g726_non_standard;
|
||||||
|
/*! Bind the RTP instance to the media_address */
|
||||||
|
unsigned int bind_rtp_to_media_address;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@@ -233,6 +233,14 @@
|
|||||||
</para></note>
|
</para></note>
|
||||||
</description>
|
</description>
|
||||||
</configOption>
|
</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">
|
<configOption name="force_rport" default="yes">
|
||||||
<synopsis>Force use of return port</synopsis>
|
<synopsis>Force use of return port</synopsis>
|
||||||
</configOption>
|
</configOption>
|
||||||
|
@@ -1850,6 +1850,7 @@ int ast_res_pjsip_initialize_configuration(const struct ast_module_info *ast_mod
|
|||||||
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_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", "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", "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_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(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);
|
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)
|
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_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);
|
ast_log(LOG_ERROR, "Unable to create RTP instance using RTP engine '%s'\n", session->endpoint->media.rtp.engine);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user