;aggregate_mwi=yes ; (default: "yes")
;allow= ; Media Codec s to allow (default: "")
;allow_overlap=yes ; Enable RFC3578 overlap dialing support. (default: "yes")
+;overlap_context=default ; Context to used for overlap dialing matches
+ ; (default: same as context option)
;aors= ; AoR s to be used with the endpoint (default: "")
;auth= ; Authentication Object s associated with the endpoint (default: "")
;callerid= ; CallerID information for the endpoint (default: "")
--- /dev/null
+"""add overlap_context
+
+Revision ID: f261363a857f
+Revises: 5a2247c957d2
+Create Date: 2022-12-09 13:58:48.622000
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = 'f261363a857f'
+down_revision = '5a2247c957d2'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+ op.add_column('ps_endpoints', sa.Column('overlap_context', sa.String(80)))
+
+def downgrade():
+ op.drop_column('ps_endpoints', 'overlap_context')
--- /dev/null
+Subject: res_pjsip_session
+
+The overlap_context option now allows explicitly
+specifying a context to use for overlap dialing matches.
AST_STRING_FIELD_EXTENDED(geoloc_incoming_call_profile);
/*! The name of the geoloc profile to apply when Asterisk sends a call to this endpoint */
AST_STRING_FIELD_EXTENDED(geoloc_outgoing_call_profile);
+ /*! The context to use for overlap dialing, if different from the endpoint's context */
+ AST_STRING_FIELD_EXTENDED(overlap_context);
/*! 100rel mode to use with this endpoint */
enum ast_sip_100rel_mode rel100;
/*! Send Advice-of-Charge messages */
<configOption name="allow_overlap" default="yes">
<synopsis>Enable RFC3578 overlap dialing support.</synopsis>
</configOption>
+ <configOption name="overlap_context">
+ <synopsis>Dialplan context to use for RFC3578 overlap dialing.</synopsis>
+ <description>
+ <para>Dialplan context to use for overlap dialing extension matching.
+ If not specified, the context configured for the endpoint will be used.
+ If specified, the extensions/patterns in the specified context will be used
+ for determining if a full number has been received from the endpoint.
+ </para>
+ </description>
+ </configOption>
<configOption name="aors">
<synopsis>AoR(s) to be used with the endpoint</synopsis>
<description><para>
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "asymmetric_rtp_codec", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, asymmetric_rtp_codec));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "rtcp_mux", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.rtcp_mux));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "allow_overlap", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, allow_overlap));
+ ast_sorcery_object_field_register(sip_sorcery, "endpoint", "overlap_context", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, overlap_context));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "refer_blind_progress", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, refer_blind_progress));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "notify_early_inuse_ringing", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, notify_early_inuse_ringing));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "max_audio_streams", "1", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, media.max_audio_streams));
ao2_cleanup(endpoint);
return NULL;
}
+ if (ast_string_field_init_extended(endpoint, overlap_context)) {
+ ao2_cleanup(endpoint);
+ return NULL;
+ }
if (!(endpoint->media.codecs = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT))) {
ao2_cleanup(endpoint);
<parameter name="Allowoverlap">
<para><xi:include xpointer="xpointer(/docs/configInfo[@name='res_pjsip']/configFile[@name='pjsip.conf']/configObject[@name='endpoint']/configOption[@name='allow_overlap']/synopsis/node())"/></para>
</parameter>
+ <parameter name="OverlapContext">
+ <para><xi:include xpointer="xpointer(/docs/configInfo[@name='res_pjsip']/configFile[@name='pjsip.conf']/configObject[@name='endpoint']/configOption[@name='overlap_context']/synopsis/node())"/></para>
+ </parameter>
</syntax>
</managerEventInstance>
</managerEvent>
fetch_callerid_num(session, rdata, cid_num, sizeof(cid_num));
+ /* If there's an overlap_context override specified, use that; otherwise, just use the endpoint's context */
+
if (!strcmp(session->exten, pickupexten) ||
- ast_exists_extension(NULL, session->endpoint->context, session->exten, 1, S_OR(cid_num, NULL))) {
+ ast_exists_extension(NULL, S_OR(session->endpoint->overlap_context, session->endpoint->context), session->exten, 1, S_OR(cid_num, NULL))) {
/*
* Save off the INVITE Request-URI in case it is
* needed: CHANNEL(pjsip,request_uri)
*/
if (session->endpoint->allow_overlap && (
!strncmp(session->exten, pickupexten, strlen(session->exten)) ||
- ast_canmatch_extension(NULL, session->endpoint->context, session->exten, 1, S_OR(cid_num, NULL)))) {
+ ast_canmatch_extension(NULL, S_OR(session->endpoint->overlap_context, session->endpoint->context), session->exten, 1, S_OR(cid_num, NULL)))) {
/* Overlap partial match */
return SIP_GET_DEST_EXTEN_PARTIAL;
}