On Aug 16, 2011, at 3:14 PM, Jeff Pyle wrote:
> Hi Saúl,
>
> Correct, no SDP mangling functions in this proxy. But in other proxies where
> I use engage_media_relay() I do have this:
>
> # Mangle the origin if the B2B is in use
> if (is_dlg_flag_set("24") && search("Content-Type:
> application/sdp")) {
> subst_body('/^o=(.*) IN IP4 .*/o=\1 IN IP4
> 127.0.0.1/');
> }
>
> This overwrites the origin line of the SDP with 127.0.0.1 in the event I'm
> using the B2B topology hiding scenario upstream (dialog flag 24). It seems
> to work pretty well, and to the best of my knowledge I've never had a
> conflict with Mediaproxy.
>
> Back to this proxy, to the issue at hand. Here's what we've got: The LCR
> engine runs and loads a carrier list. A request_route section loads the
> prefs for the carrier and verifies it's viability. Once we find a viable
> one, we finish up with this portion of the script:
>
> if ([ $avp(s:car_flags) & 128 ] && !isflagset(27)) {
> #_#xlog("L_INFO", "Using media proxy on call to $rd - $ci\n");
> set_dlg_flag("26");
> use_media_proxy();
> }
>
> if (![ $avp(s:car_flags) & 128 ] && is_dlg_flag_set("26")) {
> #_#xlog("L_INFO", "Ending media session on call to $rd -
> $ci\n");
> reset_dlg_flag("26");
> end_media_session();
> }
>
> if !(t_relay("0x05")) {
> sl_reply_error();
> }
>
> The 128-bit of the AVP is the carrier flag indicating a media relay
> requirement. Script flag 27 is set further up in the script by a check for a
> custom header indicating a previous proxy in the signal flow has already
> invoked a media relay, so we don't need to here. I use dialog flag 26 to
> indicate whether the media relay has been called or not, checking for its
> presence in stanzas like this in the onreply_route:
>
> if (is_dlg_flag_set("26") && has_body("application/sdp")) {
> #_#xlog("L_INFO", "Using media proxy in onreply_route -
> $ci\n");
> use_media_proxy();
> }
>
> Prior to the script above the onreply_route and failure_route are armed. The
> failure route will send the transaction back up to the request_route that
> loads the carrier info if certain response codes are received, like a 503,
> ultimately reaching this script again on the way out the door towards the
> next carrier. This is the only place the media functions appear in the
> request_route. There are no media functions in the failure_routes.
> onreply_route and loose_route have items such as the one above.
>
> If the first attempted carrier destination has the media relay 128 bit set,
> the call fails and is sent back around for the next carrier and this next
> carrier also has it set, the top stanza above will run again (intentionally)
> to refresh the media session. If I do not re-run use_media_relay() on
> subsequent attempts requiring the relay, I get one-way audio. Not ending the
> session is not enough. In my testing it seems I have to re-run the function
> each time I run through the script to send to the next carrier, assuming this
> next carrier needs media relay. If the next carrier does not, the second
> stanza hits and we close down the media session we've started during the
> first iteration.
>
How do you jump from the failure route back to the request route? route(X) or
are you t_relay-ing to yourself? I don't remember right now exactly to which
message changes would be applied if you do stuff on the failure route.
> Everything above works okay in testing. It's only in production do I start
> to see a small percentage of 400s and 488s coming back from the term carriers
> because of the mangled SDP lines. I can take the call flow of one of the
> failed calls, duplicate it, and it will work fine. That leads me to believe
> there's some sort of timing issue at work here causing the unintended SDP
> manglage even though I'm running only one of these functions at a time.
>
> Does anything jump out at you?
>
Since the routing script will be executed top to bottom, I don't see how timing
could be an issue here :-S Sorry I can't be of much help here, if something
comes to ming I'll come back to you.
Regards,
--
Saúl Ibarra Corretgé
AG Projects
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users