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.