public void getRegisteredSipsOnline_should_be_updated_by_codec_registration()
        {
            var repo       = GetCachedRegisteredSipRepository();
            var sipsOnline = repo.GetCachedRegisteredSips();
            var sipOnline  = sipsOnline.First();
            var updated    = sipOnline.Updated;

            var repo2 = GetSimpleRegisteredSipRepository();
            var sip   = repo2.GetRegisteredSipById(sipOnline.Id);

            Thread.Sleep(1200);

            var newSip = new RegisteredSip
            {
                IP              = sip.IP,
                Port            = sip.Port,
                ServerTimeStamp = sip.ServerTimeStamp,
                SIP             = sip.SIP,
                UserAgentHead   = sip.UserAgentHead,
                Username        = sip.Username,
                DisplayName     = sip.DisplayName,
                Expires         = sip.Expires
            };

            var changeStatus = repo.UpdateRegisteredSip(newSip);

            Assert.AreEqual(KamailioMessageChangeStatus.NothingChanged, changeStatus);

            sipOnline = repo.GetCachedRegisteredSips().First();
            var updated2 = sipOnline.Updated;

            Assert.AreNotEqual(updated, updated2);
        }
Example #2
0
        public void should_not_reload_list_from_internal_repository_when_codec_reregistered()
        {
            var registeredSip = new RegisteredSip()
            {
                SIP = "*****@*****.**"
            };

            var internalList = new List <RegisteredSipDto>
            {
                new RegisteredSipDto {
                    Id = Guid.NewGuid(), Sip = "*****@*****.**"
                }
            };

            A.CallTo(() => _internalRegisteredSipRepository.GetCachedRegisteredSips()).Returns(internalList);

            A.CallTo(() => _internalRegisteredSipRepository.UpdateRegisteredSip(registeredSip)).Returns(
                new KamailioMessageHandlerResult()
            {
                ChangedObjectId = internalList[0].Id,
                ChangeStatus    = KamailioMessageChangeStatus.NothingChanged
            });

            // Act
            _sut.GetCachedRegisteredSips();
            A.CallTo(() => _internalRegisteredSipRepository.GetCachedRegisteredSips()).MustHaveHappened(Repeated.Exactly.Once);
            _sut.UpdateRegisteredSip(registeredSip);
            A.CallTo(() => _internalRegisteredSipRepository.GetCachedRegisteredSips()).MustHaveHappened(Repeated.Exactly.Once);
            _sut.GetCachedRegisteredSips();
            A.CallTo(() => _internalRegisteredSipRepository.GetCachedRegisteredSips()).MustHaveHappened(Repeated.Exactly.Once);
        }
Example #3
0
        public void should_handle_properties_with_null_value_in_object_hierarcy()
        {
            var obj = new RegisteredSip()
            {
                Location = null
            };
            var s = MetadataHelper.GetPropertyValue(obj, "Location.ShortName");

            Assert.AreEqual(string.Empty, s);
        }
Example #4
0
        public void should_handle_invalid_path()
        {
            var obj = new RegisteredSip()
            {
                Location = new Location()
                {
                    ShortName = "kort namn"
                }
            };
            var s = MetadataHelper.GetPropertyValue(obj, "Location.SkjortName");

            Assert.AreEqual("", s);
        }
Example #5
0
        public void should_handle_object_hierarchy()
        {
            var obj = new RegisteredSip()
            {
                Location = new Location()
                {
                    ShortName = "kort namn"
                }
            };
            var s = MetadataHelper.GetPropertyValue(obj, "Location.ShortName");

            Assert.AreEqual("kort namn", s);
        }
Example #6
0
        public void should_handle_empty_path()
        {
            var obj = new RegisteredSip()
            {
                Location = new Location()
                {
                    ShortName = "kort namn"
                }
            };
            var s = MetadataHelper.GetPropertyValue(obj, string.Empty);

            Assert.AreEqual("", s);
        }
Example #7
0
        public KamailioMessageHandlerResult RegisterSip(KamailioRegistrationMessage sipMessage)
        {
            var sip = new RegisteredSip
            {
                IP              = sipMessage.Ip,
                Port            = sipMessage.Port,
                ServerTimeStamp = sipMessage.UnixTimeStamp,
                SIP             = sipMessage.Sip.UserAtHost,
                UserAgentHead   = sipMessage.UserAgent,
                Username        = sipMessage.Username,
                DisplayName     = sipMessage.ToDisplayName,
                Expires         = sipMessage.Expires
            };

            return(_sipRepository.UpdateRegisteredSip(sip));
        }
        public void ReloadOnUpdate()
        {
            var repo       = GetCachedRegisteredSipRepository();
            var sipsOnline = repo.GetCachedRegisteredSips();
            var sipOnline  = sipsOnline.First();
            var updated    = sipOnline.Updated;

            var           repo2 = GetSimpleRegisteredSipRepository();
            RegisteredSip sip   = repo2.GetRegisteredSipById(sipOnline.Id);

            sip.DisplayName += "¤";
            repo.UpdateRegisteredSip(sip);

            sipOnline = repo.GetCachedRegisteredSips().First(rs => rs.Id == sip.Id);
            Assert.AreNotEqual(updated, sipOnline.Updated);
        }
Example #9
0
        public void RegisterSip(string sipAddress, string ip, string displayName, string userAgent)
        {
            var sip = new RegisteredSip
            {
                IP              = ip,
                Port            = 5060,
                ServerTimeStamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
                SIP             = sipAddress,
                UserAgentHead   = userAgent,
                Username        = sipAddress,
                DisplayName     = displayName,
                Expires         = 60
            };

            var changeStatus = _registeredSipRepository.UpdateRegisteredSip(sip);

            Console.WriteLine("Registered {0} with result: {1}", sip.SIP, changeStatus);
        }
        public KamailioMessageHandlerResult UpdateRegisteredSip(RegisteredSip registeredSip)
        {
            var result = _internalRepository.UpdateRegisteredSip(registeredSip);

            // When reregistration of codec already in cache, just update timestamp
            if (result.ChangeStatus == KamailioMessageChangeStatus.NothingChanged && result.ChangedObjectId != Guid.Empty)
            {
                var regSip = GetCachedRegisteredSips().FirstOrDefault(rs => rs.Id == result.ChangedObjectId);
                if (regSip != null)
                {
                    regSip.Updated = DateTime.UtcNow;
                    return(result);
                }
            }

            // Otherwise reload cache.
            _lazyCache.ClearRegisteredSips();
            return(result);
        }
Example #11
0
        public void should_reload_list_from_internal_repository_when_codec_added()
        {
            var newRegisteredSip = new RegisteredSip()
            {
                SIP = "c"
            };

            A.CallTo(() => _internalRegisteredSipRepository.UpdateRegisteredSip(newRegisteredSip)).Returns(
                new KamailioMessageHandlerResult()
            {
                ChangedObjectId = Guid.NewGuid(),
                ChangeStatus    = KamailioMessageChangeStatus.CodecAdded
            });

            _sut.GetCachedRegisteredSips();
            A.CallTo(() => _internalRegisteredSipRepository.GetCachedRegisteredSips()).MustHaveHappened(Repeated.Exactly.Once);
            _sut.UpdateRegisteredSip(newRegisteredSip);
            A.CallTo(() => _internalRegisteredSipRepository.GetCachedRegisteredSips()).MustHaveHappened(Repeated.Exactly.Once);
            _sut.GetCachedRegisteredSips();
            A.CallTo(() => _internalRegisteredSipRepository.GetCachedRegisteredSips()).MustHaveHappened(Repeated.Exactly.Twice);
        }
Example #12
0
        private RegisteredSip MapToRegisteredSip(RegisteredSipEntity dbRegisteredSip)
        {
            if (dbRegisteredSip == null)
            {
                return(null);
            }

            var registredSip = new RegisteredSip
            {
                DisplayName     = dbRegisteredSip.DisplayName,
                Expires         = dbRegisteredSip.Expires,
                Id              = dbRegisteredSip.Id,
                IP              = dbRegisteredSip.IP,
                Port            = dbRegisteredSip.Port,
                SIP             = dbRegisteredSip.SIP,
                ServerTimeStamp = dbRegisteredSip.ServerTimeStamp,
                Updated         = dbRegisteredSip.Updated,
                UserAgentHead   = dbRegisteredSip.UserAgentHeader,
                Username        = dbRegisteredSip.Username,
            };

            return(registredSip);
        }
Example #13
0
 public static string GetDisplayName(RegisteredSip registeredSip, string sipDomain)
 {
     return(GetDisplayName(registeredSip.DisplayName, registeredSip.User != null ? registeredSip.User.DisplayName : string.Empty, string.Empty, registeredSip.Username, registeredSip.SIP, "", sipDomain));
 }
Example #14
0
        public KamailioMessageHandlerResult UpdateRegisteredSip(RegisteredSip registeredSip)
        {
            // Returnerar värde som indikerar om
            // 1. Kodaren lagts till
            // 2. Kodaren fanns sedan tidigare men har på relevant sätt uppdaterad information
            // 3. Kodaren fanns sedan tidigare men registreringen i identisk. = NothingChanged

            if (registeredSip == null)
            {
                return(KamailioMessageHandlerResult.NothingChanged);
            }

            try
            {
                using (var db = GetDbContext())
                {
                    var dbSip = db.RegisteredSips.SingleOrDefault(rs => rs.SIP == registeredSip.SIP);

                    if (dbSip == null)
                    {
                        if (registeredSip.Expires == 0)
                        {
                            // Avregistrering av ej registrerad kodare. Gör ingenting.
                            return(KamailioMessageHandlerResult.NothingChanged);
                        }

                        dbSip = new Entities.RegisteredSipEntity {
                            Id = Guid.NewGuid(), Updated = DateTime.UtcNow
                        };
                        db.RegisteredSips.Add(dbSip);
                        //registeredSip.Id = dbSip.Id;
                    }
                    //else
                    //{
                    //registeredSip.Id = dbSip.Id;
                    //}

                    // Matcha och mappa
                    var user   = db.Users.FirstOrDefault(u => u.UserName == registeredSip.Username);
                    var userId = user != null ? user.Id : (Guid?)null;

                    var userAgentId = GetUserAgentId(db, registeredSip.UserAgentHead);
                    var locationId  = LocationManager.GetLocationIdByIp(registeredSip.IP);

                    registeredSip.Updated = registeredSip.Expires == 0
                        ? DateTime.UtcNow.AddSeconds(-SettingsManager.MaxRegistrationAge) // Expire immediately
                        : DateTime.UtcNow;

                    dbSip.UserAgentId         = userAgentId;
                    dbSip.Location_LocationId = locationId != Guid.Empty ? locationId : (Guid?)null;
                    dbSip.User_UserId         = userId;

                    dbSip.SIP             = registeredSip.SIP;
                    dbSip.UserAgentHead   = registeredSip.UserAgentHead;
                    dbSip.Username        = registeredSip.Username;
                    dbSip.DisplayName     = registeredSip.DisplayName;
                    dbSip.IP              = registeredSip.IP;
                    dbSip.Port            = registeredSip.Port;
                    dbSip.ServerTimeStamp = registeredSip.ServerTimeStamp;
                    dbSip.Updated         = registeredSip.Updated;
                    dbSip.Expires         = registeredSip.Expires;

                    var changeStatus = GetChangeStatus(db, dbSip);
                    db.SaveChanges();

                    return(new KamailioMessageHandlerResult {
                        ChangedObjectId = dbSip.Id, ChangeStatus = changeStatus
                    });
                }
            }
            catch (Exception ex)
            {
                log.Error(ex, "Error while updating registered sip {0}", registeredSip.SIP);
                return(KamailioMessageHandlerResult.NothingChanged);
            }
        }