List of usage examples for io.netty.handler.codec.mqtt MqttMessage fixedHeader
public MqttFixedHeader fixedHeader()
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; }//w w w. j a va 2 s.co m 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 void logMQTTMessage(ChannelHandlerContext ctx, Object message, String direction) { if (logger.isTraceEnabled() && message instanceof MqttMessage) { MqttMessage msg = (MqttMessage) message; String clientID = NettyUtils.clientID(ctx.channel()); MqttMessageType messageType = msg.fixedHeader().messageType(); switch (messageType) { case CONNECT: case CONNACK: case PINGREQ: case PINGRESP: case DISCONNECT: logger.trace("{} {} <{}>", direction, messageType, clientID); break; case SUBSCRIBE: MqttSubscribeMessage subscribe = (MqttSubscribeMessage) msg; logger.trace("{} SUBSCRIBE <{}> to topics {}", direction, clientID, subscribe.payload().topicSubscriptions()); break; case UNSUBSCRIBE: MqttUnsubscribeMessage unsubscribe = (MqttUnsubscribeMessage) msg; logger.trace("{} UNSUBSCRIBE <{}> to topics <{}>", direction, clientID, unsubscribe.payload().topics()); break; case PUBLISH: MqttPublishMessage publish = (MqttPublishMessage) msg; logger.trace("{} PUBLISH <{}> to topics <{}>", direction, clientID, publish.variableHeader().topicName()); break; case PUBREC: case PUBCOMP: case PUBREL: case PUBACK: case UNSUBACK: logger.trace("{} {} <{}> packetID <{}>", direction, messageType, clientID, messageId(msg)); break; case SUBACK: MqttSubAckMessage suback = (MqttSubAckMessage) msg; List<Integer> grantedQoSLevels = suback.payload().grantedQoSLevels(); logger.trace("{} SUBACK <{}> packetID <{}>, grantedQoses {}", direction, clientID, messageId(msg), grantedQoSLevels);/*from w w w . j a va2 s . c om*/ break; default: logger.trace("{} {} <{}> Unknown message type received.", direction, messageType, clientID); } } }
From source file:io.crate.mqtt.netty.MqttNettyHandler.java
@Override public void channelRead(ChannelHandlerContext ctx, Object message) { MqttMessage msg = (MqttMessage) message; LOGGER.trace("Received a message of type {}", msg.fixedHeader().messageType().toString()); try {/*from w w w . j a v a2 s .co m*/ switch (msg.fixedHeader().messageType()) { case CONNECT: processor.handleConnect(ctx.channel(), (MqttConnectMessage) msg); break; case PUBLISH: processor.handlePublish(ctx.channel(), (MqttPublishMessage) msg); break; case DISCONNECT: processor.handleDisconnect(ctx.channel()); break; case PINGREQ: processor.handlePingReq(ctx.channel()); break; default: String error = String.format(Locale.ENGLISH, "Message type %s is not supported.", msg.fixedHeader().messageType().toString()); throw new UnsupportedOperationException(error); } } catch (SQLActionException ex) { SQLActionException sqlActionException = (SQLActionException) ex; // 4041 is an unknown table exception, 4045 is an unknown schema exception if (sqlActionException.errorCode() == 4041 || sqlActionException.errorCode() == 4045) { LOGGER.error("Unable to process MQTT message, as the target table does not exist"); } else { LOGGER.error("Unable to process MQTT message: ", sqlActionException.getDetailedMessage()); } } catch (Exception ex) { if (ex.getMessage() == null) { // print stacktrace if exception has no message LOGGER.error("Error processing MQTT message", ex); } else { // less verbose logging LOGGER.error("Error processing MQTT message: {}", ex.getMessage()); } } }
From source file:io.crate.mqtt.operations.MqttPingIntegrationTest.java
@Test public void testPing() throws Exception { mqttClient.sendMessage(MqttMessages.newPingRequest(MqttQoS.AT_LEAST_ONCE)); MqttMessage response = mqttClient.lastReceivedMessage(); assertThat(response.fixedHeader().messageType(), is(MqttMessageType.PINGRESP)); }
From source file:io.moquette.server.ConnectionDescriptorStore.java
License:Open Source License
public boolean sendMessage(MqttMessage message, Integer messageID, String clientID) { final MqttMessageType messageType = message.fixedHeader().messageType(); try {//from w ww . j av a 2 s . co m if (messageID != null) { LOG.info("Sending {} message CId=<{}>, messageId={}", messageType, clientID, messageID); } else { LOG.debug("Sending {} message CId=<{}>", messageType, clientID); } ConnectionDescriptor descriptor = connectionDescriptors.get(clientID); if (descriptor == null) { if (messageID != null) { LOG.error("Client has just disconnected. {} message could not be sent. CId=<{}>, messageId={}", messageType, clientID, messageID); } else { LOG.error("Client has just disconnected. {} could not be sent. CId=<{}>", messageType, clientID); } /* * If the client has just disconnected, its connection descriptor will be null. We * don't have to make the broker crash: we'll just discard the PUBACK message. */ return false; } descriptor.writeAndFlush(message); return true; } catch (Throwable e) { String errorMsg = "Unable to send " + messageType + " message. CId=<" + clientID + ">"; if (messageID != null) { errorMsg += ", messageId=" + messageID; } LOG.error(errorMsg, e); return false; } }
From source file:io.moquette.server.netty.metrics.DropWizardMetricsHandler.java
License:Open Source License
@Override public void channelRead(ChannelHandlerContext ctx, Object message) { MqttMessage msg = (MqttMessage) message; MqttMessageType messageType = msg.fixedHeader().messageType(); switch (messageType) { case PUBLISH: this.publishesMetrics.mark(); break;//from w w w . j a v a 2 s. c om case SUBSCRIBE: this.subscribeMetrics.mark(); break; case CONNECT: this.connectedClientsMetrics.inc(); break; case DISCONNECT: this.connectedClientsMetrics.dec(); break; default: break; } ctx.fireChannelRead(message); }
From source file:io.moquette.Utils.java
License:Open Source License
static byte encodeFlags(MqttMessage message) { byte flags = 0; if (message.fixedHeader().isDup()) { flags |= 0x08;// w w w. j a v a2 s . c om } if (message.fixedHeader().isRetain()) { flags |= 0x01; } flags |= (message.fixedHeader().qosLevel().value() & 0x03) << 1; return flags; }
From source file:io.netty.example.mqtt.heartBeat.MqttHeartBeatBrokerHandler.java
License:Apache License
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { MqttMessage mqttMessage = (MqttMessage) msg; System.out.println("Received MQTT message: " + mqttMessage); switch (mqttMessage.fixedHeader().messageType()) { case CONNECT: MqttFixedHeader connackFixedHeader = new MqttFixedHeader(MqttMessageType.CONNACK, false, MqttQoS.AT_MOST_ONCE, false, 0); MqttConnAckVariableHeader mqttConnAckVariableHeader = new MqttConnAckVariableHeader( MqttConnectReturnCode.CONNECTION_ACCEPTED, false); MqttConnAckMessage connack = new MqttConnAckMessage(connackFixedHeader, mqttConnAckVariableHeader); ctx.writeAndFlush(connack);// w ww . jav a2 s. co m break; case PINGREQ: MqttFixedHeader pingreqFixedHeader = new MqttFixedHeader(MqttMessageType.PINGRESP, false, MqttQoS.AT_MOST_ONCE, false, 0); MqttMessage pingResp = new MqttMessage(pingreqFixedHeader); ctx.writeAndFlush(pingResp); break; case DISCONNECT: ctx.close(); break; default: System.out.println("Unexpected message type: " + mqttMessage.fixedHeader().messageType()); ReferenceCountUtil.release(msg); ctx.close(); } }
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 a va 2 s . com*/ */ 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. c om */ 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")); } } }