Refactored due to comments
This commit is contained in:
parent
ea0aada55d
commit
936ad3c2b2
@ -314,26 +314,8 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SUBSCRIBE:
|
case SUBSCRIBE:
|
||||||
MqttSubscribeMessage mqttSubscribeMsg = (MqttSubscribeMessage) msg;
|
MqttSubscribeMessage subscribeMessage = (MqttSubscribeMessage) msg;
|
||||||
log.trace("[{}] Processing subscription [{}]!", sessionId, mqttSubscribeMsg.variableHeader().messageId());
|
processSubscribe(ctx, subscribeMessage);
|
||||||
List<Integer> grantedQoSList = new ArrayList<>();
|
|
||||||
for (MqttTopicSubscription subscription : mqttSubscribeMsg.payload().topicSubscriptions()) {
|
|
||||||
String topic = subscription.topicFilter();
|
|
||||||
MqttQoS reqQoS = subscription.qualityOfService();
|
|
||||||
try {
|
|
||||||
if (MqttTopics.DEVICE_PROVISION_RESPONSE_TOPIC.equals(topic)) {
|
|
||||||
registerSubQoS(topic, grantedQoSList, reqQoS);
|
|
||||||
} else {
|
|
||||||
log.warn("[{}] Failed to subscribe to [{}][{}]", sessionId, topic, reqQoS);
|
|
||||||
grantedQoSList.add(ReturnCodeResolver.getSubscriptionReturnCode(deviceSessionCtx.getMqttVersion(), MqttReasonCodes.SubAck.TOPIC_FILTER_INVALID));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.warn("[{}] Failed to subscribe to [{}][{}]", sessionId, topic, reqQoS, e);
|
|
||||||
grantedQoSList.add(ReturnCodeResolver.getSubscriptionReturnCode(deviceSessionCtx.getMqttVersion(), MqttReasonCodes.SubAck.IMPLEMENTATION_SPECIFIC_ERROR));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ctx.writeAndFlush(createSubAckMessage(mqttSubscribeMsg.variableHeader().messageId(), grantedQoSList));
|
|
||||||
break;
|
break;
|
||||||
case PINGREQ:
|
case PINGREQ:
|
||||||
ctx.writeAndFlush(new MqttMessage(new MqttFixedHeader(PINGRESP, false, AT_MOST_ONCE, false, 0)));
|
ctx.writeAndFlush(new MqttMessage(new MqttFixedHeader(PINGRESP, false, AT_MOST_ONCE, false, 0)));
|
||||||
@ -772,7 +754,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void processSubscribe(ChannelHandlerContext ctx, MqttSubscribeMessage mqttMsg) {
|
private void processSubscribe(ChannelHandlerContext ctx, MqttSubscribeMessage mqttMsg) {
|
||||||
if (!checkConnected(ctx, mqttMsg)) {
|
if (!checkConnected(ctx, mqttMsg) && !deviceSessionCtx.isProvisionOnly()) {
|
||||||
ctx.writeAndFlush(createSubAckMessage(mqttMsg.variableHeader().messageId(), Collections.singletonList(MqttReasonCodes.SubAck.NOT_AUTHORIZED.byteValue() & 0xFF)));
|
ctx.writeAndFlush(createSubAckMessage(mqttMsg.variableHeader().messageId(), Collections.singletonList(MqttReasonCodes.SubAck.NOT_AUTHORIZED.byteValue() & 0xFF)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -782,6 +764,16 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
|
|||||||
for (MqttTopicSubscription subscription : mqttMsg.payload().topicSubscriptions()) {
|
for (MqttTopicSubscription subscription : mqttMsg.payload().topicSubscriptions()) {
|
||||||
String topic = subscription.topicName();
|
String topic = subscription.topicName();
|
||||||
MqttQoS reqQoS = subscription.qualityOfService();
|
MqttQoS reqQoS = subscription.qualityOfService();
|
||||||
|
if (deviceSessionCtx.isProvisionOnly()) {
|
||||||
|
if (MqttTopics.DEVICE_PROVISION_RESPONSE_TOPIC.equals(topic)) {
|
||||||
|
registerSubQoS(topic, grantedQoSList, reqQoS);
|
||||||
|
} else {
|
||||||
|
log.debug("[{}] Failed to subscribe to [{}][{}]", sessionId, topic, reqQoS);
|
||||||
|
grantedQoSList.add(ReturnCodeResolver.getSubscriptionReturnCode(deviceSessionCtx.getMqttVersion(), MqttReasonCodes.SubAck.TOPIC_FILTER_INVALID));
|
||||||
|
}
|
||||||
|
activityReported = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (deviceSessionCtx.isDeviceSubscriptionAttributesTopic(topic)) {
|
if (deviceSessionCtx.isDeviceSubscriptionAttributesTopic(topic)) {
|
||||||
processAttributesSubscribe(grantedQoSList, topic, reqQoS, TopicType.V1);
|
processAttributesSubscribe(grantedQoSList, topic, reqQoS, TopicType.V1);
|
||||||
activityReported = true;
|
activityReported = true;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user