in extensions/mqtt/processors/ConsumeMQTT.cpp [207:255]
void ConsumeMQTT::checkProperties() {
auto is_property_explicitly_set = [this](const std::string_view property_name) -> bool {
const auto property_values = getAllPropertyValues(property_name) | utils::orThrow("It should only be called on valid property");
return !property_values.empty();
};
if (mqtt_version_ == mqtt::MqttVersions::V_3_1_0 || mqtt_version_ == mqtt::MqttVersions::V_3_1_1 || mqtt_version_ == mqtt::MqttVersions::V_3X_AUTO) {
if (is_property_explicitly_set(CleanStart.name)) {
logger_->log_warn("MQTT 3.x specification does not support Clean Start. Property is not used.");
}
if (is_property_explicitly_set(SessionExpiryInterval.name)) {
logger_->log_warn("MQTT 3.x specification does not support Session Expiry Intervals. Property is not used.");
}
if (is_property_explicitly_set(AttributeFromContentType.name)) {
logger_->log_warn("MQTT 3.x specification does not support Content Types and thus attributes cannot be created from them. Property is not used.");
}
if (is_property_explicitly_set(TopicAliasMaximum.name)) {
logger_->log_warn("MQTT 3.x specification does not support Topic Alias Maximum. Property is not used.");
}
if (is_property_explicitly_set(ReceiveMaximum.name)) {
logger_->log_warn("MQTT 3.x specification does not support Receive Maximum. Property is not used.");
}
}
if (mqtt_version_ == mqtt::MqttVersions::V_5_0 && is_property_explicitly_set(CleanSession.name)) {
logger_->log_warn("MQTT 5.0 specification does not support Clean Session. Property is not used.");
}
if (clientID_.empty()) {
if (mqtt_version_ == mqtt::MqttVersions::V_5_0) {
if (session_expiry_interval_ > std::chrono::seconds(0)) {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Processor must have a Client ID for durable (Session Expiry Interval > 0) sessions");
}
} else if (!clean_session_) {
throw Exception(PROCESS_SCHEDULE_EXCEPTION, "Processor must have a Client ID for durable (non-clean) sessions");
}
}
if (qos_ == mqtt::MqttQoS::LEVEL_0) {
if (mqtt_version_ == mqtt::MqttVersions::V_5_0) {
if (session_expiry_interval_ > std::chrono::seconds(0)) {
logger_->log_warn("Messages are not preserved during client disconnection "
"by the broker when QoS is less than 1 for durable (Session Expiry Interval > 0) sessions. Only subscriptions are preserved.");
}
} else if (!clean_session_) {
logger_->log_warn("Messages are not preserved during client disconnection "
"by the broker when QoS is less than 1 for durable (non-clean) sessions. Only subscriptions are preserved.");
}
}
}