I did read your emails, and I thought the Lua script idea was nice. The ESL was more complicated, but also good. But, you didn't accept either. So, I was wondering, is this "bind_long_DTMF" something that allows you to capture DTMF during the full length of the call, i.e. even after bridge? Is that what you wished to accomplish? Regards HASSAN On Fri, Aug 27, 2010 at 15:03, Tihomir Culjaga <tculjaga@gmail.com> wrote:
as usual we are alone here ... I just lost my patience and did it directly in code!
Once rewriting according to FS requirements done , will provide a patch if anyone interested.
-----------------<-snip->----------------------- /*it's hardcoded but who cares at that point :))*/ if (dtmf->digit == '#') { int ok = 0; *digit = dtmf->digit; dval = atoi(digit); dval=0; /* temporary fake the bind key */ if (direction == SWITCH_DTMF_RECV && (md->sr[direction].map[dval].bind_flags & SBF_DIAL_ALEG)) { ok = 1; } else if (direction == SWITCH_DTMF_SEND && (md->sr[direction].map[dval].bind_flags & SBF_DIAL_BLEG)) { ok = 1; }
if (ok && md->sr[direction].map[dval].app) { uint32_t flags = md->sr[direction].map[dval].flags;
if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_OPPOSITE)) { if (direction == SWITCH_DTMF_SEND) { flags |= SMF_ECHO_ALEG; } else { flags |= SMF_ECHO_BLEG; } } else if ((md- >sr[direction].map[dval].bind_flags & SBF_EXEC_SAME)) { if (direction == SWITCH_DTMF_SEND) { flags |= SMF_ECHO_BLEG; } else { flags |= SMF_ECHO_ALEG; } } else if ((md- >sr[direction].map[dval].bind_flags & SBF_EXEC_ALEG)) { flags |= SMF_ECHO_ALEG; } else if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_BLEG)) { flags |= SMF_ECHO_BLEG; } else { flags |= SMF_ECHO_ALEG; }
if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_INLINE)) { flags |= SMF_EXEC_INLINE; }
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Processing meta digit '%c' [%s]\n",
switch_channel_get_name(channel), dtmf->digit, md->sr[direction].map[dval].app);
if (switch_channel_test_flag(channel, CF_PROXY_MODE)) { broadcast_in_thread(session, md->sr[direction].map[dval].app, flags | SMF_REBRIDGE); } else {
switch_ivr_broadcast(switch_core_session_get_uuid(session), md->sr[direction].map[dval].app, flags); } if ((md->sr[direction].map[dval].bind_flags & SBF_ONCE)) {
memset(&md->sr[direction].map[dval], 0, sizeof(md->sr[direction].map[dval]));
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s Unbinding meta digit '%c'\n",
switch_channel_get_name(channel), dtmf->digit); } } else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s Ignoring meta digit '%c' not mapped\n",
switch_channel_get_name(channel), dtmf->digit); }
/* return SWITCH_STATUS_SUCCESS; */ return SWITCH_STATUS_FALSE;
}
-----------------<-snip->-----------------------
usage in DP:
<action application="bind_long_dtmf" data="0 a s transfer::myExtension XML myContext"/>
in myExtension you do your stuff!
On Wed, Aug 25, 2010 at 10:14 PM, Tihomir Culjaga <tculjaga@gmail.com>wrote:
On Wed, Aug 25, 2010 at 7:47 PM, Nigel Kent <ktngl@yahoo.co.uk> wrote:
Have you tried using the event socket library http://wiki.freeswitch.org/wiki/Esl
well, i could have used esl from the start but thats and external application controling FS... and its totally a different approach from where im now:(. I have everything up & running except this feature ..
so is there any chance to run a lua script in background (by allowing the normal callflow to go on) to collect a special DTMF event ?
something like this:
<action application="set" data="api_result=${lua(script.lua)}"/>
?
T.
_______________________________________________ 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