Asterisk will do DTMF transcoding even when it doesn’t need to. Unless it is able to create a native bridge, it will decode the DTMF, pass it as AST_CONTROL_DTMF messages, and re-encode on the other leg.
Your example doesn’t require any DTMF transcoding, as no DTMF is sent to B in the media stream.
Are you saying that Asterisk is not offering telephony events in its SDP offer to B?
I would note that this case should be rare these days, as all current equipment uses 2833 (or rather its successor).
Well, I found some other way which may resolve my issue. But yes, it seems that if I do SIP INFO in “A” leg, when it sent the call to “B” leg, it only will have SIP INFO in dtmf negotiation which if the “B” leg device do not have SIP INFO, call would fail. What I thought that Asterisk would convert it to RFC2833 and also in the SIP invite to have RFC2833 (instead of the original SIP INFO) in the DTMF negotiation list.
But it seems it is just passing SIP INFO to far end which caused the call fail.