[Freeswitch-users] exit lua script in hangup hook

Gerald Weber gerald.weber at besharp.at
Wed Jan 25 14:17:51 MSK 2012


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 at 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 at 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 at 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 at 192.168.20.73) Ended
2012-01-25 12:10:21.116050 [NOTICE] switch_core_session.c:1400 Close Channel sofia/internal/2001 at 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 at 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 at 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 at 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 at 192.168.20.73) Ended
2012-01-25 12:13:09.875996 [NOTICE] switch_core_session.c:1400 Close Channel sofia/internal/2001 at 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&regards,
gw
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20120125/0b8c81de/attachment.html 


Join us at ClueCon 2011 Aug 9-11, 2011
More information about the FreeSWITCH-users mailing list