3-Way conference using built-in feature atxferthreeway

Hi,

I am trying to create a 3 way conference after attended transfer.
I have added the following lines to my features.conf file

[general]
atxferthreeway = *42

[featuremap]
atxfer = *2

Expected:
Device zoiperPhone (6003) calls xlite(6001), 6001 answers. 6003 initiates a transfer by pressing *2 and then dialing zoiper’s extension(6000). 6000 answers, 6003 tries to create a multi-party ad hoc bridge by pressing *42. All three parties enter
a conference.

Actual observation:
Device zoiperPhone (6003) calls xlite(6001), 6001 answers. 6003 initiates a transfer by pressing *2 and then dialing zoiper’s extension(6000). 6000 answers, 6003 tries to create a multi-party ad hoc bridge by pressing *42. After pressing *42, 6000 goes to hold instead of entering conference.

Would anybody know what am I missing here?

CLI logs:
Using SIP RTP CoS mark 5
> 0x7fe18804a1a0 – Strict RTP learning after remote address set to: 10.0.0.91:62126
– Executing [6001@from-internal:1] Dial(“SIP/zoiperPhone-00000068”, “SIP/xlite,20,tT”) in new stack
== Using SIP RTP CoS mark 5
– Called SIP/xlite
– SIP/xlite-00000069 is ringing
> 0x7fe18c02a2b0 – Strict RTP learning after remote address set to: 10.0.0.37:51492
– SIP/xlite-00000069 answered SIP/zoiperPhone-00000068
– Channel SIP/xlite-00000069 joined ‘simple_bridge’ basic-bridge <77d7cf3e-5d11-4ba6-8aa0-7b1a347fba96>
– Channel SIP/zoiperPhone-00000068 joined ‘simple_bridge’ basic-bridge <77d7cf3e-5d11-4ba6-8aa0-7b1a347fba96>
> 0x7fe18c02a2b0 – Strict RTP switching to RTP target address 10.0.0.37:51492 as source
> 0x7fe18804a1a0 – Strict RTP switching to RTP target address 10.0.0.91:62126 as source
> 0x7fe18804a1a0 – Strict RTP learning complete - Locking on source address 10.0.0.91:62126
– Channel SIP/zoiperPhone-00000068: Started DTMF attended transfer.
– Started music on hold, class ‘default’, on channel ‘SIP/xlite-00000069’
– <SIP/zoiperPhone-00000068> Playing ‘pbx-transfer.gsm’ (language ‘en’)
> 0x7fe18c02a2b0 – Strict RTP learning complete - Locking on source address 10.0.0.37:51492
– Channel Local/6000@from-internal-00000011;1 joined ‘simple_bridge’ basic-bridge <1ed9d6a1-0875-4cc6-85b3-cd832b6e2953>
– Executing [6000@from-internal:1] Dial(“Local/6000@from-internal-00000011;2”, “SIP/zoiper,20,tT”) in new stack
== Using SIP RTP CoS mark 5
– Called SIP/zoiper
– Local/6000@from-internal-00000011;2 requested media update control 26, passing it to SIP/zoiper-0000006a
– Channel SIP/zoiperPhone-00000068 left ‘simple_bridge’ basic-bridge <77d7cf3e-5d11-4ba6-8aa0-7b1a347fba96>
– Channel SIP/zoiperPhone-00000068 joined ‘simple_bridge’ basic-bridge <1ed9d6a1-0875-4cc6-85b3-cd832b6e2953>
– SIP/zoiper-0000006a is ringing
> 0x7fe19001b1c0 – Strict RTP learning after remote address set to: 10.0.0.24:49233
– SIP/zoiper-0000006a answered Local/6000@from-internal-00000011;2
– Channel SIP/zoiper-0000006a joined ‘simple_bridge’ basic-bridge
– Channel Local/6000@from-internal-00000011;2 joined ‘simple_bridge’ basic-bridge
> 0x7fe19001b1c0 – Strict RTP switching to RTP target address 10.0.0.24:49233 as source
> 0x7fe19001b1c0 – Strict RTP learning complete - Locking on source address 10.0.0.24:49233
– Channel SIP/zoiperPhone-00000068 left ‘simple_bridge’ basic-bridge <1ed9d6a1-0875-4cc6-85b3-cd832b6e2953>
– Channel SIP/zoiperPhone-00000068 joined ‘simple_bridge’ basic-bridge <77d7cf3e-5d11-4ba6-8aa0-7b1a347fba96>
– Stopped music on hold on SIP/xlite-00000069
– Started music on hold, class ‘default’, on channel ‘Local/6000@from-internal-00000011;1’
– Channel Local/6000@from-internal-00000011;1 left ‘simple_bridge’ basic-bridge <1ed9d6a1-0875-4cc6-85b3-cd832b6e2953>
– Channel Local/6000@from-internal-00000011;1 joined ‘simple_bridge’ basic-bridge <77d7cf3e-5d11-4ba6-8aa0-7b1a347fba96>
– Channel SIP/zoiperPhone-00000068 left ‘simple_bridge’ basic-bridge <77d7cf3e-5d11-4ba6-8aa0-7b1a347fba96>
– Stopped music on hold on Local/6000@from-internal-00000011;1
– <Local/6000@from-internal-00000011;1> Playing ‘beep.gsm’ (language ‘en’)
== Spawn extension (from-internal, 6001, 1) exited non-zero on ‘SIP/zoiperPhone-00000068’
> Move-swap optimizing Local/6000@from-internal-00000011;2 ← SIP/xlite-00000069.
– Channel SIP/xlite-00000069 left ‘simple_bridge’ basic-bridge <77d7cf3e-5d11-4ba6-8aa0-7b1a347fba96>
– Channel Local/6000@from-internal-00000011;2 left ‘simple_bridge’ basic-bridge
– Channel SIP/xlite-00000069 swapped with Local/6000@from-internal-00000011;2 into ‘simple_bridge’ basic-bridge
– Channel Local/6000@from-internal-00000011;1 left ‘simple_bridge’ basic-bridge <77d7cf3e-5d11-4ba6-8aa0-7b1a347fba96>
== Spawn extension (from-internal, 6000, 1) exited non-zero on ‘Local/6000@from-internal-00000011;2’
– Channel SIP/xlite-00000069 left ‘simple_bridge’ basic-bridge
– Channel SIP/zoiper-0000006a left ‘simple_bridge’ basic-bridge

Never mind. I was able to make it work.
Apparently, the option atxferswap is required to be added along with atxferthreeway under general section of features.conf.
I’m using Asterisk 16.30.0. Not sure if it’s a bug or is supposed to work this way.