[Freeswitch-users] long DTMF

Nyamul Hassan mnhassan at usa.net
Fri Aug 27 04:17:44 PDT 2010


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 at 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 at gmail.com>wrote:
>
>>
>>
>> On Wed, Aug 25, 2010 at 7:47 PM, Nigel Kent <ktngl at 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 at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20100827/c11f5f46/attachment-0001.html 


More information about the FreeSWITCH-users mailing list