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); }
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}"); }
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()); } }
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()); } }
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); }
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(); } }