Esempio n. 1
0
        public void should_register_new_codec()
        {
            // ASSIGN
            var userName = "******";

            // Delete any already registered codec
            DeleteRegisteredSip(userName);

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

            var sipEvent   = CreateSipRegisterEvent(ipAddress, "ME-UMAC2-M/0.255", userName, displayName);
            var sipMessage = new SipEventParser().Parse(sipEvent);

            // ACT
            SipEventHandlerResult result = SipMessageManager.HandleSipMessage(sipMessage);

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

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

            Assert.AreEqual(ipAddress, sip.IP);

            // Clean up
            DeleteRegisteredSip(sip.Id);
        }
Esempio n. 2
0
        public void Update(SipEventHandlerResult updateResult)
        {
            if (updateResult.ChangeStatus == SipEventChangeStatus.CallStarted)
            {
                // Load call and update to and from codecs
                var callId   = updateResult.ChangedObjectId;
                var callInfo = _callRepository.GetCallInfoById(callId);

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

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

                if (call != null)
                {
                    log.Debug($"CodecStatusHub. Call closed. From: {call.FromId}, To: {call.ToId}, Call Id: {callId}");
                    UpdateCodecStatusByGuid(call.FromId);
                    UpdateCodecStatusByGuid(call.ToId);
                }
                else
                {
                    log.Error($"CodecStatusHub. Call closed but was not found in call history. Call Id: {callId}");
                }
            }

            if (updateResult.ChangeStatus == SipEventChangeStatus.CodecAdded)
            {
                UpdateCodecStatusByGuid(updateResult.ChangedObjectId);
            }

            if (updateResult.ChangeStatus == SipEventChangeStatus.CodecUpdated)
            {
                UpdateCodecStatusByGuid(updateResult.ChangedObjectId);
            }

            if (updateResult.ChangeStatus == SipEventChangeStatus.CodecRemoved)
            {
                var codecStatus = new CodecStatusViewModel
                {
                    State      = CodecState.NotRegistered,
                    SipAddress = updateResult.SipAddress
                };
                CodecStatusHub.UpdateCodecStatusRemoved(codecStatus);
            }

            log.Debug($"CodecStatusHub. Status: {updateResult.ChangeStatus}, Id: {updateResult.ChangedObjectId}, SipAddress: {updateResult.SipAddress}");
        }
Esempio n. 3
0
        public async Task <IHttpActionResult> Post(KamailioSipEvent sipEvent)
        {
            if (!_settingsManager.UseSipEvent)
            {
                if (log.IsTraceEnabled)
                {
                    log.Warn("Receiving event but receiver is not ON for 'UseSipEvent'");
                }
                return(Ok());
            }

            if (log.IsTraceEnabled)
            {
                Stream stream = await Request.Content.ReadAsStreamAsync();

                stream.Seek(0, SeekOrigin.Begin);
                var body = await Request.Content.ReadAsStringAsync();

                log.Trace($"Request {Request} Body {body}");
            }

            using (new TimeMeasurer("Incoming SIP event"))
            {
                if (sipEvent == null)
                {
                    log.Warn("SIP event controller received empty data");
                    return(BadRequest());
                }

                var sipMessage = _sipEventParser.Parse(sipEvent);

                if (sipMessage == null)
                {
                    log.Warn("Incorrect SIP message format: ", sipEvent);
                    return(BadRequest());
                }

                SipEventHandlerResult result = _sipMessageManager.HandleSipMessage(sipMessage);

                if (log.IsDebugEnabled)
                {
                    log.Debug("SIP message, Handled: {0}, Parsed: {1}, Result: {2}", sipEvent.ToLogString(), sipMessage.ToDebugString(), result?.ChangeStatus);
                }

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

                return(Ok());
            }
        }
Esempio n. 4
0
        public IHttpActionResult Post([FromBody] string message)
        {
            if (!_settingsManager.UseOldKamailioEvent)
            {
                if (log.IsTraceEnabled)
                {
                    log.Warn("Receiving event but receiver is not ON for 'UseOldKamailioEvent'");
                }
                return(Ok());
            }

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

                SipMessageBase sipMessage = _kamailioMessageParser.Parse(message);

                if (sipMessage == null)
                {
                    log.Warn("Incorrect Kamailio message format: {0}", message);
                    return(BadRequest());
                }

                SipEventHandlerResult result = _sipMessageManager.HandleSipMessage(sipMessage);

                if (log.IsDebugEnabled)
                {
                    log.Debug("SIP message, Handled: {0}, Parsed: {1}, Result: {2}", message, sipMessage.ToDebugString(), result?.ChangeStatus);
                }

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

                return(Ok());
            }
        }
Esempio n. 5
0
        public ActionResult EditRegisteredSipComment(SipAccountComment model)
        {
            if (model.SipAccountId != Guid.Empty)
            {
                _sipAccountManager.UpdateComment(model.SipAccountId, model.Comment);
            }

            var updateResult = new SipEventHandlerResult()
            {
                ChangeStatus    = SipEventChangeStatus.CodecUpdated,
                ChangedObjectId = model.SipAccountId
            };

            _guiHubUpdater.Update(updateResult);    // First web gui
            _statusHubUpdater.Update(updateResult); // Then codec status to external clients
            return(null);
        }
Esempio n. 6
0
        public void Update(SipEventHandlerResult updateResult)
        {
            log.Debug($"WebGuiHubUpdater. Status: {updateResult.ChangeStatus}, Id: {updateResult.ChangedObjectId}, SipAddress: {updateResult.SipAddress}");

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

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

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