I guess you are forwarding the INVITE to the gateway using t_relay. Thus, you forward statefully by creating a transaction inside openser's tm module. Thus, for the transaction to complete, the tm module also has to see the ACK. Thus, you have to t_relay the ACK too.
Thanks Klaus, that's what I've been doing. The thing that prompted me to email was a Grandstream phone that about 80% of the time will cause openser1.1.0 to go in a loop, blasting the ACK around internally, coming in the top of route[0] and subsequently being t_relayed() until I get too many hops.
This is all internal, no packets are generated on the ethernet interface.
I've looked at the ACK the Grandstream sends back and compared it to the ACK I get from a Linksys and they are almost identical. The only difference is the Linksys puts the port number on the ACK and To: like this:
ACK sip:18005551212@openser.example.com:5060 SIP/2.0 To: sip:18005551212@openser.example.com:5060;tag=foo-9235
while the Grandstream doesn't mention the port:
ACK sip:18005551212@openser.example.com SIP/2.0 To: sip:18005551212@openser.example.com;tag=foo-055c
Even if the solution is to upgrade to 1.2.0 (which I'm going to do), if this was a known problem then I'ld appreciate hearing that.
Thanks, -mark