Asterisk Not Matching Longest Prefix With Include

Home » Asterisk Users » Asterisk Not Matching Longest Prefix With Include
Asterisk Users 6 Comments

Hi,

My dialplan looks like this:
[from-external]

Exten => _X.,1,Noop(CALL IS COMING INTO FROM EXTERNAL CONTEXT)
Exten => _X.,n,Noop(IP: ${CHANNEL(recvip)})
Exten => _X.,n,Noop(CALLED NUMBER: ${EXTEN})
Exten => _X.,n,Ringing Exten => _X.,n,WaitExten(15)
Exten => _X.,n,Congestion()
Exten => _X.,n,Hangup()

include => test

[test]

Exten => 8282,1,Noop(— WE GOT TO CONTEXT TEST!——— )

If I dial 8282 I would thing that I would see in the CLI ” — WE GOT TO
CONTEXT TEST!———” however when I make a test call I see:

== Using SIP RTP CoS mark 5
— Executing [8282@from-external:1] NoOp(“SIP/192.168.200.32-00000000”,
“CALL IS COMING INTO FROM EXTERNAL CONTEXT”) in new stack
— Executing [8282@from-external:2] NoOp(“SIP/192.168.200.32-00000000”,
“IP: 192.168.200.10”) in new stack
— Executing [8282@from-external:3] NoOp(“SIP/192.168.200.32-00000000”,
“CALLED NUMBER: 8282”) in new stack
— Executing [8282@from-external:4]
Ringing(“SIP/192.168.200.32-00000000”, “”) in new stack
— Executing [8282@from-external:5]
WaitExten(“SIP/192.168.200.32-00000000”, “15”) in new stack
== Spawn extension (from-external, 8282, 5) exited non-zero on
‘SIP/192.168.200.32-00000000’

It seems that the 8282 in test is being ignored now if I comment out all lines starting with ” Exten => _X.,1″ so my dialplan looks like this:

[from-external]
Exten => 1234,1,Noop()

;Exten => _X.,1,Noop(CALL IS COMING INTO FROM EXTERNAL CONTEXT)
;Exten => _X.,n,Noop(IP: ${CHANNEL(recvip)})
;Exten => _X.,n,Noop(CALLED NUMBER: ${EXTEN})
;Exten => _X.,n,Ringing
;Exten => _X.,n,WaitExten(15)
;Exten => _X.,n,Congestion()
;Exten => _X.,n,Hangup()

include => test

[test]

Exten => 8282,1,Noop(— WE GOT TO CONTEXT TEST!——— )

Then there is no issue and I see in the console:
== Using SIP RTP CoS mark 5
— Executing [8282@from-external:1] NoOp(“SIP/204.145.219.32-00000001”,
“— WE GOT TO CONTEXT TEST!——— “) in new stack

Is this a bug or is this operating as designed (which I don’t think is the case).

TIA.

Dovid

6 thoughts on - Asterisk Not Matching Longest Prefix With Include

  • Dovid,

    This has to do with sort order, try this:

    [from-external]

    ; Order DOES count

    include => test include => match_all

    [match_all]

    Exten => _X.,1,Noop(CALL IS COMING INTO FROM EXTERNAL CONTEXT)
    Exten => _X.,n,Noop(IP: ${CHANNEL(recvip)})
    Exten => _X.,n,Noop(CALLED NUMBER: ${EXTEN})
    Exten => _X.,n,Ringing Exten => _X.,n,WaitExten(15)
    Exten => _X.,n,Congestion()
    Exten => _X.,n,Hangup()

    [test]

    Exten => 8282,1,Noop(— WE GOT TO CONTEXT TEST!——— )

  • Doug,

    I tried that as well. Even with my dialplan looking like this:

    [from-external]
    Exten => 1234,1,Noop()

    include => test

    Exten => _X.,1,Noop(CALL IS COMING INTO FROM EXTERNAL CONTEXT)
    Exten => _X.,n,Noop(IP: ${CHANNEL(recvip)})
    Exten => _X.,n,Noop(CALLED NUMBER: ${EXTEN})
    Exten => _X.,n,Ringing Exten => _X.,n,WaitExten(15)
    Exten => _X.,n,Congestion()
    Exten => _X.,n,Hangup()

    [test]

    Exten => 8282,1,Noop(— WE GOT TO CONTEXT TEST!——— )

    It still didnt work. Now if I did:

    [from-external]
    Exten => 1234,1,Noop()

    include => test

    Exten => _X.,1,Noop(CALL IS COMING INTO FROM EXTERNAL CONTEXT)
    Exten => _X.,n,Noop(IP: ${CHANNEL(recvip)})
    Exten => _X.,n,Noop(CALLED NUMBER: ${EXTEN})
    Exten => _X.,n,Ringing Exten => _X.,n,WaitExten(15)
    Exten => _X.,n,Congestion()
    Exten => _X.,n,Hangup()

    Exten => 8282,1,Noop(— WE GOT TO CONTEXT TEST!——— )

    OR if I did:
    [from-external]
    Exten => 1234,1,Noop()

    include => test

    Exten => _X.,1,Noop(CALL IS COMING INTO FROM EXTERNAL CONTEXT)
    Exten => _X.,n,Noop(IP: ${CHANNEL(recvip)})
    Exten => _X.,n,Noop(CALLED NUMBER: ${EXTEN})
    Exten => _X.,n,Ringing Exten => _X.,n,WaitExten(15)
    Exten => _X.,n,Congestion()
    Exten => _X.,n,Hangup()

    Exten => 8282,1,Noop(— WE GOT TO CONTEXT TEST!——— )

    Either way it worked. It seems that when there is an include so long as there is something else that matches in the context you are in, even if it’s shorter that takes preference to a longer match which seems like a bug.

  • Ordering by includes works for me under Asterisk 11 and 13

    What does the output of the below show?

    dialplan show from-external

    Doug

  • It shows:
    fingerprint1*CLI> dialplan show from-external
    [ Context ‘from-external’ created by ‘pbx_config’ ]
    ‘1234’ => 1. Noop()
    [extensions.conf:2]
    ‘_X.’ => 1. Noop(CALL IS COMING INTO FROM EXTERNAL CONTEXT)
    [extensions.conf:7]
    2. Noop(IP: ${CHANNEL(recvip)})
    [extensions.conf:8]
    3. Noop(CALLED NUMBER: ${EXTEN})
    [extensions.conf:9]
    4. Ringing()
    [extensions.conf:10]
    5. WaitExten(15)
    [extensions.conf:11]
    6. Congestion()
    [extensions.conf:12]
    7. Hangup()
    [extensions.conf:13]
    Include => ‘test’
    [pbx_config]

    -= 2 extensions (8 priorities) in 1 context. =-

    I am going to build Asterisk 14, 13 etc. to see if I can re-produce on those versions.

  • The context always takes priority over includes. Includes are only examined if there are no matches in the current context. It’s always worked this way. Ordering includes as such is one way to control that. As it is the matching is working as expected.


    Joshua Colp Digium, Inc. | Senior Software Developer
    445 Jan Davis Drive NW – Huntsville, AL 35806 – US
    Check us out at: http://www.digium.com & http://www.asterisk.org