mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 20:20:07 +00:00
res_pjsip: Add 'suppress_q850_reason_headers' option to endpoint
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'. ASTERISK-27949 Reported-by: Ross Beer Change-Id: I54cf37a827d77de2079256bb3de7e90fa5e1deb1
This commit is contained in:
11
CHANGES
11
CHANGES
@@ -113,6 +113,17 @@ Core:
|
||||
* libedit is no longer available as an embedded library and must be provided
|
||||
by the system.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
--- Functionality changes from Asterisk 15.5.0 to Asterisk 15.6.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 15.4.0 to Asterisk 15.5.0 ------------
|
||||
------------------------------------------------------------------------------
|
||||
|
@@ -830,6 +830,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')
|
@@ -813,6 +813,8 @@ struct ast_sip_endpoint {
|
||||
unsigned int refer_blind_progress;
|
||||
/*! Whether to notifies dialog-info 'early' on INUSE && RINGING state */
|
||||
unsigned int notify_early_inuse_ringing;
|
||||
/*! Suppress Q.850 Reason headers on this endpoint */
|
||||
unsigned int suppress_q850_reason_headers;
|
||||
};
|
||||
|
||||
/*! URI parameter for symmetric transport */
|
||||
|
@@ -1110,6 +1110,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>
|
||||
|
@@ -1904,6 +1904,7 @@ int ast_res_pjsip_initialize_configuration(void)
|
||||
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, media.rtp.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, media.rtp.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");
|
||||
|
@@ -98,8 +98,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