Exemple #1
0
        public void should_register_new_codec()
        {
            var sipMessageManager = kernel.Get <KamailioMessageManager>();
            var sipRep            = kernel.Get <RegisteredSipRepository>();

            // ASSIGN
            var userName = "******";

            // Delete any already registered codec
            var existingSip = sipRep.Single(rs => rs.SIP == userName);

            if (existingSip != null)
            {
                sipRep.DeleteRegisteredSip(existingSip.Id);
            }

            var ipAddress   = GetRandomLocationIpAddress();
            var displayName = "Test";

            var sipMessage = CreateSipMessage(ipAddress, "ME-UMAC2-M/0.255", userName, displayName);

            // ACT
            KamailioMessageHandlerResult result = sipMessageManager.DoHandleMessage(sipMessage);

            // ASSERT
            Assert.AreEqual(KamailioMessageChangeStatus.CodecAdded, result.ChangeStatus);

            var sip = sipRep.Single(rs => rs.SIP == userName);

            Assert.AreEqual(ipAddress, sip.IP);
            Assert.AreEqual(userName, sip.User.UserName);

            // Clean up
            sipRep.DeleteRegisteredSip(sip.Id);
        }
        public void Update(KamailioMessageHandlerResult updateResult)
        {
            if (updateResult.ChangeStatus == KamailioMessageChangeStatus.CallStarted)
            {
                // Load call and update to and from codecs
                var callId   = updateResult.ChangedObjectId;
                var callInfo = _callRepository.GetCallInfoById(callId);

                if (callInfo != null)
                {
                    log.Warn("Call started. From:{0} To:{1}", callInfo.FromId, callInfo.ToId);
                    UpdateCodecStatusByGuid(callInfo.FromId);
                    UpdateCodecStatusByGuid(callInfo.ToId);
                }
                else
                {
                    log.Warn("Call started but was not found in database. Call Id:{0}", callId);
                }
            }

            if (updateResult.ChangeStatus == KamailioMessageChangeStatus.CallClosed)
            {
                // Load call and update to and from codecs
                var         callId = updateResult.ChangedObjectId;
                CallHistory call   = _callHistoryRepository.GetCallHistoryByCallId(callId);

                if (call != null)
                {
                    log.Info("Call closed. From:{0} To:{1} Call ID:{2}", call.FromId, call.ToId, callId);
                    UpdateCodecStatusByGuid(call.FromId);
                    UpdateCodecStatusByGuid(call.ToId);
                }
                else
                {
                    log.Warn("Call closed but was not found in call history. Call Id:{0}", callId);
                }
            }

            if (updateResult.ChangeStatus == KamailioMessageChangeStatus.CodecAdded ||
                updateResult.ChangeStatus == KamailioMessageChangeStatus.CodecUpdated)
            {
                UpdateCodecStatusByGuid(updateResult.ChangedObjectId);
            }

            if (updateResult.ChangeStatus == KamailioMessageChangeStatus.CodecRemoved)
            {
                var codecStatus = new CodecStatus {
                    State = CodecState.NotRegistered, SipAddress = updateResult.SipAddress
                };
                CodecStatusHub.UpdateCodecStatus(codecStatus);
            }

            log.Info("StatusHub is updating. status={0}, id={1}", updateResult.ChangeStatus, updateResult.ChangedObjectId);
        }
Exemple #3
0
        public ActionResult EditRegisteredSipComment(RegisteredSipComment sipComment)
        {
            if (sipComment.RegisteredSipId != Guid.Empty)
            {
                _userManager.SaveComment(sipComment);
            }

            var updateResult = new KamailioMessageHandlerResult()
            {
                ChangeStatus    = KamailioMessageChangeStatus.CodecUpdated,
                ChangedObjectId = sipComment.RegisteredSipId
            };

            _guiHubUpdater.Update(updateResult);
            _statusHubUpdater.Update(updateResult);

            return(null);
        }
Exemple #4
0
        public IHttpActionResult Post([FromBody] string message)
        {
            log.Debug("Incoming Kamailio message: {0}", message);

            if (string.IsNullOrWhiteSpace(message))
            {
                log.Warn("Kamailio event controller received empty data");
                return(BadRequest());
            }

            KamailioMessageHandlerResult result = _sipMessageManager.HandleMessage(message);

            if (result == null)
            {
                log.Warn("Kamailio message was handled but result was null");
            }
            else if (result.ChangeStatus != KamailioMessageChangeStatus.NothingChanged)
            {
                _guiHubUpdater.Update(result);    // First web gui
                _statusHubUpdater.Update(result); // Then codec status to external clients
            }

            return(Ok());
        }
Exemple #5
0
        public void Update(KamailioMessageHandlerResult updateResult)
        {
            log.Debug("GuiHubUpdater is updating. status={0}, id={1}", updateResult.ChangeStatus, updateResult.ChangedObjectId);

            if (updateResult.ChangeStatus == KamailioMessageChangeStatus.CallStarted)
            {
                WebGuiHub.ThrottlingUpdateOngoingCalls();
                WebGuiHub.ThrottlingUpdateCodecsOnline();
            }

            if (updateResult.ChangeStatus == KamailioMessageChangeStatus.CallClosed)
            {
                WebGuiHub.ThrottlingUpdateOngoingCalls();
                WebGuiHub.ThrottlingUpdateOldCalls();
                WebGuiHub.ThrottlingUpdateCodecsOnline();
            }

            if (updateResult.ChangeStatus == KamailioMessageChangeStatus.CodecAdded ||
                updateResult.ChangeStatus == KamailioMessageChangeStatus.CodecUpdated ||
                updateResult.ChangeStatus == KamailioMessageChangeStatus.CodecRemoved)
            {
                WebGuiHub.ThrottlingUpdateCodecsOnline();
            }
        }