Exemple #1
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());
            }
        }
Exemple #2
0
        /// <summary>
        /// Handle incoming SIP message
        /// </summary>
        /// <param name="sipMessage"></param>
        public SipEventHandlerResult HandleSipMessage(SipMessageBase sipMessage)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug("Parsed Kamailio Message {0}", sipMessage.ToDebugString());
            }

            switch (sipMessage)
            {
            case SipRegistrationMessage regMessage:
            {
                // Handle registration message
                // This is the proper way to unregister
                if (regMessage.Expires == 0)
                {
                    return(UnregisterCodec(new SipRegistrationExpireMessage {
                            SipAddress = regMessage.Sip
                        }, regMessage.RegType));
                }
                return(RegisterCodec(regMessage));
            }

            case SipRegistrationExpireMessage expireMessage:
            {
                // Handle unregistered expire message
                return(UnregisterCodec(expireMessage, null));
            }

            case SipDialogMessage dialogMessage:
            {
                // Handle dialog information
                return(HandleDialog(dialogMessage));
            }

            default:
            {
                log.Info("Unhandled Kamailio message: {0}", sipMessage.ToDebugString());
                return(NothingChangedResult);
            }
            }
        }