The carrier interop engineer sent me the following remark after I notified them of the issue, and began pressing them on the way their ACK was created.
The Request URI field is used for routing of initial dialog messages. If state is not kept in [Open]SER by using the tm module, the SIP message can be routed based on the VIA or contact header, or worst case follow the same routing rules based on the original Request URIs, just like the original INVITE message did.
After some subsequent communication where I again questioned the way in which their system creates the ACK. I received the below from them.
== BEGIN ==
All I was saying is that based on the way your system handles messages we send to it, your statement about changing the Request-URIs of ACKs based on values from the SDP of the 200 OK is not the case. I believe that some systems do however update the ACK’s Request-URI based on the Contact header field from the 200 response, but most system’s don’t route the ACK based on its Request-URI when keeping state.
I have another question based on our use of SER internally. When we send the initial INVITE, the Request-URI is set as the number at (@) the address of your [Open]SER proxy. SER will then re-write the request URI of the INVITE based on the logic in the local ser.cfg file and any local location/alias database entries used in that logic and forward the message to the destination, in this case the PBX, while adding a Record-Route header with LR set to ensure SER stays in the dialog in terms of signaling as well as adding a VIA header with a branch tag used to mark the dialog for stateful processing (when the TM module is used). In the case of stateful processing, these values are used to maintain the same signaling path for subsequent messages within the same dialog.
When stateless routing is used via the SL module, all new requests (including an ACK to a 200 response) should follow the same routing logic as the initial request. Therefore, when the ACK arrives at your SER proxy, the same routing logic should be applied to the ACK as was the original INVITE, and it should be forwarded on to the correct destination. If this is not the case, then either there must be some kind of state being tracked or the logic has been written to handle ACKs differently on purpose as this would be the only way that the handling and routing (especially the computation of the final request-uri) would be different for an ACK from an INVITE.
== END ==
At this point I am ready to address any issue with my OpenSER configuration that can be identified, but if the problem is actually due to the ACK not being constructed correctly, I have to take off the technical hat, and put on the business hat, and try to get them to look at their systems, and push their vendors for support in this issue.