public async Task <UserAgentsResultV2> UserAgents(UserAgentSearchParamsV2 searchParams) { if (searchParams == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } var searchParamsDto = new UserAgentSearchParamsDto() { Caller = searchParams.Caller, Callee = searchParams.Callee, IncludeCodecsInCall = searchParams.IncludeCodecsInCall, Filters = searchParams.Filters }; UserAgentsResultDto uaResult = await _discoveryService.GetUserAgentsAsync(searchParamsDto); var result = new UserAgentsResultV2 { Profiles = uaResult.Profiles.Select(p => new ProfileDtoV2() { Name = p.Name, Sdp = p.Sdp }).ToList(), UserAgents = uaResult.UserAgents.Select(ua => new UserAgentDtoV2() { SipId = ua.SipId, ConnectedTo = ua.ConnectedTo, Profiles = ua.Profiles, MetaData = ua.MetaData.Select(m => new KeyValuePairDtoV2(m.Key, m.Value)).ToList() }).ToList() }; return(result); }
private void AssertContentAreEqual(UserAgentsResultDto srDiscovery, string fileName) { var s = JsonConvert.SerializeObject(srDiscovery); var expected = File.ReadAllText(Path.Combine(@"..\..\Testdata", fileName)); Assert.AreEqual(expected, s); }
public UserAgentsResultDto UserAgents(UserAgentSearchParamsDto searchParams) { if (searchParams == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } UserAgentsResultDto uaResult = _discoveryService.GetUserAgents(searchParams.Caller, searchParams.Callee, searchParams.Filters, searchParams.IncludeCodecsInCall); return(uaResult); }
/// <summary> /// Intersects registered callees profiles and callerProfiles to return a list with available /// user agents to call for a certain caller. /// </summary> private UserAgentsResultDto MatchProfilesAndUserAgents(IEnumerable <RegisteredUserAgentAndProfilesDiscovery> registeredUserAgents, IList <ProfileDto> callerProfiles) { //TODO: Verify speed var userAgents = new List <UserAgentDto>(); try { if (!callerProfiles.Any()) { log.Error("CallerProfiles is null, can not intersect callerProfiles with callees. Expecting empty result."); } var callerProfileNames = callerProfiles.Select(p => p.Name).ToList(); // INFO: The order of common profiles is be based on callee's (destinations) profile order // INFO: The profiles has been sorted by first User-Agent Profiles Order -> Location Profile Group Order -> Callee Profiles Order foreach (var callee in registeredUserAgents) { // Match profiles from callee with the callers var matchingProfiles = callee.OrderedProfiles.Intersect(callerProfileNames).ToList(); if (matchingProfiles.Any()) { var displayName = DisplayNameHelper.GetDisplayName(callee.DisplayName, callee.UserDisplayName, "", callee.SipUri, "", "", _settingsManager.SipDomain); // TODO: WARNING!! Why is this DisplayNameHelper here.. just get something from the class ... var userAgent = new UserAgentDto { SipId = string.Format("{0} <{1}>", displayName, callee.SipUri), PresentationName = displayName, ConnectedTo = callee.InCallWithName ?? string.Empty, InCall = callee.InCall, MetaData = callee.MetaData?.Select(meta => new KeyValuePair <string, string>(meta.Key, meta.Value)).ToList(), // TODO: needs to be in a new list again? Profiles = matchingProfiles, }; userAgents.Add(userAgent); } } } catch (Exception ex) { log.Error(ex, "Error while matching registered user agents with caller profiles."); return(new UserAgentsResultDto()); } var allMatchingProfileNames = userAgents.SelectMany(ua => ua.Profiles.Select(p => p)).Distinct().ToList(); var result = new UserAgentsResultDto { UserAgents = userAgents.OrderBy(ua => ua.SipId).ToList(), Profiles = callerProfiles.Where(p => allMatchingProfileNames.Contains(p.Name)).ToList() }; return(result); }
public UserAgentsResultDto Post(UserAgentSearchParams searchParams) { if (searchParams == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } UserAgentsResultDto uaResult = _discoveryService.GetUserAgents(searchParams.Caller, searchParams.Callee, searchParams.Filters, searchParams.IncludeCodecsInCall); if (uaResult != null && uaResult.UserAgents != null) { uaResult.UserAgents.ForEach(ua => ua.PresentationName = null); } return(uaResult); }
public async Task <SrDiscovery> UserAgents() { var parameters = (SrDiscoveryParameters)Request.Properties["SRDiscoveryParameters"]; var searchParams = new UserAgentSearchParamsDto { Caller = parameters.Caller, Callee = parameters.Callee, IncludeCodecsInCall = parameters.IncludeCodecsInCall, Filters = parameters.Filters }; log.Trace("Discovery API - requesting 'useragents'", searchParams); UserAgentsResultDto uaResult = await _discoveryService.GetUserAgentsAsync(searchParams, Request); if (uaResult == null) { log.Info("No user agents returned for DiscoveryV1"); return(new SrDiscovery()); } var profiles = uaResult.Profiles?.Select(p => new Profile() { Name = p.Name, Sdp = p.Sdp }).ToList() ?? new List <Profile>(); var userAgents = uaResult.UserAgents?.Select(ua => new UserAgent() { SipId = ua.SipId, ConnectedTo = ua.ConnectedTo, ProfileRec = ua.Profiles.Select(p => new UserAgentProfileRef { Name = p }).ToList(), MetaData = ua.MetaData.Select(m => new UserAgentMetaData() { Key = m.Key, Value = m.Value }).ToList() }).ToList() ?? new List <UserAgent>(); log.Debug("Discovery V1 Returning {0} useragents and {1} profiles", uaResult.UserAgents?.Count ?? 0, uaResult.Profiles?.Count ?? 0); return(new SrDiscovery { UserAgents = userAgents, Profiles = profiles }); }
private UserAgentsResultDto ProfilesAndUserAgents(IEnumerable <RegisteredSipDto> callees, IList <ProfileDto> callerProfiles) { var userAgents = new List <UserAgentDto>(); try { var callerProfileNames = callerProfiles.Select(p => p.Name).ToList(); foreach (var callee in callees) { // INFO: Viktigt att ordningen på gemensamma profiler baseras på callee's profilordning. var matchingProfiles = callee.Profiles.Intersect(callerProfileNames).ToList(); if (matchingProfiles.Any()) { var displayName = DisplayNameHelper.GetDisplayName(callee, _settingsManager.SipDomain); var userAgent = new UserAgentDto { SipId = string.Format("{0} <{1}>", displayName, callee.Sip), PresentationName = displayName, ConnectedTo = callee.InCallWithName ?? string.Empty, InCall = callee.InCall, MetaData = callee.MetaData.Select(meta => new KeyValuePair <string, string>(meta.Key, meta.Value)).ToList(), Profiles = matchingProfiles, }; userAgents.Add(userAgent); } } } catch (Exception ex) { log.Error(ex, "Error while getting user agents."); return(new UserAgentsResultDto()); } var allMatchingProfileNames = userAgents.SelectMany(ua => ua.Profiles.Select(p => p)).Distinct().ToList(); var result = new UserAgentsResultDto { UserAgents = userAgents.OrderBy(ua => ua.SipId).ToList(), Profiles = callerProfiles.Where(p => allMatchingProfileNames.Contains(p.Name)).ToList() }; return(result); }
private UserAgentsResultDto ProfilesAndUserAgents(IEnumerable <CachedRegisteredSip> sipsOnline, IList <ProfileDto> callerProfiles) { var allMatchingProfiles = new List <string>(); // Lista med samtliga matchande profiler var userAgents = new List <UserAgentDto>(); try { var callerProfileNames = callerProfiles.Select(p => p.Name).ToList(); foreach (var sip in sipsOnline) { var matchingProfiles = callerProfileNames.Intersect(sip.Profiles).ToList(); allMatchingProfiles.AddRange(matchingProfiles); if (matchingProfiles.Any()) { var displayName = DisplayNameHelper.GetDisplayName(sip, _settingsManager.SipDomain); var userAgent = new UserAgentDto { SipId = string.Format("{0} <{1}>", displayName, sip.Sip), PresentationName = displayName, ConnectedTo = sip.InCallWithName ?? string.Empty, InCall = sip.InCall, MetaData = sip.MetaData.Select(meta => new KeyValuePairDto(meta.Key, meta.Value)).ToList(), Profiles = matchingProfiles, }; userAgents.Add(userAgent); } } } catch (Exception ex) { Log.Error("Error while getting user agents.", ex); return(new UserAgentsResultDto()); } var result = new UserAgentsResultDto { UserAgents = userAgents.OrderBy(ua => ua.SipId).ToList(), Profiles = callerProfiles.Where(p => allMatchingProfiles.Distinct().Contains(p.Name)).ToList() }; return(result); }
public async Task <UserAgentsResultV2> UserAgents(UserAgentSearchParamsV2 searchParams) { log.Trace("Discovery V2 API - requesting 'useragents'", searchParams); if (searchParams == null) { log.Debug("Requesting useragents from Discovery V2, but search params is null"); throw new HttpResponseException(HttpStatusCode.BadRequest); } var searchParamsDto = new UserAgentSearchParamsDto { Caller = searchParams.Caller, Callee = searchParams.Callee, IncludeCodecsInCall = searchParams.IncludeCodecsInCall, Filters = searchParams.Filters }; UserAgentsResultDto uaResult = await _discoveryService.GetUserAgentsAsync(searchParamsDto, Request); log.Debug("Returning {0} useragents and {1} profiles (V2).", uaResult.UserAgents?.Count ?? 0, uaResult.Profiles?.Count ?? 0); var result = new UserAgentsResultV2 { Profiles = uaResult?.Profiles?.Select(p => new ProfileDtoV2 { Name = p.Name, Sdp = p.Sdp }).ToList() ?? new List <ProfileDtoV2>(), UserAgents = uaResult?.UserAgents?.Select(ua => new UserAgentDtoV2 { SipId = ua.SipId, ConnectedTo = ua.ConnectedTo, Profiles = ua.Profiles, MetaData = ua.MetaData?.Select(m => new KeyValuePairDtoV2(m.Key, m.Value)).ToList() ?? new List <KeyValuePairDtoV2>() }).ToList() ?? new List <UserAgentDtoV2>() }; return(result); }
public void should_get_useragents_vaxjo13_stockholm_studio() { // Ca 250 ms lokalt var filters = new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("1 Region", "Stockholm"), new KeyValuePair <string, string>("2 Kodartyp", "Studio") }; UserAgentsResultDto result = _discoveryService.GetUserAgents("*****@*****.**", null, filters); AssertContentAreEqual(new UserAgentsResultDto() { UserAgents = result.UserAgents, Profiles = result.Profiles }, @"vaxjo13_stockholm_studio.json"); List <string> recList = result.UserAgents.SelectMany(ua => ua.Profiles ?? Enumerable.Empty <string>()).ToList(); var d = recList.Distinct().ToList(); Assert.AreEqual(31, result.UserAgents.Count); Assert.AreEqual(8, result.Profiles.Count); }