Hi everyone,
I am in the process of doing something very straightforward - hooking up a DID from Link2Voip into my FS instance (built from SVN Curent on Debian)
In an effort to only change as little as possible to get this baby to respond to a phone call, I have simply added my provider into the /conf/sip_profiles/external and also added in the extension file into /conf/dialplan/extensions
I am able to get the system to Register and I am also able to get an incoming call - however that is where the fun stops.
I hit F8 on my console and this is what I got:
2008-09-18 02:11:38 [INFO] mod_dialplan_xml.c:228 dialplan_hunt() Processing 6044880583->18665780244 in context public
2008-09-18 02:11:38 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions ${unroll_loops}(true) =~ /^true$/
2008-09-18 02:11:38 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions ${sip_looped_call}() =~ /^true$/
2008-09-18 02:11:38 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 02:11:38 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^(10[01][0-9])$/
2008-09-18 02:11:38 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 02:11:38 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^(5551212)$/
2008-09-18 02:11:38 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 02:11:38 [INFO] switch_core_state_machine.c:114 switch_core_standard_on_routing() No Route, Aborting
I think I understand what is going on here - but I disagree with defaults.
For most users, I would expect them to do exactly what I just did - try to change as little as possble and only add files as needed.
So finding that the initial root of the dialplan matching happens within public.xml, I attempted to see if there was a better regex match (better than the 5551212 :) and tried ^\d{10,15}$ - basically any number between 10 and 15 digits, good for most of the planet generically. I got no matches, so I though maybe the syntax was strange and went for something simpler - ^[0-9]{10,15}$ - still no matches. Then I brute forced it - ^(18665780244)$ - got a match! yay! - Fun stops again :(
Just to be sure my custom extension matcher in the /conf/dialplan/extensions did not interfere with anything, I renamed it to get it from loading.
here is the other fun stopper:
My default context starts to be processed and here is the end of it....
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^9997$/
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^9998$/
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^9999$/
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^(pizza|74992)$/
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions ${module_exists(mod_enum)}(true) =~ /true/
2008-09-18 02:52:29 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^(.*)$/
2008-09-18 02:52:29 [DEBUG] switch_core_state_machine.c:129 switch_core_standard_on_execute() Standard EXECUTE
2008-09-18 02:52:29 [DEBUG] switch_core_state_machine.c:140 switch_core_standard_on_execute()
sofia/external/6045151148@66.51.127.163 Execute set(use_profile=${cond(${acl(${network_addr} rfc1918)} == true ? nat : default)})
2008-09-18 02:52:29 [DEBUG] mod_dptools.c:703 set_function() SET [use_profile]=[default]
2008-09-18 02:52:29 [DEBUG] switch_core_session.c:1059 switch_core_session_execute_application()
sofia/external/6045151148@66.51.127.163 Expanded String db(insert/spymap/6045151148/81684762-8567-11dd-967a-a76d8ceadf4f)
2008-09-18 02:52:29 [DEBUG] sofia.c:332 sofia_event_callback() nua_r_cancel: unknown event 32: 200 canceling
2008-09-18 02:52:29 [DEBUG] sofia.c:200 sofia_event_callback() event [nua_r_invite] status [500][Server error occurred (1/SL)] session: n/a
2008-09-18 02:52:29 [DEBUG] switch_ivr_originate.c:1444 switch_ivr_originate() Originate Cancelled by originator termination Cause: 487 [ORIGINATOR_CANCEL]
2008-09-18 02:52:29 [INFO] mod_dptools.c:1814 audio_bridge_function() Originate Failed. Cause: ORIGINATOR_CANCEL
Notice the ultra generic destination number matcher getting matched? At this point it seems there is some sort of infinite loop that would keep going until I hung up the phone. I hunt down where the matcher is getting matched and find that it is in the same folder as my custom matcher inside 99999_enum.xml
So at this point, I go ahead and add back in my custom extension file - I get the same result - what the hell? why is my matcher not getting fired? - because its name is "link2voip.xml" which comes AFTER 99999:
-rw-r--r-- 1 root root 373 2008-09-18 01:27 00_pizza_demo.xml
-rw-r--r-- 1 root root 266 2008-09-18 01:27 99999_enum.xml
-rw-r--r-- 1 root root 177 2008-09-18 03:01 link2voip.xml
I then rename it so it comes up sooner:
-rw-r--r-- 1 root root 177 2008-09-18 03:01 00_link2voip.xml
-rw-r--r-- 1 root root 373 2008-09-18 01:27 00_pizza_demo.xml
-rw-r--r-- 1 root root 266 2008-09-18 01:27 99999_enum.xml
server-06:/usr/local/freeswitch/conf/dialplan/extensions#
Tada! I get my wish and I can now route to where I want to! Now if I can only get the voice mail app to think I am actually saying something - I think I need to route to the echo app to see what I am saying :)
2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^9996$/
2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^9997$/
2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^9998$/
2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^9999$/
2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:115 parse_exten() Regex mismatch
2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /18665780244/
2008-09-18 03:08:28 [DEBUG] switch_core_state_machine.c:129 switch_core_standard_on_execute() Standard EXECUTE
2008-09-18 03:08:28 [DEBUG] switch_core_state_machine.c:140 switch_core_standard_on_execute()
sofia/external/6045151148@66.51.127.163 Execute set(use_profile=${cond(${acl(${network_addr} rfc1918)} == true ? nat : default)})
2008-09-18 03:08:28 [DEBUG] mod_dptools.c:703 set_function() SET [use_profile]=[default]
2008-09-18 03:08:28 [DEBUG] switch_core_session.c:1059 switch_core_session_execute_application()
sofia/external/6045151148@66.51.127.163 Expanded String db(insert/spymap/6045151148/bd8aaddc-8569-11dd-bca0-bfa449b5017d)
2008-09-18 03:08:28 [DEBUG] switch_core_state_machine.c:140 switch_core_standard_on_execute()
sofia/external/6045151148@66.51.127.163 Execute db(insert/last_dial/${caller_id_number}/${destination_number})
2008-09-18 03:08:28 [DEBUG] switch_core_session.c:1059 switch_core_session_execute_application()
sofia/external/6045151148@66.51.127.163 Expanded String db(insert/last_dial/6045151148/18665780244)
2008-09-18 03:08:29 [DEBUG] switch_core_session.c:1059 switch_core_session_execute_application()
sofia/external/6045151148@66.51.127.163 Expanded String db(insert/last_dial/global/bd8aaddc-8569-11dd-bca0-bfa449b5017d)
2008-09-18 03:08:29 [INFO] mod_dialplan_xml.c:228 dialplan_hunt() Processing 6045151148->1001 in context default
So as a Recap, here is what I would like to have changed if possible:
- A better regex for the default DID install
- Fix the regex on the enum extension OR remove it OR Better documentation surrounding the name of a file for custom extensions
- It would be awesome to see the dialplan hunt debugs indicate the name of the extension of the match it is currently looking at, for example
- 2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:113 parse_exten() test conditions destination_number(18665780244) =~ /^9998$/
- would become:
- 2008-09-18 03:08:28 [DEBUG] mod_dialplan_xml.c:113 parse_exten() {tone_stream} test conditions destination_number(18665780244) =~ /^9998$/
-
Fix the infinite loop on the enum extension
Thanks for listening!
Christian
P.S. I originally tried this out on Windows and instead of my destination number getting set correctly, the destination number kept coming back as the username I used to log in with. Is this a known issue or shall I debug?