Re: [pjsip] Sending large SIP packets over UDP?

JL
Johan Lantz
Tue, Feb 3, 2009 11:39 AM

Hi Benny

Thanks for the detailed response on my question. It is highly appriciated.

I came up with one final idea that it would be great if you could give
thumps up or down on if I am missing some special cases.

I am only interested in having minimal delay for the INVITE, the rest I
do not care about, all other messages can very well be TCP.

So my proposal was to set transport=tcp for the outgoing proxy and then
in pjsua_make_call(..) when assigning the route set I will know
beforhand if this INVITE is to be sent on tcp or udp. Ofcourse I will
not know the exact size in bytes but I will have a good idea if it is
<1300 bytes.

What I imagine doing is modify the route-set for the account under these
special conditions and either remove it completly (less good, require
dns lookup?) or make a temp route-set as a copy of the original one and
just remove the transport=tcp parameter making this dialog use the same
route-set but UDP instead of the default TCP if the estimation of the
packet size is <1300.

I tested just to remove the:
f (!pj_list_empty(&acc->route_set))
pjsip_dlg_set_route_set(dlg, &acc->route_set);

all together and it appears to work ok. Registration etc is TCP and the
dialog is running UDP. The next step would be making a clone of the
acc->route_set and removing the transport=tcp.

This seems like a pretty simple solution for my needs. Do you think I
miss something vital in taking this approach?

Thanks

Johan

Hi Benny Thanks for the detailed response on my question. It is highly appriciated. I came up with one final idea that it would be great if you could give thumps up or down on if I am missing some special cases. I am only interested in having minimal delay for the INVITE, the rest I do not care about, all other messages can very well be TCP. So my proposal was to set transport=tcp for the outgoing proxy and then in pjsua_make_call(..) when assigning the route set I will know beforhand if this INVITE is to be sent on tcp or udp. Ofcourse I will not know the exact size in bytes but I will have a good idea if it is <1300 bytes. What I imagine doing is modify the route-set for the account under these special conditions and either remove it completly (less good, require dns lookup?) or make a temp route-set as a copy of the original one and just remove the transport=tcp parameter making this dialog use the same route-set but UDP instead of the default TCP if the estimation of the packet size is <1300. I tested just to remove the: f (!pj_list_empty(&acc->route_set)) pjsip_dlg_set_route_set(dlg, &acc->route_set); all together and it appears to work ok. Registration etc is TCP and the dialog is running UDP. The next step would be making a clone of the acc->route_set and removing the transport=tcp. This seems like a pretty simple solution for my needs. Do you think I miss something vital in taking this approach? Thanks Johan