@Override public List<MqttGrantedQoS> authSubscribe(String clientId, String userName, List<MqttTopicSubscription> requestSubscriptions) { List<MqttGrantedQoS> r = new ArrayList<>(); requestSubscriptions.forEach(subscription -> { if (!this.allowDollar && subscription.topic().startsWith("$")) r.add(MqttGrantedQoS.NOT_GRANTED); else if (subscription.topic().equals(this.deniedTopic)) r.add(MqttGrantedQoS.NOT_GRANTED); else r.add(MqttGrantedQoS.valueOf(subscription.requestedQos().value())); }); return r; }
public static Message<MqttPacketIdVariableHeader, MqttSubscribePayloadGranted> fromMqttMessage(MqttSubscribeMessage msg, List<MqttGrantedQoS> grantedQoSes, MqttVersion version, String clientId, String userName, String brokerId) { // forge topic subscriptions List<MqttTopicSubscriptionGranted> subscriptions = new ArrayList<>(); for (int i = 0; i < msg.payload().subscriptions().size(); i++) { MqttTopicSubscriptionGranted subscription = new MqttTopicSubscriptionGranted(msg.payload().subscriptions().get(i).topic(), grantedQoSes.get(i)); subscriptions.add(subscription); } return new Message<>(msg.fixedHeader(), new MqttAdditionalHeader(version, clientId, userName, brokerId), msg.variableHeader(), new MqttSubscribePayloadGranted(subscriptions)); }
private static void validateTopicSubscription( MqttTopicSubscription expected, MqttTopicSubscription actual) { assertEquals("MqttTopicSubscription Topic mismatch ", expected.topic(), actual.topic()); assertEquals( "MqttTopicSubscription Qos mismatch ", expected.requestedQos(), actual.requestedQos()); }
String topic = requestSubscriptions.get(i).topic(); List<String> topicLevels = Topics.sanitize(topic); grantedSubscriptions.add(new MqttTopicSubscriptionGranted(topic, grantedQoS));
if (!this.validator.isTopicFilterValid(subscription.topic())) { logger.debug("Protocol violation: Client {} subscription {} is not valid based on configuration, disconnect the client", this.clientId, subscription.topic()); ctx.close(); return; String topic = requestSubscriptions.get(i).topic(); List<String> topicLevels = Topics.sanitize(topic);