<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div dir="ltr"><span style="font-size: 11pt; font-family: Calibri, sans-serif; -webkit-text-size-adjust: auto;">Hi All, </span><br><div dir="ltr"><div dir="ltr"><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">I’m trying to work out how to Fork/Branch calls to various contacts.<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Firstly, my setup is that I have, let’s say, OpenSIPS-Gateway(os-gw) and OpenSIPS-Websocket clients (os-ws). Both of these are a load balanced array of servers. So when a client registers on os-ws he could register on any of the possible os-ws servers. With os-gw, again there can be N number of servers, but this plays little part in my issue, except that all calls are always sent from os-ws to os-gw for onward sending, even if the call is to be turned around on os-gw back to a registered user on os-ws (internal calling).<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Let’s take this flow:<br>[os-ws(x)] <----- INVITE ----> [os-gw(y)] <---- INVITE ----> [os-ws(z)]<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">It will be the responsibility of the os-gw to find the correct os-ws (by looking in the location table) and sending the call on to the correct os-ws server, so that in can reach the actual client endpoint. <o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">I’m busy with my own sort of “lookup()” replacement but with a few more encasements. I have managed to get the contacts list form the database, and can call something like:<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">seturi("<span dir="ltr">sip:bob@10.0.0.3</span>");<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">append_branch("<span dir="ltr">sip:bob1@10.0.0.2</span>");<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">append_branch("<span dir="ltr">sip:bob2@10.0.0.2</span>");<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">append_branch("<span dir="ltr">sip:bob3@10.0.0.1</span>");<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">t_relay();<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">This works, except I want to extend this even further. I want these 4 branches to keep trying on a loop until the transaction timeout occurs or one of the calls is answered. Except I find that the “failure_route” has two main problems, firstly if I try a “t_relay()” in the failure_route, the original call gets relayed again and I can’t seem to refer back to the branch.<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">This causes the number of branches to quickly run out (I think max is 16), as it seem to nest the branch. Also because the t_relay() appears to act on the main branch, all the urls are reset, so I don’t really know where I was originally sending this request to.<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">failure_route[my_on_failure]{<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">                seturi($branch(uri));   # <-- This is null<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">                t_relay(); # causes new branches that don’t seem to kill the old ones.<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">}<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">So basically, I’m trying to parallel fork the original call (probably no more than about 5), and have these branches, retry in a loop (series) until one of the contacts answers or the timeout occurs, at this time the cancel will be sent to all the “other” branches (probably t_cancel_branch("o") would work for that, but I have not been able to test this).<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">The ultimate benefit here: it would be possible that, even if a call has been sent to one of the endpoints and is ringing, another endpoint can come online and would soon begin to ring. You would have a choice of devices to answer the call with.<o:p></o:p></span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span></p><p class="MsoNormal" style="font-size: 12pt; -webkit-text-size-adjust: auto; margin: 0cm; font-family: Calibri, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Thanks, Conrad</span></p><div dir="ltr"></div></div></div><br><br><div dir="ltr">Sent from my iPhone</div></div></body></html>