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&regards,

gw