bool setCallEnd(RbrResult pRbrResult) { try { cdr.End(); var _cause = IVRDisconnectCause.LC_NORMAL; var _source = IVRDisconnectSource.IVR; if (session.Channel.DisconnectCause != (int)IVRDisconnectCause.LC_UNKNOWN) { _cause = (IVRDisconnectCause)session.Channel.DisconnectCause; _source = (IVRDisconnectSource)session.Channel.DisconnectSource; } cdr.SetCause(_cause, _source, pRbrResult); sessionHandler.CallComplete(session.Id, cdr.CallId, cdr.ToString()); sessionHandler.OnCompleted(callState, safeCarrierAcctId(), LegIn.CustomerAcctId); //TODO: just do DisconnectAll here? if (session.State == SessionState.Leg1) { session.Channel.DisconnectLeg1(); return(false); } if (lastAttempt()) { session.Channel.DisconnectAll(); return(false); } session.Channel.DisconnectLeg2(); return(true); } finally { if (lastAttempt() && account.Obtained) { sessionHandler.SetRetailAcctNotInUse(session); } } }