Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        private void AssertContentAreEqual(UserAgentsResultDto srDiscovery, string fileName)
        {
            var s        = JsonConvert.SerializeObject(srDiscovery);
            var expected = File.ReadAllText(Path.Combine(@"..\..\Testdata", fileName));

            Assert.AreEqual(expected, s);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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
            });
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }