On 07/05/14 15:27, Peter Villeneuve wrote:
Hmm, after experiencing some difficulty with a pjsip
client that's
behind symmetric NAT, further inspection of its logs left me somewhat
confused.
Here's the relevant part of the logs of client behind symmetric NAT
receiving an INVITE
D/libpjsip(10600): a=candidate:Sc0a80104 1 UDP 1862270975 85.xx.xx.xx
4016 typ srflx raddr 192.168.1.4 rport 4016
D/libpjsip(10600): a=candidate:Hc0a80104 1 UDP 1694498815 192.168.1.4
4016 typ host
D/libpjsip(10600): a=candidate:Sc0a80104 2 UDP 1862270974 85.xx.xx.xx
4032 typ srflx raddr 192.168.1.4 rport 4032
D/libpjsip(10600): a=candidate:Hc0a80104 2 UDP 1694498814 192.168.1.4
4032 typ host
D/libpjsip(10600): a=sendrecv
D/libpjsip(10600): a=rtcp:30057
D/libpjsip(10600): a=candidate:VStiX9ltDBcGrfnS 1 UDP 2130706432
190.xx.xx.xx 30056 typ host
D/libpjsip(10600): a=candidate:VStiX9ltDBcGrfnS 2 UDP 2130706431
190.xx.xx.xx 30057 typ host
Now a few things here seem confusing to me.
1) The rtpengine IP (190.) is added as a host candidate (shouldn't it be
relay instead?).
The type is "host" unless you use the "force_relay" option. Even
though
"host" is technically not correct, generally going through a dedicated
RTP proxy is the next best thing after direct host to host
communication, preferable to other relay methods determined by the peers.
2) The candidate priorities seem wrong. ie the local
address is
correctly added as host, but isn't 1694498815 less than 1862270975?
meaning the srflx candidate has higher priority than the host candidate
if I understand the RFC correctly - shouldn't that be the other way around?
Correct. These candidates were inserted by the originating client and so
there's nothing rtpengine can do about them. The priorities weren't
calculated by the RFC recommended method and so seem incorrect.
3) The priority of the rtpengine candidate (190.) is
2130706432, which
again is greater than all the other priorities, meaning my rtpengine
relay will get the highest priority instead of the opposite.
This is caused by the incorrect priorities of the other candidates.
Rtpengine added itself as lowest possible priority "host" candidate,
which however is still a higher priority than the other candidates,
because they have an incorrect(?) priority value.
For your use case, you may have better luck with the "force_relay" option.
cheers