Relaying SIP Reason, cause and text between calls

We all know how cute is asterisk when you dial two extensions like Dial(SIP/100&SIP/200) and one of the extensions answers the call: the other extension gets a SIP CANCEL with Reason: SIP;cause=200;text=“Call completed elsewhere” and the “missed call” message doesn’t appear on the other phone.

Unfortunately, the SIP cause is not being relayed when there are multiple calls in a chain. Let’s make an example. If you have three asterisk servers, name A, B and C. A is processing the call, while B and C have one extension connected. A is calling B and C using a command like Dial(SIP/A&SIP/B) and B calls extension 100 with Dial(SIP/100) and C calls extension 200 with Dial(SIP/200).

      ----- B ---- 100
      ----- C ---- 200

If extension 200 answers the call, A sends a CANCEL to B with the reason “Call completed elsewhere”, but B will not send the same reason to Extension 100, so extension 100 will see a missed call.

Is there any way to have Extension 100 to receive the “Call completed elsewhere” when applicable?

I’ve got exactly the same problem: I need a SIP CANCEL with Reason to pass through Asterisk “C” (as described by Idardini). Unfortunately, CANCEL is relayed but reason is lost.

Is there any way to acheive this?