Forking sip MESSAGE to multiple endpoints

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Forking sip MESSAGE to multiple endpoints

Podrigal, Aron
Hi.

I want to fork a MESSAGE request to multiple endpoints and handle the delivery status for each on reply.

currently I append_branch() for each additional destination. But the problem is, that if any branch received a 200 reply, any other branch which did not relay the request yet (ie socket connection wasn't established) or TM timer is triggered, then those branches are canceled without triggering onreply route or failure route.

How could I implement it, so that I can handle the timeout or failure for each endpoint? 

Maybe t_replicate? Or is there an event raised for a canceled branch which I can subscribe to? 


Thanks

_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|

Re: Forking sip MESSAGE to multiple endpoints

Bogdan-Andrei Iancu-2
Hi Aron,

The standard SIP forking (as per RFC3261) says only one destination should get the reply. Nevertheless, there is the
RFC3841 defining "Content-Disposition: no-cancel" to prevent the proxy to send Cancel upon first 200 OK.
We added support for it in OpenSIPS, starting 2.4 - see flag 0x10 - http://www.opensips.org/html/docs/modules/2.4.x/tm.html#func_t_relay
but it works only for INVITEs :D

Regards,
Bogdan-Andrei Iancu

OpenSIPS Founder and Developer
  http://www.opensips-solutions.com
OpenSIPS Bootcamp 2018
  http://opensips.org/training/OpenSIPS_Bootcamp_2018/
On 11/14/2018 07:38 PM, Podrigal, Aron wrote:
Hi.

I want to fork a MESSAGE request to multiple endpoints and handle the delivery status for each on reply.

currently I append_branch() for each additional destination. But the problem is, that if any branch received a 200 reply, any other branch which did not relay the request yet (ie socket connection wasn't established) or TM timer is triggered, then those branches are canceled without triggering onreply route or failure route.

How could I implement it, so that I can handle the timeout or failure for each endpoint? 

Maybe t_replicate? Or is there an event raised for a canceled branch which I can subscribe to? 


Thanks


_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|

Re: Forking sip MESSAGE to multiple endpoints

Podrigal, Aron
Thank you Bogdan.
The question is if we can add some flag, to always trigger onreply_route for each branch, so that one can do some cleanup / update database based on the reply for each branch.

On Fri, Nov 16, 2018, 12:25 PM Bogdan-Andrei Iancu <[hidden email] wrote:
Hi Aron,

The standard SIP forking (as per RFC3261) says only one destination should get the reply. Nevertheless, there is the
RFC3841 defining "Content-Disposition: no-cancel" to prevent the proxy to send Cancel upon first 200 OK.
We added support for it in OpenSIPS, starting 2.4 - see flag 0x10 - http://www.opensips.org/html/docs/modules/2.4.x/tm.html#func_t_relay
but it works only for INVITEs :D

Regards,
Bogdan-Andrei Iancu

OpenSIPS Founder and Developer
  http://www.opensips-solutions.com
OpenSIPS Bootcamp 2018
  http://opensips.org/training/OpenSIPS_Bootcamp_2018/
On 11/14/2018 07:38 PM, Podrigal, Aron wrote:
Hi.

I want to fork a MESSAGE request to multiple endpoints and handle the delivery status for each on reply.

currently I append_branch() for each additional destination. But the problem is, that if any branch received a 200 reply, any other branch which did not relay the request yet (ie socket connection wasn't established) or TM timer is triggered, then those branches are canceled without triggering onreply route or failure route.

How could I implement it, so that I can handle the timeout or failure for each endpoint? 

Maybe t_replicate? Or is there an event raised for a canceled branch which I can subscribe to? 


Thanks


_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|

Re: Forking sip MESSAGE to multiple endpoints

Bogdan-Andrei Iancu-2
Hi Aron,

Right now, the onreply_route is triggered all the time for all replies (1xx, 2xx, or higher) received on any of the branches.

Regards,
Bogdan-Andrei Iancu

OpenSIPS Founder and Developer
  http://www.opensips-solutions.com
OpenSIPS Bootcamp 2018
  http://opensips.org/training/OpenSIPS_Bootcamp_2018/
On 11/16/2018 07:48 PM, Podrigal, Aron wrote:
Thank you Bogdan.
The question is if we can add some flag, to always trigger onreply_route for each branch, so that one can do some cleanup / update database based on the reply for each branch.

On Fri, Nov 16, 2018, 12:25 PM Bogdan-Andrei Iancu <[hidden email] wrote:
Hi Aron,

The standard SIP forking (as per RFC3261) says only one destination should get the reply. Nevertheless, there is the
RFC3841 defining "Content-Disposition: no-cancel" to prevent the proxy to send Cancel upon first 200 OK.
We added support for it in OpenSIPS, starting 2.4 - see flag 0x10 - http://www.opensips.org/html/docs/modules/2.4.x/tm.html#func_t_relay
but it works only for INVITEs :D

Regards,
Bogdan-Andrei Iancu

OpenSIPS Founder and Developer
  http://www.opensips-solutions.com
OpenSIPS Bootcamp 2018
  http://opensips.org/training/OpenSIPS_Bootcamp_2018/
On 11/14/2018 07:38 PM, Podrigal, Aron wrote:
Hi.

I want to fork a MESSAGE request to multiple endpoints and handle the delivery status for each on reply.

currently I append_branch() for each additional destination. But the problem is, that if any branch received a 200 reply, any other branch which did not relay the request yet (ie socket connection wasn't established) or TM timer is triggered, then those branches are canceled without triggering onreply route or failure route.

How could I implement it, so that I can handle the timeout or failure for each endpoint? 

Maybe t_replicate? Or is there an event raised for a canceled branch which I can subscribe to? 


Thanks


_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users



_______________________________________________
Users mailing list
[hidden email]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users