mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-09 11:28:25 +00:00
Merge "res_pjsip: Add 'suppress_q850_reason_headers' option to endpoint" into 13
This commit is contained in:
11
CHANGES
11
CHANGES
@@ -8,6 +8,17 @@
|
||||
===
|
||||
==============================================================================
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
--- Functionality changes from Asterisk 13.22.0 to Asterisk 13.23.0 ----------
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
res_pjsip
|
||||
------------------
|
||||
* A new option 'suppress_q850_reason_headers' has been added to the endpoint
|
||||
object. Some devices can't accept multiple Reason headers and get confused
|
||||
when both 'SIP' and 'Q.850' Reason headers are received. This option allows
|
||||
the 'Q.850' Reason header to be suppressed. The default value is 'no'.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
--- Functionality changes from Asterisk 13.21.0 to Asterisk 13.22.0 ----------
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
@@ -810,6 +810,13 @@
|
||||
; This option must also be enabled in the system
|
||||
; section.
|
||||
; (default: no)
|
||||
suppress_q850_reason_headers =
|
||||
; Suppress Q.850 Reason headers for this endpoint.
|
||||
; Some devices can't accept multiple Reason headers
|
||||
; and get confused when both 'SIP' and 'Q.850' Reason
|
||||
; headers are received. This option allows the
|
||||
; 'Q.850' Reason header to be suppressed.
|
||||
; (default: no)
|
||||
|
||||
;==========================AUTH SECTION OPTIONS=========================
|
||||
;[auth]
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
"""add suppress_q850_reason_headers to endpoint
|
||||
|
||||
Revision ID: 19b00bc19b7b
|
||||
Revises: 0be05c3a8225
|
||||
Create Date: 2018-07-06 06:30:32.196669
|
||||
|
||||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '19b00bc19b7b'
|
||||
down_revision = '0be05c3a8225'
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects.postgresql import ENUM
|
||||
|
||||
YESNO_NAME = 'yesno_values'
|
||||
YESNO_VALUES = ['yes', 'no']
|
||||
|
||||
def upgrade():
|
||||
yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)
|
||||
op.add_column('ps_endpoints', sa.Column('suppress_q850_reason_header', yesno_values))
|
||||
|
||||
def downgrade():
|
||||
if op.get_context().bind.dialect.name == 'mssql':
|
||||
op.drop_constraint('ck_ps_endpoints_suppress_q850_reason_header_yesno_values','ps_endpoints')
|
||||
op.drop_column('ps_endpoints', 'suppress_q850_reason_header')
|
||||
@@ -795,6 +795,8 @@ struct ast_sip_endpoint {
|
||||
unsigned int follow_early_media_fork;
|
||||
/*! Accept updated SDPs on non-100rel 18X and 2XX responses with the same To tag */
|
||||
unsigned int accept_multiple_sdp_answers;
|
||||
/*! Suppress Q.850 Reason headers on this endpoint */
|
||||
unsigned int suppress_q850_reason_headers;
|
||||
};
|
||||
|
||||
/*! URI parameter for symmetric transport */
|
||||
|
||||
@@ -1057,6 +1057,14 @@
|
||||
</para></note>
|
||||
</description>
|
||||
</configOption>
|
||||
<configOption name="suppress_q850_reason_headers" default="no">
|
||||
<synopsis>Suppress Q.850 Reason headers for this endpoint</synopsis>
|
||||
<description><para>
|
||||
Some devices can't accept multiple Reason headers and get confused
|
||||
when both 'SIP' and 'Q.850' Reason headers are received. This
|
||||
option allows the 'Q.850' Reason header to be suppressed.</para>
|
||||
</description>
|
||||
</configOption>
|
||||
</configObject>
|
||||
<configObject name="auth">
|
||||
<synopsis>Authentication type</synopsis>
|
||||
|
||||
@@ -1856,6 +1856,7 @@ int ast_res_pjsip_initialize_configuration(const struct ast_module_info *ast_mod
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "incoming_mwi_mailbox", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, incoming_mwi_mailbox));
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "follow_early_media_fork", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, follow_early_media_fork));
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "accept_multiple_sdp_answers", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, accept_multiple_sdp_answers));
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "suppress_q850_reason_headers", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, suppress_q850_reason_headers));
|
||||
|
||||
if (ast_sip_initialize_sorcery_transport()) {
|
||||
ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");
|
||||
|
||||
@@ -99,8 +99,15 @@ static void rfc3326_add_reason_header(struct ast_sip_session *session, struct pj
|
||||
ast_sip_add_header(tdata, "Reason", "SIP;cause=200;text=\"Call completed elsewhere\"");
|
||||
}
|
||||
|
||||
snprintf(buf, sizeof(buf), "Q.850;cause=%i", ast_channel_hangupcause(session->channel) & 0x7f);
|
||||
ast_sip_add_header(tdata, "Reason", buf);
|
||||
if (session->endpoint && session->endpoint->suppress_q850_reason_headers) {
|
||||
ast_debug(1, "A Q.850 '%s'(%i) Reason header was suppresed for endpoint '%s'\n",
|
||||
ast_cause2str((ast_channel_hangupcause(session->channel) & 0x7f)),
|
||||
(ast_channel_hangupcause(session->channel) & 0x7f),
|
||||
ast_sorcery_object_get_id(session->endpoint));
|
||||
} else {
|
||||
snprintf(buf, sizeof(buf), "Q.850;cause=%i", ast_channel_hangupcause(session->channel) & 0x7f);
|
||||
ast_sip_add_header(tdata, "Reason", buf);
|
||||
}
|
||||
}
|
||||
|
||||
static void rfc3326_outgoing_request(struct ast_sip_session *session, struct pjsip_tx_data *tdata)
|
||||
|
||||
Reference in New Issue
Block a user