Пример #1
0
        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);
                }
            }
        }