Gerald,
This is a feature/quirk of Lua. There is no explicit exit command. The script keeps running until there are no more commands. You'll need to restructure your loops so that when someone hangups it breaks out of the outermost loop and then has nothing left to execute.
-MC
Hello,
i’m trying to exit my lua script (called from dialplan) to exit in the the hanguphook:
function on_hangup(s,status)
freeswitch.consoleLog("NOTICE","---- on_hangup: "..status.."\n");
error();
end
freeswitch.consoleLog("NOTICE","---- ANSWER:\n");
session:answer();
freeswitch.consoleLog("NOTICE","---- SETHOOK: \n");
session:setHangupHook("on_hangup");
while (session:ready() == true) do
freeswitch.consoleLog("NOTICE","---- START OF LOOP \n");
freeswitch.consoleLog("NOTICE","---- STREAMFILE \n");
session:streamFile("/usr/local/freeswitch/sounds/en/us/callie/ivr/8000/ivr-on_hold_indefinitely.wav");
freeswitch.consoleLog("NOTICE","---- END OF SCRIPT 1 -> HANGUP\n");
end
freeswitch.consoleLog("NOTICE","---- END OF SCRIPT 2 -> HANGUP\n");
session:hangup()
When I hangup during the streamFile Call, I geht the following output:
2012-01-25 12:10:19.936097 [NOTICE] switch_channel.c:930 New Channel sofia/internal/2001@192.168.20.73 [2b1cd9f6-4745-11e1-8c71-0d2938abf0b5]
2012-01-25 12:10:19.936097 [INFO] mod_dialplan_xml.c:481 Processing B#-FS-2001 <2001>->3001 in context default
2012-01-25 12:10:19.936097 [NOTICE] switch_cpp.cpp:1227 ---- ANSWER:
2012-01-25 12:10:19.936097 [NOTICE] switch_cpp.cpp:599 Channel [sofia/internal/2001@192.168.20.73] has been answered
2012-01-25 12:10:19.936097 [NOTICE] switch_cpp.cpp:1227 ---- SETHOOK:
2012-01-25 12:10:19.936097 [NOTICE] switch_cpp.cpp:1227 ---- START OF LOOP
2012-01-25 12:10:19.936097 [NOTICE] switch_cpp.cpp:1227 ---- STREAMFILE
2012-01-25 12:10:21.116050 [NOTICE] sofia.c:624 Hangup sofia/internal/2001@192.168.20.73 [CS_EXECUTE] [NORMAL_CLEARING]
2012-01-25 12:10:21.116050 [NOTICE] switch_cpp.cpp:1227 ---- on_hangup: hangup
2012-01-25 12:10:21.116050 [NOTICE] switch_cpp.cpp:1227 ---- END OF SCRIPT 1 -> HANGUP
2012-01-25 12:10:21.116050 [NOTICE] switch_cpp.cpp:1227 ---- END OF SCRIPT 2 -> HANGUP
2012-01-25 12:10:21.116050 [NOTICE] switch_core_session.c:1398 Session 2 (sofia/internal/2001@192.168.20.73) Ended
2012-01-25 12:10:21.116050 [NOTICE] switch_core_session.c:1400 Close Channel sofia/internal/2001@192.168.20.73 [CS_DESTROY]
Why does the hangup handler return and the rest of the script is executed ?
I event tried “do return end;” , “exit;” ,” exit();” instead of “error(); - none of them works.
If i put the same logic into javascript, the hook works and the script is terminated:
function on_hangup(s,status)
{
console_log("NOTICE","---- hangup "+status+"\n");
return "exit";
}
console_log("NOTICE","---- ANSWER\n");
session.answer();
console_log("NOTICE","---- ANSWER\n");
session.setHangupHook(on_hangup);
while(session.ready())
{
console_log("NOTICE","---- START OF LOOP\n");
session.streamFile("/usr/local/freeswitch/sounds/en/us/callie/ivr/8000/ivr-on_hold_indefinitely.wav");
console_log("NOTICE","---- END OF LOOP\n");
}
console_log("NOTICE","---- END OF SCRIPT\n");
session.hangup();
2012-01-25 12:13:08.396041 [NOTICE] switch_channel.c:930 New Channel sofia/internal/2001@192.168.20.73 [8f85a15c-4745-11e1-8c76-0d2938abf0b5]
2012-01-25 12:13:08.396041 [INFO] mod_dialplan_xml.c:481 Processing B#-FS-2001 <2001>->3002 in context default
2012-01-25 12:13:08.396041 [NOTICE] hangup.js:1 ---- ANSWER
2012-01-25 12:13:08.396041 [NOTICE] mod_spidermonkey.c:2068 Channel [sofia/internal/2001@192.168.20.73] has been answered
2012-01-25 12:13:08.396041 [NOTICE] hangup.js:1 ---- ANSWER
2012-01-25 12:13:08.396041 [NOTICE] hangup.js:1 ---- START OF LOOP
2012-01-25 12:13:09.875996 [NOTICE] sofia.c:624 Hangup sofia/internal/2001@192.168.20.73 [CS_EXECUTE] [NORMAL_CLEARING]
2012-01-25 12:13:09.875996 [NOTICE] hangup.js:2 ---- hangup hangup
2012-01-25 12:13:09.875996 [NOTICE] switch_core_session.c:1398 Session 3 (sofia/internal/2001@192.168.20.73) Ended
2012-01-25 12:13:09.875996 [NOTICE] switch_core_session.c:1400 Close Channel sofia/internal/2001@192.168.20.73 [CS_DESTROY]
Any suggestions ? Or do i miss something here ?
The dialplan part:
<extension name="hanguptest">
<condition field="destination_number" expression="^(3001)$">
<action application="set" data="session_in_hangup_hook=true"/>
<action application="lua" data="hangup.lua"/>
</condition>
</extension>
(replace hangup.lua with hangup.js for the javascript version)
Freeswitch Version:
FreeSWITCH Version 1.0.head (git-9be51d5 2012-01-21 13-45-21 -0500)
thx®ards,
gw
_________________________________________________________________________
Professional FreeSWITCH Consulting Services:
consulting@freeswitch.org
http://www.freeswitchsolutions.com
FreeSWITCH-powered IP PBX: The CudaTel Communication Server
http://www.cudatel.com
Official FreeSWITCH Sites
http://www.freeswitch.org
http://wiki.freeswitch.org
http://www.cluecon.com
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org