Peter Dunkley writes:
I think this should be working now. Please let me know if there are problems.
peter,
i made some tests with client that supports both ob and gruu in this kind of setup:
caller ua -- proxy/registrar 1 -- proxy/registrar 2 -- callee ua
when invite comes to proxy/registrar 1 it has "Supported: gruu, outbound, path" and ;gr param in contact uri. proxy/registrar 1 then calls record_route() on the invite and forwards it to proxy/registrar 2.
ngrep shows that record_route() added these two r-r headers:
Record-Route: sip:8ESgMbGAnoV8swXAYmYKJ2DAYmgC6dc=@192.98.102.10:5070;transport=tcp;r2=on;lr. Record-Route: sip:8ESgMbGAnoV8swXAYmYKJ2DAYmgC6dc=@192.98.102.10:10080;transport=ws;r2=on;lr.
because caller ua supports gruu, in-dialog requests to it should be routed based on gruu lookup, not based on flow token in route header. so i don't see the point in record_route() including the flow tokens to r-r uris.
now when callee ua sends bye, it gets handled in proxy/registrar 1 like this:
Apr 25 08:49:01 siika /usr/sbin/sip-proxy[12538]: INFO: calling loose_route() on route <sip:8ESgMbGAnoV8swXAYmYKJ2DAYmgC6dc=@192.98.102.10:5070;transport=tcp;r2=on;lr> Apr 25 08:49:01 siika /usr/sbin/sip-proxy[12538]: INFO: ru/du = sip:jh@test.fi;gr=urn:uuid:e88f32f1-b837-43be-8955-bc606d626252;ob/sip:192.98.104.2:59863;transport=ws Apr 25 08:49:01 siika /usr/sbin/sip-proxy[12538]: INFO: Routing in-dialog BYE sip:jh@test.fi;gr=urn:uuid:e88f32f1-b837-43be-8955-bc606d626252;ob from sip:test@test.fi to sip:192.98.104.2:59863;transport=ws
that is, loose_route() set $du and since $du is set, gruu lookup does not take place.
i'm not sure what is the best way to fix this. one way could be to add some param in record_route() that tells it not to use flow tokens.
-- juha