public void should_load_registeredSips_if_list_is_non_existing()
        {
            A.CallTo(() => _internalRegisteredSipRepository.GetRegisteredUserAgents()).Returns(new List <RegisteredUserAgent>
            {
                new RegisteredUserAgent("*****@*****.**", Guid.NewGuid(), null, null, null, null, null, null, null, null, null, null),
                new RegisteredUserAgent("*****@*****.**", Guid.NewGuid(), null, null, null, null, null, null, null, null, null, null)
            });

            var regSipList = _sut.GetRegisteredUserAgents().ToList();

            Assert.IsNotNull(regSipList);
            Assert.AreEqual(2, regSipList.Count);
            Assert.AreEqual("*****@*****.**", regSipList.First().SipUri);
        }
        public IEnumerable <CodecStatusViewModel> GetAll()
        {
            var registeredUserAgents = _registeredSipRepository.GetRegisteredUserAgents();
            var sipDomain            = _settingsManager.SipDomain;
            var ongoingCalls         = _callRepository.GetOngoingCalls(true);

            var userAgentsOnline = registeredUserAgents.Select(regSip =>
            {
                string displayName = DisplayNameHelper.GetDisplayName(regSip.DisplayName, regSip.UserDisplayName,
                                                                      string.Empty, regSip.Username, regSip.SipUri, "", sipDomain);

                var result = new CodecStatusViewModel
                {
                    SipAddress       = regSip.SipUri,
                    Id               = regSip.Id,
                    PresentationName = displayName,
                    DisplayName      = displayName
                };

                var call      = ongoingCalls.FirstOrDefault(c => c.FromSip == regSip.SipUri || c.ToSip == regSip.SipUri);
                bool inCall   = call != null;
                result.InCall = inCall;

                if (inCall)
                {
                    var isFromCaller                   = call.FromSip == regSip.SipUri;
                    result.IsCallingPart               = isFromCaller;
                    result.ConnectedToSipAddress       = isFromCaller ? call.ToSip : call.FromSip;
                    result.ConnectedToPresentationName = isFromCaller
                        ? DisplayNameHelper.GetDisplayName(call.ToDisplayName, null, null, "", call.ToSip, "", sipDomain)
                        : DisplayNameHelper.GetDisplayName(call.FromDisplayName, null, null, "", call.FromSip, "", sipDomain);
                    result.ConnectedToLocation = isFromCaller ? call.ToLocationName : call.FromLocationName;
                    result.CallStartedAt       = call.Started;
                }
                // TODO: In Call with DisplayName is lacking the actual Display name (on user) entered in CCM. Not sure the importance.

                result.State = regSip.Id == Guid.Empty
                    ? CodecState.NotRegistered
                    : (inCall ? CodecState.InCall : CodecState.Available);

                return(result);
            }).ToList();

            return(userAgentsOnline);
        }
Beispiel #3
0
        public SipEventHandlerResult RegisterCall(SipDialogMessage sipMessage)
        {
            log.Debug("Register call from {0} to {1}, call id \"{2}\", hash id:\"{3}\", hash entry:\"{4}\"",
                      sipMessage.FromSipUri.UserAtHost, sipMessage.ToSipUri.UserAtHost, sipMessage.CallId, sipMessage.HashId, sipMessage.HashEntry);

            if (_callRepository.CallExists(sipMessage.CallId, sipMessage.HashId, sipMessage.HashEntry))
            {
                // TODO: Find out what HashId and HashEntry is and if they are both needed
                log.Debug("Call with id {0}, hash id:{1}, hash entry:{2} already exists", sipMessage.CallId, sipMessage.HashId, sipMessage.HashEntry);
                return(NothingChangedResult);
            }

            var call = new Call();

            // If the user-part is numeric, we make the assumption
            // that it is a phone number (even though sip-address
            // can be of the numeric kind)
            var fromSip = sipMessage.FromSipUri.User.IsNumeric() ? sipMessage.FromSipUri.User : sipMessage.FromSipUri.UserAtHost;
            var from    = _sipRepository.GetRegisteredUserAgents().SingleOrDefault(x => x.SipUri == fromSip);

            call.FromSip         = fromSip;
            call.FromDisplayName = sipMessage.FromDisplayName;
            call.FromId          = from?.Id ?? Guid.Empty;

            var toSip = sipMessage.ToSipUri.User.IsNumeric() ? sipMessage.ToSipUri.User : sipMessage.ToSipUri.UserAtHost;
            var to    = _sipRepository.GetRegisteredUserAgents().SingleOrDefault(x => x.SipUri == toSip);

            call.ToSip         = toSip;
            call.ToDisplayName = sipMessage.ToDisplayName;
            call.ToId          = to?.Id ?? Guid.Empty;

            call.Started     = DateTime.UtcNow;
            call.CallId      = sipMessage.CallId;
            call.DlgHashId   = sipMessage.HashId;
            call.DlgHashEnt  = sipMessage.HashEntry;
            call.Updated     = DateTime.UtcNow;
            call.ToTag       = sipMessage.ToTag;
            call.FromTag     = sipMessage.FromTag;
            call.IsPhoneCall = sipMessage.FromSipUri.User.IsNumeric() || sipMessage.ToSipUri.User.IsNumeric();

            _callRepository.UpdateCall(call);
            return(SipMessageResult(SipEventChangeStatus.CallStarted, call.Id));
        }
        public IEnumerable <RegisteredUserAgentViewModel> GetAll()
        {
            var registeredUserAgents = _registeredSipRepository.GetRegisteredUserAgents();
            var sipDomain            = _settingsManager.SipDomain;

            var calls = _callRepository.GetOngoingCalls(true);

            var userAgentsOnline = registeredUserAgents.Select(regSip =>
            {
                var result = new RegisteredUserAgentViewModel
                {
                    Sip = regSip.SipUri,
                    Id  = regSip.Id,

                    DisplayName = DisplayNameHelper.GetDisplayName(regSip.DisplayName, regSip.UserDisplayName,
                                                                   string.Empty, regSip.Username, regSip.SipUri, "", sipDomain),

                    Location          = regSip.Location,
                    LocationShortName = regSip.LocationShortName,
                    Image             = regSip.Image,
                    CodecTypeName     = regSip.CodecTypeName,
                    CodecTypeColor    = regSip.CodecTypeColor,
                    UserName          = regSip.Username,
                    UserComment       = regSip.UserComment,
                    RegionName        = regSip.RegionName
                };

                var call      = calls.FirstOrDefault(c => c.FromSip == regSip.SipUri || c.ToSip == regSip.SipUri);
                bool inCall   = call != null;
                result.InCall = inCall;

                if (inCall)
                {
                    var isFromCaller      = call.FromSip == regSip.SipUri;
                    result.InCallWithId   = isFromCaller ? call.ToId : call.FromId;
                    result.InCallWithSip  = isFromCaller ? call.ToSip : call.FromSip;
                    result.InCallWithName = isFromCaller ? call.ToDisplayName : call.FromDisplayName;
                }

                return(result);
            }).ToList();

            return(userAgentsOnline);
        }
Beispiel #5
0
 public IEnumerable <RegisteredUserAgent> GetRegisteredUserAgents()
 {
     return(_lazyCache.GetOrAddRegisteredUserAgents(() => _internalRepository.GetRegisteredUserAgents()));
 }