Example #1
0
        private void OnCallIncoming(int call, int call2replace, CORESIP_CallInfo info, CORESIP_CallInInfo inInfo)
        {
            _Logger.Debug("Nueva llamada entrante [SrdId={0}] [SrcIp={1}] [SrcSubId={2}] [SrcRs={3}] [DstId={4}] [DstIp={5}] [DstSubId={6}]",
                          inInfo.SrcId, inInfo.SrcIp, inInfo.SrcSubId, inInfo.SrcRs, inInfo.DstId, inInfo.DstIp, inInfo.DstSubId);

            Top.WorkingThread.Enqueue("OnCallIncoming", delegate()
            {
                CORESIP_Answer answer = new CORESIP_Answer(SipAgent.SIP_NOT_FOUND);
                string dstId          = string.IsNullOrEmpty(inInfo.DstSubId) ? inInfo.DstId : inInfo.DstSubId;

                foreach (StrNumeroAbonado alias in Top.Cfg.HostAddresses)
                {
                    if (string.Compare(dstId, alias.NumeroAbonado, true) == 0)
                    {
                        answer.Value = SipAgent.SIP_DECLINE;

                        switch (info.Type)
                        {
                        case CORESIP_CallType.CORESIP_CALL_DIA:
                            General.SafeLaunchEvent(IncomingTlfCall, this, call, call2replace, info, inInfo, answer);
                            break;

                        case CORESIP_CallType.CORESIP_CALL_IA:
                            General.SafeLaunchEvent(IncomingLcCall, this, call, info, inInfo, answer);
                            break;

                        case CORESIP_CallType.CORESIP_CALL_GG_MONITORING:           //ULISES solo soporta G/G monitoring
                            General.SafeLaunchEvent(IncomingMonitoringCall, this, call, info, inInfo, answer);
                            break;

                        case CORESIP_CallType.CORESIP_CALL_MONITORING:
                        case CORESIP_CallType.CORESIP_CALL_AG_MONITORING:
                            answer.Value = SipAgent.SIP_BAD_REQUEST;                //ULISES solo soporta G/G monitoring
                            break;
                        }

                        break;
                    }
                }
                try
                {
                    if (answer.Value == SipAgent.SIP_MOVED_TEMPORARILY)
                    {
                        SipAgent.MovedTemporallyAnswerCall(call, answer.redirectTo, "unconditional");
                    }
                    else if (answer.Value != 0 && answer.Value != SipAgent.SIP_DECLINE)
                    {
                        SipAgent.AnswerCall(call, answer.Value);
                    }
                }
                catch (Exception exc)
                {
                    _Logger.Error("SipAgent.AnswerCall", exc.Message);
                }
            });
        }
Example #2
0
        private void OnTransferRequest(int call, CORESIP_CallInfo info, CORESIP_CallTransferInfo transferInfo)
        {
            Debug.Assert(info.Type == CORESIP_CallType.CORESIP_CALL_DIA);
            _Logger.Debug("Nueva peticion de transferencia [CallId={0}] [DstId={1}] [DstIp={2}] [DstSubId={3}] [DstRs={4}]",
                          call, transferInfo.DstId, transferInfo.DstIp, transferInfo.DstSubId, transferInfo.DstRs);

            Top.WorkingThread.Enqueue("OnTransferRequest", delegate()
            {
                CORESIP_Answer answer = new CORESIP_Answer(SipAgent.SIP_DECLINE);
                General.SafeLaunchEvent(TlfTransferRequest, this, call, info, transferInfo, answer);

                if (answer.Value != 0)
                {
                    SipAgent.TransferAnswer(transferInfo.TsxKey, transferInfo.TxData, transferInfo.EvSub, answer.Value);
                }
            });
        }
Example #3
0
        private void OnIncomingMonitoringCall(object sender, int call, CORESIP_CallInfo info, CORESIP_CallInInfo inInfo, CORESIP_Answer answer)
        {
            Debug.Assert(!_Froms.ContainsKey(call));
            TlfIaPosition from = new TlfIaPosition(1000);

            int code = from.HandleIncomingCall(call, -1, info, inInfo);

            Debug.Assert(code == SipAgent.SIP_RINGING);

            if (!from.IsTop)
            {
                answer.Value = SipAgent.SIP_NOT_ACCEPTABLE_HERE;
                return;
            }

            answer.Value             = 0;
            from.TlfPosStateChanged += OnFromMonitoringCallStateChanged;
            _Froms[call]             = from;

            General.SafeLaunchEvent(RemoteListenChanged, this, new ListenPickUpMsg(FunctionState.Executing, from.Literal, call));
        }
Example #4
0
 private void OnIncomingCall(object sender, int call, CORESIP_CallInfo info, CORESIP_CallInInfo inInfo, CORESIP_Answer answer)
 {
     foreach (LcPosition lc in _LcPositions)
     {
         answer.Value = lc.HandleIncomingCall(call, info, inInfo);
         if (answer.Value != SipAgent.SIP_DECLINE)
         {
             break;
         }
     }
 }