@@ -836,34 +836,38 @@ impl SipSession {
836836 conf_id : Some ( format ! ( "bridge-{}" , self . id. 0 ) ) ,
837837 } ;
838838
839- info ! ( %leg_id, endpoint = %endpoint, "Bridge established" ) ;
840-
841- // ── 9. Wait for bridge to disconnect ─────────────────────────
842- let bridge_done = async {
843- let _ = forward_handle. await ;
844- let _ = reverse_handle. await ;
845- } ;
846- tokio:: pin!( bridge_done) ;
847-
848- tokio:: select! {
849- _ = self . cancel_token. cancelled( ) => {
850- info!( %leg_id, "Session cancelled while bridge active" ) ;
851- }
852- _ = & mut bridge_done => {
853- info!( %leg_id, "Bridge disconnected" ) ;
854- }
855- }
856-
857- self . conference_bridge . stop_bridge ( ) ;
858-
859- // ── 10. Return to IVR if configured ──────────────────────────
839+ // ── 9. Spawn monitor for return_ivr if configured ────────────
860840 if let Some ( ref ivr_name) = return_ivr {
861- if !self . cancel_token . is_cancelled ( ) {
862- info ! ( %leg_id, ivr = %ivr_name, "Bridge disconnected; returning to IVR" ) ;
863- self . start_ivr_app ( ivr_name, HashMap :: new ( ) ) . await ?;
841+ if let Some ( ref cmd_tx) = self . cmd_tx {
842+ let cancel = self . cancel_token . child_token ( ) ;
843+ let ivr_target = format ! ( "ivr:{}" , ivr_name) ;
844+ let tx = cmd_tx. clone ( ) ;
845+ let mon_leg_id = leg_id. clone ( ) ;
846+ let mon = crate :: utils:: spawn ( async move {
847+ tokio:: select! {
848+ biased;
849+ _ = cancel. cancelled( ) => { }
850+ _ = async {
851+ let _ = forward_handle. await ;
852+ let _ = reverse_handle. await ;
853+ } => {
854+ if !cancel. is_cancelled( ) {
855+ info!( "Bridge disconnected; returning to IVR: {}" , ivr_target) ;
856+ let cmd = CallCommand :: Transfer {
857+ leg_id: mon_leg_id,
858+ target: ivr_target,
859+ attended: false ,
860+ } ;
861+ let _ = tx. send( cmd) . await ;
862+ }
863+ }
864+ }
865+ } ) ;
866+ self . legs . tasks . entry ( leg_id. clone ( ) ) . or_default ( ) . push ( mon) ;
864867 }
865868 }
866869
870+ info ! ( %leg_id, endpoint = %endpoint, "Bridge established" ) ;
867871 Ok ( ( ) )
868872 }
869873
0 commit comments