Fixed leaks
This commit is contained in:
@@ -321,7 +321,7 @@ final class MQTTConnection {
|
||||
}
|
||||
switch (qos) {
|
||||
case AT_MOST_ONCE:
|
||||
postOffice.receivedPublishQos0(topic, username, clientId, payload, retain);
|
||||
postOffice.receivedPublishQos0(topic, username, clientId, payload, retain, msg);
|
||||
break;
|
||||
case AT_LEAST_ONCE: {
|
||||
final int messageID = msg.variableHeader().packetId();
|
||||
|
||||
@@ -143,7 +143,7 @@ class PostOffice {
|
||||
mqttConnection.sendUnsubAckMessage(topics, clientID, messageId);
|
||||
}
|
||||
|
||||
void receivedPublishQos0(Topic topic, String username, String clientID, ByteBuf payload, boolean retain) {
|
||||
void receivedPublishQos0(Topic topic, String username, String clientID, ByteBuf payload, boolean retain, MqttPublishMessage msg) {
|
||||
if (!authorizator.canWrite(topic, username, clientID)) {
|
||||
LOG.error("MQTT client is not authorized to publish on topic. CId={}, topic: {}", clientID, topic);
|
||||
return;
|
||||
@@ -155,9 +155,6 @@ class PostOffice {
|
||||
retainedRepository.cleanRetained(topic);
|
||||
}
|
||||
|
||||
MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBLISH, false, AT_MOST_ONCE, false, 0);
|
||||
MqttPublishVariableHeader varHeader = new MqttPublishVariableHeader(topic.toString(), 0);
|
||||
MqttPublishMessage msg = new MqttPublishMessage(fixedHeader, varHeader, payload.retainedDuplicate());
|
||||
interceptor.notifyTopicPublished(msg, clientID, username);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import io.moquette.spi.impl.subscriptions.Subscription;
|
||||
import io.moquette.spi.impl.subscriptions.Topic;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.handler.codec.mqtt.*;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -335,12 +336,13 @@ class Session {
|
||||
|
||||
public void receivedPublishQos2(int messageID, MqttPublishMessage msg) {
|
||||
qos2Receiving.put(messageID, msg);
|
||||
msg.retain();
|
||||
msg.retain(); // retain to put in the inflight map
|
||||
mqttConnection.sendPublishReceived(messageID);
|
||||
}
|
||||
|
||||
public void receivedPubRelQos2(int messageID) {
|
||||
qos2Receiving.remove(messageID);
|
||||
final MqttPublishMessage removedMsg = qos2Receiving.remove(messageID);
|
||||
ReferenceCountUtil.release(removedMsg);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -42,10 +42,18 @@ public class MQTTMessageLogger extends ChannelDuplexHandler {
|
||||
|
||||
@Override
|
||||
public void channelRead(ChannelHandlerContext ctx, Object message) throws Exception {
|
||||
logMQTTMessage(ctx, message, "C->B");
|
||||
logMQTTMessageRead(ctx, message);
|
||||
ctx.fireChannelRead(message);
|
||||
}
|
||||
|
||||
private void logMQTTMessageRead(ChannelHandlerContext ctx, Object message) throws Exception {
|
||||
logMQTTMessage(ctx, message, "C->B");
|
||||
}
|
||||
|
||||
private void logMQTTMessageWrite(ChannelHandlerContext ctx, Object message) throws Exception {
|
||||
logMQTTMessage(ctx, message, "C<-B");
|
||||
}
|
||||
|
||||
private void logMQTTMessage(ChannelHandlerContext ctx, Object message, String direction) throws Exception {
|
||||
if (!(message instanceof MqttMessage)) {
|
||||
return;
|
||||
@@ -106,7 +114,7 @@ public class MQTTMessageLogger extends ChannelDuplexHandler {
|
||||
|
||||
@Override
|
||||
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
|
||||
logMQTTMessage(ctx, msg, "C<-B");
|
||||
logMQTTMessageWrite(ctx, msg);
|
||||
ctx.write(msg, promise).addListener(CLOSE_ON_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user