public void messageReceived()

in coap/src/main/java/org/apache/mina/coap/retry/CoapRetryFilter.java [75:114]


    public void messageReceived(IoSession session, Object in, ReadFilterChainController controller) {
        LOGGER.debug("Processing a MESSAGE_RECEIVED for session {}", session);

        CoapMessage coapMsg = (CoapMessage) in;
        String transmissionId = CoapTransmission.uniqueId(session, coapMsg);

        switch (coapMsg.getType()) {
        case NON_CONFIRMABLE:
            // non confirmable message, let's move to the next filter
            super.messageReceived(session, coapMsg, controller);
            break;

        case CONFIRMABLE:
            // check if this is a duplicate of a message already processed
            CoapMessage ack = processed.get(transmissionId);

            if (ack != null) {
                // stop the filter chain and send again the ack since it was
                // probably lost
                LOGGER.debug("Duplicated messages detected with ID {} in session {}", coapMsg.requestId(), session);
                controller.callWriteMessageForRead(ack);
            } else {
                super.messageReceived(session, coapMsg, controller);
            }

            break;
        case ACK:
        case RESET:
            CoapTransmission t = inFlight.get(transmissionId);

            if (t != null) {
                // cancel the scheduled retransmission
                t.getRetryFuture().cancel(false);
                inFlight.remove(transmissionId);
            }

            super.messageReceived(session, coapMsg, controller);
            break;
        }
    }