Example #1
0
        public UserAgentsResultDto GetUserAgents(string caller, string callee, IList <KeyValuePair <string, string> > filterParams, bool includeCodecsInCall = false)
        {
            if (filterParams == null)
            {
                filterParams = new List <KeyValuePair <string, string> >();
            }

            IList <ProfileNameAndSdp> callerProfiles = !string.IsNullOrEmpty(caller) ? GetProfilesForRegisteredSip(caller) : _cache.GetProfiles(_profileRepository.GetAllProfileNamesAndSdp);

            Log.DebugFormat("Found {0} profiles for caller {1}", callerProfiles.Count, caller);

            IList <CachedRegisteredSip> sipsOnline;

            if (string.IsNullOrWhiteSpace(callee))
            {
                var filterSelections = GetFilteringValues(filterParams);
                sipsOnline = GetFilteredSipsOnline(filterSelections);

                if (sipsOnline == null)
                {
                    return(new UserAgentsResultDto()
                    {
                        Profiles = new List <ProfileDto>(), UserAgents = new List <UserAgentDto>()
                    });
                }

                // Exkludera egna kodaren
                sipsOnline = sipsOnline.Where(sip => sip.Sip != caller).ToList();

                // Eventuellt exkludera kodare i samtal
                sipsOnline = includeCodecsInCall ? sipsOnline : sipsOnline.Where(sip => !sip.InCall).ToList();
            }
            else
            {
                var calleeSip = _registeredSipRepository.GetCachedRegisteredSips(null).FirstOrDefault(s => s.Sip == callee);

                if (calleeSip == null)
                {
                    return(new UserAgentsResultDto()
                    {
                        Profiles = new List <ProfileDto>(), UserAgents = new List <UserAgentDto>()
                    });
                }

                sipsOnline = new List <CachedRegisteredSip> {
                    calleeSip
                };
            }

            var result = ProfilesAndUserAgents(sipsOnline, callerProfiles.Select(p => new ProfileDto()
            {
                Name = p.Name, Sdp = p.Sdp
            }).ToList());

            return(result);
        }
Example #2
0
        public IList <RegisteredSipOverviewDto> Post()
        {
            var sipDomain      = _settingsManager.SipDomain;
            var registeredSips = _registeredSipRepository.GetCachedRegisteredSips();
            var dtos           = registeredSips.Select(sip => RegisteredSipOverviewDtoMapper.MapToDto(sip, sipDomain)).ToList();

            return(dtos);
        }
Example #3
0
        public IList <CodecStatus> GetAll(bool includeCodecsOffline = false)
        {
            List <RegisteredSipDto> allRegisteredSips = _registeredSipRepository.GetCachedRegisteredSips();

            if (includeCodecsOffline)
            {
                var sipIdsOnline      = allRegisteredSips.Select(rs => rs.Sip).ToList();
                var accounts          = _userRepository.GetAllSipUsers();
                var accountsNotOnline = accounts.Where(a => !sipIdsOnline.Contains(a.UserName)).ToList();
                var sipDomain         = _settingsManager.SipDomain;
                var notRegisteredSips = accountsNotOnline.Select(a => new RegisteredSipDto()
                {
                    Id          = Guid.Empty,
                    Sip         = a.UserName,
                    DisplayName = DisplayNameHelper.GetDisplayName("", a.DisplayName, string.Empty, "", a.UserName, "", sipDomain),
                }).ToList();
                allRegisteredSips.AddRange(notRegisteredSips);
            }

            return(allRegisteredSips.Select(CodecStatusMapper.MapToCodecStatus).ToList());
        }
Example #4
0
        public KamailioMessageHandlerResult RegisterCall(KamailioDialogMessage 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))
            {
                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();

            // Om user-delen är numerisk antar vi att det är ett telefonnummer (trots att sip-adresser egentligen kan vara numeriska)
            var fromSip = sipMessage.FromSipUri.User.IsNumeric() ? sipMessage.FromSipUri.User : sipMessage.FromSipUri.UserAtHost;
            var from    = _sipRepository.GetCachedRegisteredSips().SingleOrDefault(rs => rs.Sip == fromSip);

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

            var toSip = sipMessage.ToSipUri.User.IsNumeric() ? sipMessage.ToSipUri.User : sipMessage.ToSipUri.UserAtHost;
            var to    = _sipRepository.GetCachedRegisteredSips().SingleOrDefault(rs => rs.Sip == toSip);

            call.ToSip         = toSip;
            call.ToDisplayName = sipMessage.ToDisplayName;
            call.ToId          = to != null ? 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(); // Sätts till true om någon parts adress är numeriskt.
            _callRepository.UpdateCall(call);
            return(SipMessageResult(KamailioMessageChangeStatus.CallStarted, call.Id));
        }
Example #5
0
 public IList <CodecInfo> Get()
 {
     using (new TimeMeasurer("GetCachedRegisteredSips CodecsOnlineController"))
     {
         var registeredSipsInfo = _registeredSipRepository.GetCachedRegisteredSips().Select(rs =>
                                                                                            new CodecInfo()
         {
             SipAddress  = rs.Sip,
             DisplayName = rs.DisplayName,
             InCall      = rs.InCall
         }).ToList();
         return(registeredSipsInfo);
     }
 }
Example #6
0
        private CodecInformation GetCodecInformationBySipAddress(string sipAddress)
        {
            var sip = _registeredSipRepository.GetCachedRegisteredSips().SingleOrDefault(s => s.Sip == sipAddress);

            if (sip == null || string.IsNullOrWhiteSpace(sip.Api))
            {
                return(null);
            }

            return(new CodecInformation()
            {
                Api = sip.Api, Ip = sip.IpAddress
            });
        }
Example #7
0
        public ActionResult EditRegisteredSipComment(Guid id)
        {
            var sip = _registeredSipRepository.GetCachedRegisteredSips().FirstOrDefault(rs => rs.Id == id);

            if (sip == null)
            {
                return(null);
            }

            return(PartialView("_SipCommentForm", new RegisteredSipComment()
            {
                Comment = sip.Comment, RegisteredSipId = sip.Id, RegisteredSipUserName = sip.UserName
            }));
        }
Example #8
0
        private void UpdateCodecStatusByGuid(Guid id)
        {
            // Ignore external codecs
            if (id == Guid.Empty)
            {
                return;
            }

            var rs = _registeredSipRepository.GetCachedRegisteredSips().FirstOrDefault(s => s.Id == id);

            if (rs != null)
            {
                var codecStatus = CodecStatusMapper.MapToCodecStatus(rs);
                CodecStatusHub.UpdateCodecStatus(codecStatus);
            }
            else
            {
                log.Error("No codec online with id {0}. Can't update status hub.", id);
            }
        }
Example #9
0
        public CodecStatus GetCodecStatus(Guid studioId)
        {
            var studio = _studioRepository.GetById(studioId);

            if (studio == null || studio.CodecSipAddress == null)
            {
                return(null);
            }

            var allRegisteredSips = _registeredSipRepository.GetCachedRegisteredSips();
            var regSip            = allRegisteredSips.FirstOrDefault(s => s.Sip == studio.CodecSipAddress);

            if (regSip == null)
            {
                return(new CodecStatus()
                {
                    SipAddress = studio.CodecSipAddress, State = CodecState.NotRegistered
                });
            }

            return(CodecStatusMapper.MapToCodecStatus(regSip));
        }
 public List <RegisteredSipDto> GetCachedRegisteredSips()
 {
     return(_lazyCache.GetOrAddRegisteredSips(() => _internalRepository.GetCachedRegisteredSips()));
 }
Example #11
0
 public void should_load_list_from_internal_repository_on_first_access()
 {
     _sut.GetCachedRegisteredSips();
     A.CallTo(() => _internalRegisteredSipRepository.GetCachedRegisteredSips()).MustHaveHappened(Repeated.Exactly.Once);
 }