Tomcat 移动用户忽略UDP重新传输

Tomcat 移动用户忽略UDP重新传输,tomcat,restcomm,jain-sip,mobicents,mobicents-sip-servlets,Tomcat,Restcomm,Jain Sip,Mobicents,Mobicents Sip Servlets,我正在MSS Tomcat上运行一个B2BUA应用程序。 在我的应用程序处理BYE请求的情况下,BYE的重新传输会作为副本被丢弃。 我希望在我们使用UDP时处理重传 我们设法在所附的跟踪中使用SIPP重现问题。 以下是Mobicents日志的一部分: 2017-05-21 17:58:41,242 DEBUG [EventScanner] (Mobicents-SIP-Servlets-UDPMessageChannelThread-9) sipEvent = gov.nist.javax.s

我正在MSS Tomcat上运行一个B2BUA应用程序。 在我的应用程序处理BYE请求的情况下,BYE的重新传输会作为副本被丢弃。 我希望在我们使用UDP时处理重传

我们设法在所附的跟踪中使用SIPP重现问题。

以下是Mobicents日志的一部分:

2017-05-21 17:58:41,242 DEBUG [EventScanner] (Mobicents-SIP-Servlets-UDPMessageChannelThread-9) sipEvent = gov.nist.javax.sip.RequestEventExt[source=gov.nist.javax.sip.SipProviderImpl@21a77f66]source = gov.nist.javax.sip.SipProviderImpl@21a77f66
2017-05-21 17:58:41,242 DEBUG [EventScanner] (Mobicents-SIP-Servlets-UDPMessageChannelThread-9) deliverEvent : BYE sip:+16865721235@135.76.2.65:39000;transport=UDP SIP/2.0
transaction gov.nist.javax.sip.stack.SIPServerTransactionImpl@58d4e299 sipEvent.serverTx = gov.nist.javax.sip.stack.SIPServerTransactionImpl@58d4e299
2017-05-21 17:58:41,242 DEBUG [SIPTransactionStack] (Mobicents-SIP-Servlets-UDPMessageChannelThread-9) serverTx: looking for key z9hg4bk-10317-1-6 existing={z9hg4bk-10317-1-0=gov.nist.javax.sip.stack.SIPServerTransactionImpl@58d4e293, z9hg4bk-10317-1-6=gov.nist.javax.sip.stack.SIPServerTransactionImpl@58d4e299}
2017-05-21 17:58:41,242 DEBUG [SIPTransactionStack] (Mobicents-SIP-Servlets-UDPMessageChannelThread-9) findTransaction: returning  : gov.nist.javax.sip.stack.SIPServerTransactionImpl@58d4e299
2017-05-21 17:58:41,242 DEBUG [EventScanner] (Mobicents-SIP-Servlets-UDPMessageChannelThread-9) transaction already exists! gov.nist.javax.sip.stack.SIPServerTransactionImpl@58d4e299
2017-05-21 17:58:41,242 DEBUG [EventScanner] (Mobicents-SIP-Servlets-UDPMessageChannelThread-9) Done processing Message BYE sip:+16865721235@135.76.2.65:39000;transport=UDP SIP/2.0
下面是我们在EventScanner中找到的相关代码:

       if (sipEvent instanceof RequestEvent) {
        try {
            // Check if this request has already created a
            // transaction
            SIPRequest sipRequest = (SIPRequest) ((RequestEvent) sipEvent)
                    .getRequest();

            if (logger.isLoggingEnabled(LogLevels.TRACE_DEBUG)) {
                logger.logDebug(
                        "deliverEvent : "
                                + sipRequest.getFirstLine()
                                + " transaction "
                                + eventWrapper.transaction
                                + " sipEvent.serverTx = "
                                + ((RequestEvent) sipEvent)
                                        .getServerTransaction());
            }

            // Discard the duplicate request if a
            // transaction already exists. If the listener chose
            // to handle the request statelessly, then the listener
            // will see the retransmission.
            // Note that in both of these two cases, JAIN SIP will allow
            // you to handle the request statefully or statelessly.
            // An example of the latter case is REGISTER and an example
            // of the former case is INVITE.

            SIPServerTransaction tx = (SIPServerTransaction) sipStack
                    .findTransaction(sipRequest, true);

            if (tx != null && !tx.passToListener()) {

                // JvB: make an exception for a very rare case: some
                // (broken) UACs use
                // the same branch parameter for an ACK. Such an ACK should
                // be passed
                // to the listener (tx == INVITE ST, terminated upon sending
                // 2xx but
                // lingering to catch retransmitted INVITEs)
                if (sipRequest.getMethod().equals(Request.ACK)
                        && tx.isInviteTransaction() &&
                        ( tx.getLastResponseStatusCode() / 100 == 2 ||
                            sipStack.isNon2XXAckPassedToListener())) {

                    if (logger.isLoggingEnabled(LogLevels.TRACE_DEBUG))
                        logger
                                .logDebug(
                                        "Detected broken client sending ACK with same branch! Passing...");
                } else {
                    if (logger.isLoggingEnabled(LogLevels.TRACE_DEBUG))
                        logger.logDebug(
                                "transaction already exists! " + tx);
                    return;
                }
            } else if (sipStack.findPendingTransaction(sipRequest.getTransactionId()) != null) {
                if (logger.isLoggingEnabled(LogLevels.TRACE_DEBUG))
                    logger.logDebug(
                            "transaction already exists!!");

                return;
            }
我们在Mobicents/Tomcat版本mss-4.0.21-apache-Tomcat-8.0.26中使用jain sip ri 1.2.242


任何帮助都将不胜感激

它是什么类型的应用程序?代理、UAS、UAC、B2BUA?如果应用程序正确接收到响应,为什么需要处理重传?您的期望没有意义。如果它们被视为副本,则原件已被接收和处理。你到底希望下次再见做什么?它是什么类型的应用程序?代理、UAS、UAC、B2BUA?如果应用程序正确接收到响应,为什么需要处理重传?您的期望没有意义。如果它们被视为副本,则原件已被接收和处理。你到底想再做一次再见吗?