I have hosted my own Asterisk server for years, and have a master's degree in computer engineering - so I'm looking for an Asterisk master - not just fooled around with it once or twice...
In some cases, I can make the one-way audio become two-way audio if I force Asterisk to stay in the loop by adding the "m" parameter to Dial(), but in other cases that trick doesn't work.
Whenever it works, I can see RTP packets being sent back and forth, and when it doesn't work, there aren't any errors that I can see, but no RTP packets are sent - presumably it is trying to put the two devices in direct contact with each other, despite "canreinvite = no" on clients and on the upstream SIP provider.
I read some documentation that said canreinvite was replaced by directmedia, and I played around with that for a number of hours, but definitely canreinvite still has some control that can't (or at least can't obviously) be replaced with directmedia.
I'm attaching some relevant files, that I cleaned of passwords, and other custom stuff that I don't think is relevant. If you want to see some other files before bidding, let me know.
The extensions* files are includes from within [login to view URL] (which is basically blank, along with [login to view URL] and [login to view URL])
Our phones are currently down (going to voicemail only - which works fine - both from inside and outside).
Also of note, the asterisk server has one public IP, outside of any firewalls/NAT/etc. Same for the upstream SIP provider (actually they have two servers, but I've limited my access to one, with no change).
All SIP clients are behind a NAT. SIP clients are geographically spread around, so I'm able to verify the same behavior among lots of different brands of routers, etc.
Everything was working on Asterisk 1.6 two days ago without any network changes.
I made minimal changes to the asterisk config files to upgrade from 1.6. It was actually pretty painless... (But, of course, I don't have any audio...)