Spent most of th day trying to get an attended transfer working on an analog extension.

Ideally I would like a 2 -way call to be "transfered" when the user hangs up ie. incoming call answered by analog extension (a-leg?), hookflash, dial 3rd party (b-leg?), talk to  them and hang up to bridge a-leg and b-leg.  However I couldn't find any hints on how to do this.

What I did find is information on using att_txfer application in the dialplan as setup in the standard features.xml.  This all works OK, I push *4 on the analog extension, the a-leg gets MOH, analog extension gets the played dialtone but pushing keys on the analog extension to enter the new destination does nothing.  It appears as if DTMF is ignored.

Analog extension users FreeTDM.  Has context as default in freetdm.conf.  Any pointers appreciated.  Below is the console debug.  It starts after the call is setup from a SIP (308) extension to the analog extension freetdm/2:1.

2012-03-11 19:38:50.393576 [DEBUG] ftdm_io.c:3530 [s2c1][1:4] Queuing DTMF * (debug = 0)
2012-03-11 19:38:50.393576 [DEBUG] mod_freetdm.c:799 Queuing DTMF [*] in channel FreeTDM/2:1/ device 2:1
2012-03-11 19:38:50.393576 [DEBUG] switch_ivr_bridge.c:391 Send signal sofia/internal/308@192.168.7.49 [BREAK]
2012-03-11 19:38:51.073573 [DEBUG] ftdm_io.c:3530 [s2c1][1:4] Queuing DTMF 4 (debug = 0)
2012-03-11 19:38:51.073573 [DEBUG] mod_freetdm.c:799 Queuing DTMF [4] in channel FreeTDM/2:1/ device 2:1
2012-03-11 19:38:51.073573 [DEBUG] switch_ivr_async.c:3058 sofia/internal/308@192.168.7.49 Processing meta digit '4' [execute_extension::att_xfer XML features]
2012-03-11 19:38:51.073573 [DEBUG] switch_core_session.c:1014 Send signal FreeTDM/2:1/ [BREAK]
2012-03-11 19:38:51.073573 [DEBUG] switch_ivr_bridge.c:391 Send signal sofia/internal/308@192.168.7.49 [BREAK]
2012-03-11 19:38:51.093575 [DEBUG] switch_core_session.c:731 Send signal FreeTDM/2:1/ [BREAK]
2012-03-11 19:38:51.173589 [DEBUG] switch_core_session.c:1014 Send signal sofia/internal/308@192.168.7.49 [BREAK]
2012-03-11 19:38:51.193585 [DEBUG] switch_core_session.c:731 Send signal sofia/internal/308@192.168.7.49 [BREAK]
2012-03-11 19:38:51.373573 [DEBUG] switch_ivr.c:591 sofia/internal/308@192.168.7.49 Command Execute playback(local_stream://moh)
EXECUTE sofia/internal/308@192.168.7.49 playback(local_stream://moh)
2012-03-11 19:38:51.373573 [DEBUG] mod_local_stream.c:421 Opening Stream [moh/8000] 8000hz
2012-03-11 19:38:51.373573 [DEBUG] switch_ivr_play_say.c:1306 Codec Activated L16@8000hz 1 channels 20ms
2012-03-11 19:38:51.373573 [DEBUG] switch_ivr.c:591 FreeTDM/2:1/ Command Execute execute_extension(att_xfer XML features)
EXECUTE FreeTDM/2:1/ execute_extension(att_xfer XML features)
2012-03-11 19:38:51.373573 [INFO] mod_dialplan_xml.c:485 Processing Shane PC <308>->att_xfer in context features
Dialplan: FreeTDM/2:1/ parsing [features->dx] continue=false
Dialplan: FreeTDM/2:1/ Regex (FAIL) [dx] destination_number(att_xfer) =~ /^dx$/ break=on-false
Dialplan: FreeTDM/2:1/ parsing [features->att_xfer] continue=false
Dialplan: FreeTDM/2:1/ Regex (PASS) [att_xfer] destination_number(att_xfer) =~ /^att_xfer$/ break=on-false
Dialplan: FreeTDM/2:1/ Action read(3 4 'tone_stream://%(10000,0,350,440)' digits 30000 #)
Dialplan: FreeTDM/2:1/ Action set(origination_cancel_key=#)
Dialplan: FreeTDM/2:1/ Action att_xfer(user/${digits}@xxxx.xxx.nz)
2012-03-11 19:38:51.373573 [NOTICE] switch_core_session.c:2386 Execute read(3 4 'tone_stream://%(10000,0,350,440)' digits 30000 #)
EXECUTE FreeTDM/2:1/ read(3 4 'tone_stream://%(10000,0,350,440)' digits 30000 #)
2012-03-11 19:38:51.373573 [DEBUG] switch_ivr_play_say.c:1306 Codec Activated L16@8000hz 1 channels 20ms
2012-03-11 19:39:01.410613 [DEBUG] switch_ivr_play_say.c:1678 done playing file tone_stream://%(10000,0,350,440)