Example usage for io.netty.handler.codec.mqtt MqttMessage variableHeader

List of usage examples for io.netty.handler.codec.mqtt MqttMessage variableHeader

Introduction

In this page you can find the example usage for io.netty.handler.codec.mqtt MqttMessage variableHeader.

Prototype

Object variableHeader

To view the source code for io.netty.handler.codec.mqtt MqttMessage variableHeader.

Click Source Link

Usage

From source file:com.caricah.iotracah.server.mqttserver.transform.MqttIOTTransformerImpl.java

License:Apache License

@Override
public IOTMessage toIOTMessage(MqttMessage serverMessage) {

    MqttFixedHeader fxH = serverMessage.fixedHeader();

    if (null == fxH) {
        return null;
    }//from   w  w  w.ja v a2s.  com

    switch (fxH.messageType()) {

    case PUBLISH:

        MqttPublishMessage publishMessage = (MqttPublishMessage) serverMessage;

        MqttPublishVariableHeader pubVH = publishMessage.variableHeader();

        ByteBuffer byteBuffer = publishMessage.payload().nioBuffer();

        return PublishMessage.from(pubVH.messageId(), fxH.isDup(), fxH.qosLevel().value(), fxH.isRetain(),
                pubVH.topicName(), byteBuffer, true);

    case PUBACK:

        MqttPubAckMessage pubAckMessage = (MqttPubAckMessage) serverMessage;

        MqttMessageIdVariableHeader msgIdVH = pubAckMessage.variableHeader();
        return AcknowledgeMessage.from(msgIdVH.messageId());

    case PUBREC:

        msgIdVH = (MqttMessageIdVariableHeader) serverMessage.variableHeader();
        return PublishReceivedMessage.from(msgIdVH.messageId());

    case PUBREL:

        msgIdVH = (MqttMessageIdVariableHeader) serverMessage.variableHeader();
        return ReleaseMessage.from(msgIdVH.messageId(), fxH.isDup());

    case PUBCOMP:

        msgIdVH = (MqttMessageIdVariableHeader) serverMessage.variableHeader();

        return CompleteMessage.from(msgIdVH.messageId());
    case PINGREQ:
    case PINGRESP:
        return Ping.from(fxH.isDup(), fxH.qosLevel().value(), fxH.isRetain());

    case CONNECT:

        MqttConnectMessage mqttConnectMessage = (MqttConnectMessage) serverMessage;
        MqttConnectVariableHeader conVH = mqttConnectMessage.variableHeader();
        MqttConnectPayload conPayload = mqttConnectMessage.payload();

        boolean isAnnonymousConnect = (!conVH.hasPassword() && !conVH.hasUserName());

        ConnectMessage connectionMessage = ConnectMessage.from(fxH.isDup(), fxH.qosLevel().value(),
                fxH.isRetain(), conVH.name(), conVH.version(), conVH.isCleanSession(), isAnnonymousConnect,
                conPayload.clientIdentifier(), conPayload.userName(), conPayload.password(),
                conVH.keepAliveTimeSeconds(), "");

        connectionMessage.setHasWill(conVH.isWillFlag());
        connectionMessage.setRetainWill(conVH.isWillRetain());
        connectionMessage.setWillQos(conVH.willQos());
        connectionMessage.setWillTopic(conPayload.willTopic());
        connectionMessage.setWillMessage(conPayload.willMessage());
        return connectionMessage;

    case CONNACK:

        MqttConnAckMessage connAckMessage = (MqttConnAckMessage) serverMessage;
        MqttConnAckVariableHeader connAckVH = connAckMessage.variableHeader();

        return ConnectAcknowledgeMessage.from(fxH.isDup(), fxH.qosLevel().value(), fxH.isRetain(), 20,
                connAckVH.connectReturnCode());

    case SUBSCRIBE:

        MqttSubscribeMessage subMsg = (MqttSubscribeMessage) serverMessage;
        msgIdVH = subMsg.variableHeader();
        MqttSubscribePayload subPayload = subMsg.payload();

        SubscribeMessage subscribeMessage = SubscribeMessage.from(msgIdVH.messageId(), fxH.isDup(),
                fxH.qosLevel().value(), fxH.isRetain());

        subPayload.topicSubscriptions().forEach(tSub -> {
            subscribeMessage.getTopicFilterList()
                    .add(new AbstractMap.SimpleEntry<>(tSub.topicName(), tSub.qualityOfService().value()));
        });

        return subscribeMessage;

    case UNSUBSCRIBE:

        MqttUnsubscribeMessage unSubMsg = (MqttUnsubscribeMessage) serverMessage;

        msgIdVH = unSubMsg.variableHeader();
        MqttUnsubscribePayload unsubscribePayload = unSubMsg.payload();

        return UnSubscribeMessage.from(msgIdVH.messageId(), fxH.isDup(), fxH.qosLevel().value(), fxH.isRetain(),
                unsubscribePayload.topics());

    case DISCONNECT:
        return DisconnectMessage.from(false);

    default:
        return null;
    }
}

From source file:io.crate.mqtt.netty.MqttMessageLogger.java

private static int messageId(MqttMessage msg) {
    return ((MqttMessageIdVariableHeader) msg.variableHeader()).messageId();
}

From source file:io.moquette.spi.impl.Utils.java

License:Open Source License

public static int messageId(MqttMessage msg) {
    return ((MqttMessageIdVariableHeader) msg.variableHeader()).messageId();
}

From source file:io.vertx.mqtt.impl.MqttClientConnection.java

License:Apache License

/**
 * Handle the MQTT message received from the remote MQTT server
 *
 * @param msg Incoming Packet//from  w ww .j  ava 2 s.  c  o  m
 */
synchronized void handleMessage(Object msg) {

    // handling directly native Netty MQTT messages, some of them are translated
    // to the related Vert.x ones for polyglotization
    if (msg instanceof MqttMessage) {

        MqttMessage mqttMessage = (MqttMessage) msg;

        DecoderResult result = mqttMessage.decoderResult();
        if (result.isFailure()) {
            chctx.pipeline().fireExceptionCaught(result.cause());
            return;
        }
        if (!result.isFinished()) {
            chctx.pipeline().fireExceptionCaught(new Exception("Unfinished message"));
            return;
        }

        log.debug(String.format("Incoming packet %s", msg));
        switch (mqttMessage.fixedHeader().messageType()) {

        case CONNACK:

            io.netty.handler.codec.mqtt.MqttConnAckMessage connack = (io.netty.handler.codec.mqtt.MqttConnAckMessage) mqttMessage;

            MqttConnAckMessage mqttConnAckMessage = MqttConnAckMessage.create(
                    connack.variableHeader().connectReturnCode(), connack.variableHeader().isSessionPresent());
            handleConnack(mqttConnAckMessage);
            break;

        case PUBLISH:

            io.netty.handler.codec.mqtt.MqttPublishMessage publish = (io.netty.handler.codec.mqtt.MqttPublishMessage) mqttMessage;
            ByteBuf newBuf = VertxHandler.safeBuffer(publish.payload(), chctx.alloc());

            MqttPublishMessage mqttPublishMessage = MqttPublishMessage.create(
                    publish.variableHeader().messageId(), publish.fixedHeader().qosLevel(),
                    publish.fixedHeader().isDup(), publish.fixedHeader().isRetain(),
                    publish.variableHeader().topicName(), newBuf);
            handlePublish(mqttPublishMessage);
            break;

        case PUBACK:
            handlePuback(((MqttMessageIdVariableHeader) mqttMessage.variableHeader()).messageId());
            break;

        case PUBREC:
            handlePubrec(((MqttMessageIdVariableHeader) mqttMessage.variableHeader()).messageId());
            break;

        case PUBREL:
            handlePubrel(((MqttMessageIdVariableHeader) mqttMessage.variableHeader()).messageId());
            break;

        case PUBCOMP:
            handlePubcomp(((MqttMessageIdVariableHeader) mqttMessage.variableHeader()).messageId());
            break;

        case SUBACK:

            io.netty.handler.codec.mqtt.MqttSubAckMessage unsuback = (io.netty.handler.codec.mqtt.MqttSubAckMessage) mqttMessage;

            MqttSubAckMessage mqttSubAckMessage = MqttSubAckMessage
                    .create(unsuback.variableHeader().messageId(), unsuback.payload().grantedQoSLevels());
            handleSuback(mqttSubAckMessage);
            break;

        case UNSUBACK:
            handleUnsuback(((MqttMessageIdVariableHeader) mqttMessage.variableHeader()).messageId());
            break;

        case PINGRESP:
            handlePingresp();
            break;

        default:

            this.chctx.pipeline()
                    .fireExceptionCaught(new Exception("Wrong message type " + msg.getClass().getName()));
            break;
        }

    } else {

        this.chctx.pipeline().fireExceptionCaught(new Exception("Wrong message type"));
    }
}

From source file:io.vertx.mqtt.impl.MqttConnection.java

License:Apache License

/**
 * Handle the MQTT message received by the remote MQTT client
 *
 * @param msg message to handle//from   w w  w . j  a  va 2 s. co  m
 */
synchronized void handleMessage(Object msg) {

    // handling directly native Netty MQTT messages because we don't need to
    // expose them at higher level (so no need for polyglotization)
    if (msg instanceof io.netty.handler.codec.mqtt.MqttMessage) {

        io.netty.handler.codec.mqtt.MqttMessage mqttMessage = (io.netty.handler.codec.mqtt.MqttMessage) msg;

        DecoderResult result = mqttMessage.decoderResult();
        if (result.isFailure()) {
            channel.pipeline().fireExceptionCaught(result.cause());
            return;
        }
        if (!result.isFinished()) {
            channel.pipeline().fireExceptionCaught(new Exception("Unfinished message"));
            return;
        }

        switch (mqttMessage.fixedHeader().messageType()) {

        case CONNECT:
            handleConnect((MqttConnectMessage) msg);
            break;

        case PUBACK:

            io.netty.handler.codec.mqtt.MqttPubAckMessage mqttPubackMessage = (io.netty.handler.codec.mqtt.MqttPubAckMessage) mqttMessage;
            this.handlePuback(mqttPubackMessage.variableHeader().messageId());
            break;

        case PUBREC:

            int pubrecMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubrec(pubrecMessageId);
            break;

        case PUBREL:

            int pubrelMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubrel(pubrelMessageId);
            break;

        case PUBCOMP:

            int pubcompMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubcomp(pubcompMessageId);
            break;

        case PINGREQ:

            this.handlePingreq();
            break;

        case DISCONNECT:

            this.handleDisconnect();
            break;

        default:

            this.channel.pipeline()
                    .fireExceptionCaught(new Exception("Wrong message type " + msg.getClass().getName()));
            break;

        }

        // handling mapped Vert.x MQTT messages (from Netty ones) because they'll be provided
        // to the higher layer (so need for ployglotization)
    } else {

        if (msg instanceof MqttSubscribeMessage) {

            this.handleSubscribe((MqttSubscribeMessage) msg);

        } else if (msg instanceof MqttUnsubscribeMessage) {

            this.handleUnsubscribe((MqttUnsubscribeMessage) msg);

        } else if (msg instanceof MqttPublishMessage) {

            this.handlePublish((MqttPublishMessage) msg);

        } else {

            this.channel.pipeline().fireExceptionCaught(new Exception("Wrong message type"));
        }
    }
}

From source file:io.vertx.mqtt.impl.MqttServerConnection.java

License:Apache License

/**
 * Handle the MQTT message received by the remote MQTT client
 *
 * @param msg message to handle/*  w  w w.  ja v  a2  s .co m*/
 */
synchronized void handleMessage(Object msg) {

    // handling directly native Netty MQTT messages, some of them are translated
    // to the related Vert.x ones for polyglotization
    if (msg instanceof io.netty.handler.codec.mqtt.MqttMessage) {

        io.netty.handler.codec.mqtt.MqttMessage mqttMessage = (io.netty.handler.codec.mqtt.MqttMessage) msg;

        DecoderResult result = mqttMessage.decoderResult();
        if (result.isFailure()) {
            chctx.pipeline().fireExceptionCaught(result.cause());
            return;
        }
        if (!result.isFinished()) {
            chctx.pipeline().fireExceptionCaught(new Exception("Unfinished message"));
            return;
        }

        switch (mqttMessage.fixedHeader().messageType()) {

        case CONNECT:
            handleConnect((MqttConnectMessage) msg);
            break;

        case SUBSCRIBE:

            io.netty.handler.codec.mqtt.MqttSubscribeMessage subscribe = (io.netty.handler.codec.mqtt.MqttSubscribeMessage) mqttMessage;

            MqttSubscribeMessage mqttSubscribeMessage = MqttSubscribeMessage
                    .create(subscribe.variableHeader().messageId(), subscribe.payload().topicSubscriptions());
            this.handleSubscribe(mqttSubscribeMessage);
            break;

        case UNSUBSCRIBE:

            io.netty.handler.codec.mqtt.MqttUnsubscribeMessage unsubscribe = (io.netty.handler.codec.mqtt.MqttUnsubscribeMessage) mqttMessage;

            MqttUnsubscribeMessage mqttUnsubscribeMessage = MqttUnsubscribeMessage
                    .create(unsubscribe.variableHeader().messageId(), unsubscribe.payload().topics());
            this.handleUnsubscribe(mqttUnsubscribeMessage);
            break;

        case PUBLISH:

            io.netty.handler.codec.mqtt.MqttPublishMessage publish = (io.netty.handler.codec.mqtt.MqttPublishMessage) mqttMessage;
            ByteBuf newBuf = VertxHandler.safeBuffer(publish.payload(), this.chctx.alloc());

            MqttPublishMessage mqttPublishMessage = MqttPublishMessage.create(
                    publish.variableHeader().messageId(), publish.fixedHeader().qosLevel(),
                    publish.fixedHeader().isDup(), publish.fixedHeader().isRetain(),
                    publish.variableHeader().topicName(), newBuf);
            this.handlePublish(mqttPublishMessage);
            break;

        case PUBACK:

            io.netty.handler.codec.mqtt.MqttPubAckMessage mqttPubackMessage = (io.netty.handler.codec.mqtt.MqttPubAckMessage) mqttMessage;
            this.handlePuback(mqttPubackMessage.variableHeader().messageId());
            break;

        case PUBREC:

            int pubrecMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubrec(pubrecMessageId);
            break;

        case PUBREL:

            int pubrelMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubrel(pubrelMessageId);
            break;

        case PUBCOMP:

            int pubcompMessageId = ((io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader) mqttMessage
                    .variableHeader()).messageId();
            this.handlePubcomp(pubcompMessageId);
            break;

        case PINGREQ:

            this.handlePingreq();
            break;

        case DISCONNECT:

            this.handleDisconnect();
            break;

        default:

            this.chctx.fireExceptionCaught(new Exception("Wrong message type " + msg.getClass().getName()));
            break;

        }

    } else {

        this.chctx.fireExceptionCaught(new Exception("Wrong message type"));
    }
}

From source file:net.anyflow.lannister.client.MqttPacketReceiver.java

License:Apache License

@Override
protected void channelRead0(ChannelHandlerContext ctx, MqttMessage msg) throws Exception {
    switch (msg.fixedHeader().messageType()) {
    case PUBLISH:
        if (receiver != null) {
            receiver.messageReceived(Message.newMessage(client.clientId(), (MqttPublishMessage) msg));
        }/* ww  w  .jav a 2 s .  c o m*/

        int messageId = ((MqttPublishMessage) msg).variableHeader().messageId();
        if (((MqttPublishMessage) msg).fixedHeader().qosLevel() == MqttQoS.AT_LEAST_ONCE) {
            client.send(MessageFactory.puback(messageId));
        } else if (((MqttPublishMessage) msg).fixedHeader().qosLevel() == MqttQoS.EXACTLY_ONCE) {
            client.send(MessageFactory.pubrec(messageId));
        }
        break;

    case CONNACK:
        sharedObject.receivedMessage(msg);

        synchronized (sharedObject.locker()) {
            sharedObject.locker().notify();
        }
        break;

    case PUBREC:
        client.send(MessageFactory.pubrel(((MqttMessageIdVariableHeader) msg.variableHeader()).messageId()));
        break;

    case SUBACK:
    case PUBACK:
    case PUBCOMP:
    default:
        break;
    }
}

From source file:net.anyflow.lannister.packetreceiver.GenericReceiver.java

License:Apache License

@Override
protected void channelRead0(ChannelHandlerContext ctx, MqttMessage msg) throws Exception {
    if (msg.decoderResult().isSuccess() == false) {
        logger.error("decoding MQTT message failed : {}", msg.decoderResult().cause().getMessage());

        Session session = Session.NEXUS.get(ctx.channel().id());
        if (session != null) {
            session.dispose(true); // [MQTT-4.8.0-1]
        } else {// w w w . ja  va2 s  .  c  o  m
            ctx.channel().writeAndFlush(msg).addListener(f -> {
                logger.debug("packet outgoing [{}]", msg);

                ctx.channel().disconnect().addListener(ChannelFutureListener.CLOSE).addListener(fs -> // [MQTT-3.2.2-5]
                Plugins.SELF.get(DisconnectEventListener.class)
                        .disconnected(new AbnormalDisconnectEventArgs()));
            });
        }
        return;
    } else {
        logger.debug("packet incoming [message={}]", msg.toString());

        Session session = Session.NEXUS.get(ctx.channel().id());
        if (session == null) {
            logger.error("None exist session message : {}", msg.toString());

            ctx.channel().disconnect().addListener(ChannelFutureListener.CLOSE).addListener(fs -> // [MQTT-4.8.0-1]
            Plugins.SELF.get(DisconnectEventListener.class).disconnected(new AbnormalDisconnectEventArgs()));
            return;
        }

        session.setLastIncomingTime(new Date());

        switch (msg.fixedHeader().messageType()) {
        case DISCONNECT:
            DisconnectReceiver.SHARED.handle(session);
            return;

        case PINGREQ:
            PingReqReceiver.SHARED.handle(session);
            return;

        case PUBREC:
            PubRecReceiver.SHARED.handle(session,
                    ((MqttMessageIdVariableHeader) msg.variableHeader()).messageId());
            return;

        case PUBREL:
            PubRelReceiver.SHARED.handle(session,
                    ((MqttMessageIdVariableHeader) msg.variableHeader()).messageId());
            return;

        case PUBCOMP:
            PubCompReceiver.SHARED.handle(session,
                    ((MqttMessageIdVariableHeader) msg.variableHeader()).messageId());
            return;

        default:
            session.dispose(true); // [MQTT-4.8.0-1]
            return;
        }
    }
}

From source file:org.apache.activemq.artemis.core.protocol.mqtt.MQTTProtocolHandler.java

License:Apache License

private int getMessageId(MqttMessage message) {
    return ((MqttMessageIdVariableHeader) message.variableHeader()).messageId();
}

From source file:org.apache.activemq.artemis.core.protocol.mqtt.MQTTUtil.java

License:Apache License

public static void traceMessage(MQTTSessionState state, MqttMessage message, boolean inbound) {
    StringBuilder log = new StringBuilder("MQTT(");

    if (state != null) {
        log.append(state.getClientId());
    }/*from   www  . j a  va2s.co m*/

    if (inbound) {
        log.append("): IN << ");
    } else {
        log.append("): OUT >> ");
    }

    if (message.fixedHeader() != null) {
        log.append(message.fixedHeader().messageType().toString());

        if (message.variableHeader() instanceof MqttMessageIdVariableHeader) {
            log.append("(" + ((MqttMessageIdVariableHeader) message.variableHeader()).messageId() + ")");
        }

        switch (message.fixedHeader().messageType()) {
        case PUBLISH:
            MqttPublishVariableHeader publishHeader = (MqttPublishVariableHeader) message.variableHeader();
            String publishPayload = ((MqttPublishMessage) message).payload().toString(StandardCharsets.UTF_8);
            final int maxPayloadLogSize = 256;
            log.append("(" + publishHeader.packetId() + ")").append(" topic=" + publishHeader.topicName())
                    .append(", qos=" + message.fixedHeader().qosLevel())
                    .append(", retain=" + message.fixedHeader().isRetain())
                    .append(", dup=" + message.fixedHeader().isDup())
                    .append(", payload=" + (publishPayload.length() > maxPayloadLogSize
                            ? publishPayload.substring(0, maxPayloadLogSize)
                            : publishPayload));
            break;
        case CONNECT:
            MqttConnectVariableHeader connectHeader = (MqttConnectVariableHeader) message.variableHeader();
            MqttConnectPayload payload = ((MqttConnectMessage) message).payload();
            log.append(" protocol=(").append(connectHeader.name()).append(", ").append(connectHeader.version())
                    .append(")").append(", hasPassword=").append(connectHeader.hasPassword())
                    .append(", isCleanSession=").append(connectHeader.isCleanSession())
                    .append(", keepAliveTimeSeconds=").append(connectHeader.keepAliveTimeSeconds())
                    .append(", clientIdentifier=").append(payload.clientIdentifier()).append(", hasUserName=")
                    .append(connectHeader.hasUserName());
            if (connectHeader.hasUserName()) {
                log.append(", userName=").append(payload.userName());
            }
            log.append(", isWillFlag=").append(connectHeader.isWillFlag());
            if (connectHeader.isWillFlag()) {
                log.append(", willQos=").append(connectHeader.willQos()).append(", isWillRetain=")
                        .append(connectHeader.isWillRetain()).append(", willTopic=")
                        .append(payload.willTopic());
            }
            break;
        case CONNACK:
            MqttConnAckVariableHeader connackHeader = (MqttConnAckVariableHeader) message.variableHeader();
            log.append(" connectReturnCode=").append(connackHeader.connectReturnCode().byteValue())
                    .append(", sessionPresent=").append(connackHeader.isSessionPresent());
            break;
        case SUBSCRIBE:
            for (MqttTopicSubscription sub : ((MqttSubscribeMessage) message).payload().topicSubscriptions()) {
                log.append("\n\t" + sub.topicName() + " : " + sub.qualityOfService());
            }
            break;
        case SUBACK:
            for (Integer qos : ((MqttSubAckMessage) message).payload().grantedQoSLevels()) {
                log.append("\n\t" + qos);
            }
            break;
        case UNSUBSCRIBE:
            for (String topic : ((MqttUnsubscribeMessage) message).payload().topics()) {
                log.append("\n\t" + topic);
            }
            break;
        }

        logger.trace(log.toString());
    }
}