res_pjsip: Add DTMF INFO Failback mode

The existing auto dtmf mode reverts to inband if 4733 fails to be
negotiated.  This patch adds a new mode auto_info which will
switch to INFO instead of inband if 4733 is not available.

ASTERISK-27066 #close

Change-Id: Id185b11e84afd9191a2f269e8443019047765e91
This commit is contained in:
Torrey Searle
2017-06-15 10:12:41 +02:00
parent 764d04fa87
commit 9fbc34d2bd
7 changed files with 121 additions and 18 deletions

View File

@@ -0,0 +1,57 @@
"""Add auto_info to endpoint dtmf_mode
Revision ID: 164abbd708c
Revises: 86bb1efa278d
Create Date: 2017-06-19 13:55:15.354706
"""
# revision identifiers, used by Alembic.
revision = '164abbd708c'
down_revision = '86bb1efa278d'
from alembic import op
import sqlalchemy as sa
OLD_ENUM = ['rfc4733', 'inband', 'info', 'auto']
NEW_ENUM = ['rfc4733', 'inband', 'info', 'auto', 'auto_info']
old_type = sa.Enum(*OLD_ENUM, name='pjsip_dtmf_mode_values_v2')
new_type = sa.Enum(*NEW_ENUM, name='pjsip_dtmf_mode_values_v3')
def upgrade():
context = op.get_context()
# Upgrading to this revision WILL clear your directmedia values.
if context.bind.dialect.name != 'postgresql':
op.alter_column('ps_endpoints', 'dtmf_mode',
type_=new_type,
existing_type=old_type)
else:
enum = ENUM('rfc4733', 'inband', 'info', 'auto', 'auto_info',
name='pjsip_dtmf_mode_values_v3')
enum.create(op.get_bind(), checkfirst=False)
op.execute('ALTER TABLE ps_endpoints ALTER COLUMN dtmf_mode TYPE'
' pjsip_dtmf_mode_values_v3 USING'
' dtmf_mode::text::pjsip_dtmf_mode_values_v3')
ENUM(name="pjsip_dtmf_mode_values_v2").drop(op.get_bind(), checkfirst=False)
def downgrade():
context = op.get_context()
if context.bind.dialect.name != 'postgresql':
op.alter_column('ps_endpoints', 'dtmf_mode',
type_=old_type,
existing_type=new_type)
else:
enum = ENUM('rfc4733', 'inband', 'info', 'auto',
name='pjsip_dtmf_mode_values_v2')
enum.create(op.get_bind(), checkfirst=False)
op.execute('ALTER TABLE ps_endpoints ALTER COLUMN dtmf_mode TYPE'
' pjsip_dtmf_mode_values USING'
' dtmf_mode::text::pjsip_dtmf_mode_values_v2')
ENUM(name="pjsip_dtmf_mode_values_v3").drop(op.get_bind(), checkfirst=False)