private Message checkAction(Message message) {
        checkUpdate(mConfigFileName);
        String action = mConfigParser.getReceiveAction(message);
        if (action == null) {
            // If action equals null
            // No matching rule
            // Normal case
            if (message.isMulticast()) {
                trasferDelayedMessage(mReceiveQueue, mDelayedReceivingQueue);
            }
            return message;
        }
        if (action.equals(Constant.ACTION_DROP)) {
            // Drop message
            return null;
        } else if (action.equals(Constant.ACTION_DELAY)) {
            if (isCheckedDelayedMessage(message)) {
                // If message is checked, then remove it from map
                mCheckedDelayedMessage.remove(message);
            } else {
                // Delay
                receiveDelayedMessage(message);
                return null;
            }
        } else if (action.equals(Constant.ACTION_DUP)) {
            // Duplicate
            if (isCheckedDuplicatedMessage(message)) {
                mCheckedDuplciatedMessage.remove(message);
            } else {
                receiveDuplicateMessage(message);
            }
            if (message.isMulticast()) {
                trasferDelayedMessage(mReceiveQueue, mDelayedReceivingQueue);
            }
        } else {
            if (message.isMulticast()) {
                trasferDelayedMessage(mReceiveQueue, mDelayedReceivingQueue);
            }
            return message;
        }
        return message;
    }