Asterisk 1.8.7.1 with directrtpsetup=yes in sip.conf appears to be eating re-invites after the call is setup.
Call Flow:
User —> Asterisk —> Carrier
After the carrier sends 200ok and user ACKs, user sends a reinvite to redirect media to a non-natted address. I see the re-invite hit Asterisk, but Asterisk does not send the re-invite to the carrier. What’s up with that?
I set ignoresdpversion=yes but the affect is the same. The call sets up the originator re-invites to Asterisk, Asterisk 100 Tries, and 200oks, but never relays the re-invite to the peer on the other side, resulting in 1 way audio.
A technical point. Asterisk is a back to back user agent and will never relay a re-invite; it will generate a new invite based no the updated address information.
However, this situation should not cause one way audio, it should just result in Asterisk relaying RTP to a different address. You cannot pass an invalid address in a re-invite with the expectation that it will be forwarded; there are no guaranteed semantics for B2BUAs in this respect.
In particular, if you have configured anything that is incompatible with external bridging, e.g. directmedia=no, monitoring, enabling T, t, or other features, etc., on the Dial application, Asterisk has to retain the RTP stream. Also, when party B clears, Asterisk will re-invite party A back, even if there was an external bridge.
Having said that, there was a recent bug report external bridging failing to propagate across chains of Asterisks, so you may have hit a bug.