[OpenSIPS-Users] Problem proxying a SIP connection with t_relay and rtpproxy
Bogdan-Andrei Iancu
bogdan at opensips.org
Mon Oct 10 12:53:47 UTC 2022
Hi Thomas,
Your handling of sequential requests is broken, see here for a correct
sample:
https://github.com/OpenSIPS/opensips/blob/master/etc/opensips.cfg#L109
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
https://www.opensips-solutions.com
OpenSIPS Summit 27-30 Sept 2022, Athens
https://www.opensips.org/events/Summit-2022Athens/
On 9/30/22 11:07 AM, Thomas Pircher via Users wrote:
> Thomas Pircher wrote:
>> The problem I am seeing is when I initiate a connection from the sipp
>> client then I see RTP flowing only in one direction (sipp client to sipp
>> server). I believe this is due to a missing ACK from OpenSIPS to the
>> sipp server following the 200 OK.
>
> Hi,
>
> I no longer think the rtpproxy is part of the problem. I believe this is
> purely an issue with my t_relay configuration.
>
> I did some more tests, and I think the issue is that the ACK from the
> sipp client at 10.30.8.203 is discarded by OpenSIPS, and therefore the
> OpenSIPS does not send the ACK to the sipp server on the internal
> interface.
>
> This would also explain the "404 Not here" response to the BYE at the
> end of the connection:
>
>> ┌───────────┐ ┌─────────────────┐
>> ┌─────────────────┐ ┌───────────┐
>> │sipp client│ │OpenSIPS external│ │OpenSIPS
>> internal│ │sipp server│
>> │10.30.8.203│ │10.30.8.201 │
>> │10.30.9.10 │ │10.30.90.11│
>> └─────┬─────┘ └────────┬────────┘
>> └────────┬────────┘ └─────┬─────┘
>> │ INVITE SDP (g711A) │ │ │
>> │──────────────────────────────────>│
>> │ │
>> │ │ │ │
>> │ 100 Giving it a try │ │ │
>> │<──────────────────────────────────│
>> │ │
>> │ │ │ │
>> │ │ │ INVITE SDP (g711A) │
>> │ │ │──────────────────────────────────>│
>> │ │ │ │
>> │ │ │ 180 Ringing │
>> │ │ │<──────────────────────────────────│
>> │ │ │ │
>> │ 180 Ringing │ │ │
>> │<──────────────────────────────────│
>> │ │
>> │ │ │ │
>> │ │ │200 OK SDP (g711A
>> telephone-event) │
>> │ │ │<──────────────────────────────────│
>> │ │ │ │
>> │200 OK SDP (g711A telephone-event)
>> │ │ │
>> │<──────────────────────────────────│
>> │ │
>> │ │ │ │
>> │ ACK │ │ │
>> │──────────────────────────────────>│
>> │ │
>> │ │ │ │
>> │ │ │200 OK SDP (g711A
>> telephone-event) │
>> │ │ │<──────────────────────────────────│
>> │ │ │ │
>> │200 OK SDP (g711A telephone-event)
>> │ │ │
>> │<──────────────────────────────────│
>> │ │
>> │ │ │ │
>> │ ACK │ │ │
>> │──────────────────────────────────>│
>> │ │
>> │ │ │ │
>> │ │ │200 OK SDP (g711A
>> telephone-event) │
>> │ │ │<──────────────────────────────────│
>> │ │ │ │
>> │200 OK SDP (g711A telephone-event)
>> │ │ │
>> │<──────────────────────────────────│
>> │ │
>> │ │ │ │
>> │ ACK │ │ │
>> │──────────────────────────────────>│
>> │ │
>> │ │ │ │
>> │ │ │200 OK SDP (g711A
>> telephone-event) │
>> │ │ │<──────────────────────────────────│
>> │ │ │ │
>> │200 OK SDP (g711A telephone-event)
>> │ │ │
>> │<──────────────────────────────────│
>> │ │
>> │ │ │ │
>> │ ACK │ │ │
>> │──────────────────────────────────>│
>> │ │
>> │ │ │ │
>> │ │ │200 OK SDP (g711A
>> telephone-event) │
>> │ │ │<──────────────────────────────────│
>> │ │ │ │
>> │ BYE │ │ │
>> │──────────────────────────────────>│
>> │ │
>> │ │ │ │
>> │ 404 Not here │ │ │
>> │<──────────────────────────────────│
>> │ │
>> │ │ │ │
>> │ BYE │ │ │
>> │──────────────────────────────────>│
>> │ │
>> │ │ │ │
>> │ 404 Not here │ │ │
>> │<──────────────────────────────────│
>> │ │
>> ┌─────┴─────┐ ┌────────┴────────┐
>> ┌────────┴────────┐ ┌─────┴─────┐
>> │sipp client│ │OpenSIPS external│ │OpenSIPS
>> internal│ │sipp server│
>> │10.30.8.203│ │10.30.8.201 │
>> │10.30.9.10 │ │10.30.90.11│
>> └───────────┘ └─────────────────┘
>> └─────────────────┘ └───────────┘
>
>
> In my understanding the ACK from the sipp client should be handled by
> the t_relay() code in the global route:
>
>> route {
>> if (!mf_process_maxfd_header(10) {
>> send_reply(483, "Too many hops");
>> exit;
>> }
>>
>> if (has_totag()) {
>> if (is_method("ACK") && t_check_trans()) {
>> t_relay();
>> exit;
>> }
>> ...
>
> However, the t_check_trans() function seems to return False for the ACK
> from the sipp client. Is my understanding wrong? Or is there a mistake
> in my usage in t_relay(, "udp:10.30.90.11:5060")?
>
> Any help is greatly appreciated.
>
> Thanks,
> Thomas
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
More information about the Users
mailing list