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); }
public IList <RegisteredSipOverviewDto> Post() { var sipDomain = _settingsManager.SipDomain; var registeredSips = _registeredSipRepository.GetCachedRegisteredSips(); var dtos = registeredSips.Select(sip => RegisteredSipOverviewDtoMapper.MapToDto(sip, sipDomain)).ToList(); return(dtos); }
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()); }
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)); }
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); } }
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 }); }
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 })); }
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); } }
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())); }
public void should_load_list_from_internal_repository_on_first_access() { _sut.GetCachedRegisteredSips(); A.CallTo(() => _internalRegisteredSipRepository.GetCachedRegisteredSips()).MustHaveHappened(Repeated.Exactly.Once); }