List of usage examples for io.netty.handler.codec DecoderResult isFailure
public boolean isFailure()
From source file:io.advantageous.conekt.http.impl.ServerConnection.java
License:Open Source License
private void processMessage(Object msg) { if (msg instanceof HttpRequest) { HttpRequest request = (HttpRequest) msg; DecoderResult result = ((HttpObject) msg).getDecoderResult(); if (result.isFailure()) { channel.pipeline().fireExceptionCaught(result.cause()); return; }/* w ww.j a v a 2 s. com*/ if (server.options().isHandle100ContinueAutomatically()) { if (HttpHeaders.is100ContinueExpected(request)) { write100Continue(); } } HttpServerResponseImpl resp = new HttpServerResponseImpl(vertx, this, request); HttpServerRequestImpl req = new HttpServerRequestImpl(this, request, resp); handleRequest(req, resp); } if (msg instanceof HttpContent) { HttpContent chunk = (HttpContent) msg; if (chunk.content().isReadable()) { Buffer buff = Buffer.buffer(chunk.content()); handleChunk(buff); } //TODO chunk trailers if (msg instanceof LastHttpContent) { if (!paused) { handleEnd(); } else { // Requeue pending.add(LastHttpContent.EMPTY_LAST_CONTENT); } } } else if (msg instanceof WebSocketFrameInternal) { WebSocketFrameInternal frame = (WebSocketFrameInternal) msg; handleWsFrame(frame); } checkNextTick(); }
From source file:io.jsync.http.impl.AsyncHttpHandler.java
License:Open Source License
@Override protected void channelRead(final C connection, final DefaultContext context, final ChannelHandlerContext chctx, final Object msg) throws Exception { if (msg instanceof HttpObject) { DecoderResult result = ((HttpObject) msg).decoderResult(); if (result.isFailure()) { chctx.pipeline().fireExceptionCaught(result.cause()); return; }/*from w w w. j av a 2s . c om*/ } if (connection != null) { // we are reading from the channel Channel ch = chctx.channel(); // We need to do this since it's possible the server is being used from a worker context if (context.isOnCorrectWorker(ch.eventLoop())) { try { async.setContext(context); doMessageReceived(connection, chctx, msg); } catch (Throwable t) { context.reportException(t); } } else { context.execute(new Runnable() { public void run() { try { doMessageReceived(connection, chctx, msg); } catch (Throwable t) { context.reportException(t); } } }); } } else { try { doMessageReceived(connection, chctx, msg); } catch (Throwable t) { chctx.pipeline().fireExceptionCaught(t); } } }
From source file:io.vertx.core.http.impl.ClientHandler.java
License:Open Source License
@Override protected void doMessageReceived(ClientConnection conn, ChannelHandlerContext ctx, Object msg) { if (conn == null) { return;// ww w. j a va 2 s . c o m } if (msg instanceof HttpObject) { HttpObject obj = (HttpObject) msg; DecoderResult result = obj.decoderResult(); if (result.isFailure()) { // Close the connection as Netty's HttpResponseDecoder will not try further processing // see https://github.com/netty/netty/issues/3362 conn.handleException(result.cause()); conn.close(); return; } if (msg instanceof HttpResponse) { HttpResponse response = (HttpResponse) obj; conn.handleResponse(response); return; } if (msg instanceof HttpContent) { HttpContent chunk = (HttpContent) obj; if (chunk.content().isReadable()) { Buffer buff = Buffer.buffer(chunk.content().slice()); conn.handleResponseChunk(buff); } if (chunk instanceof LastHttpContent) { conn.handleResponseEnd((LastHttpContent) chunk); } return; } } else if (msg instanceof WebSocketFrameInternal) { WebSocketFrameInternal frame = (WebSocketFrameInternal) msg; switch (frame.type()) { case BINARY: case CONTINUATION: case TEXT: conn.handleWsFrame(frame); break; case PING: // Echo back the content of the PING frame as PONG frame as specified in RFC 6455 Section 5.5.2 ctx.writeAndFlush(new WebSocketFrameImpl(FrameType.PONG, frame.getBinaryData())); break; case PONG: // Just ignore it break; case CLOSE: if (!closeFrameSent) { // Echo back close frame and close the connection once it was written. // This is specified in the WebSockets RFC 6455 Section 5.4.1 ctx.writeAndFlush(frame).addListener(ChannelFutureListener.CLOSE); closeFrameSent = true; } break; default: throw new IllegalStateException("Invalid type: " + frame.type()); } return; } throw new IllegalStateException("Invalid object " + msg); }
From source file:io.vertx.core.http.impl.Http1xClientConnection.java
License:Open Source License
private Throwable validateMessage(Object msg) { if (msg instanceof HttpObject) { HttpObject obj = (HttpObject) msg; DecoderResult result = obj.decoderResult(); if (result.isFailure()) { return result.cause(); } else if (obj instanceof HttpResponse) { io.netty.handler.codec.http.HttpVersion version = ((HttpResponse) obj).protocolVersion(); if (version != io.netty.handler.codec.http.HttpVersion.HTTP_1_0 && version != io.netty.handler.codec.http.HttpVersion.HTTP_1_1) { return new IllegalStateException("Unsupported HTTP version: " + version); }/*from ww w . ja v a 2s . c o m*/ } } return null; }
From source file:io.vertx.core.http.impl.ServerConnection.java
License:Open Source License
private void processMessage(Object msg) { if (msg instanceof HttpObject) { HttpObject obj = (HttpObject) msg; DecoderResult result = obj.decoderResult(); if (result.isFailure()) { Throwable cause = result.cause(); if (cause instanceof TooLongFrameException) { String causeMsg = cause.getMessage(); HttpVersion version;//from ww w. j av a 2 s . c o m if (msg instanceof HttpRequest) { version = ((HttpRequest) msg).protocolVersion(); } else if (currentRequest != null) { version = currentRequest.version() == io.vertx.core.http.HttpVersion.HTTP_1_0 ? HttpVersion.HTTP_1_0 : HttpVersion.HTTP_1_1; } else { version = HttpVersion.HTTP_1_1; } HttpResponseStatus status = causeMsg.startsWith("An HTTP line is larger than") ? HttpResponseStatus.REQUEST_URI_TOO_LONG : HttpResponseStatus.BAD_REQUEST; DefaultFullHttpResponse resp = new DefaultFullHttpResponse(version, status); writeToChannel(resp); } // That will close the connection as it is considered as unusable channel.pipeline().fireExceptionCaught(result.cause()); return; } if (msg instanceof HttpRequest) { HttpRequest request = (HttpRequest) msg; if (server.options().isHandle100ContinueAutomatically()) { if (HttpHeaders.is100ContinueExpected(request)) { write100Continue(); } } HttpServerResponseImpl resp = new HttpServerResponseImpl(vertx, this, request); HttpServerRequestImpl req = new HttpServerRequestImpl(this, request, resp); handleRequest(req, resp); } if (msg instanceof HttpContent) { HttpContent chunk = (HttpContent) msg; if (chunk.content().isReadable()) { Buffer buff = Buffer.buffer(chunk.content()); handleChunk(buff); } //TODO chunk trailers if (msg instanceof LastHttpContent) { if (!paused) { handleEnd(); } else { // Requeue pending.add(LastHttpContent.EMPTY_LAST_CONTENT); } } } } else if (msg instanceof WebSocketFrameInternal) { WebSocketFrameInternal frame = (WebSocketFrameInternal) msg; handleWsFrame(frame); } checkNextTick(); }
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 ww w .ja v a 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/*w w w . j ava 2 s. c o 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/*from w w w .java 2 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:ozy.server.ServerHandler.java
License:Open Source License
@Override protected final void channelRead0(ChannelHandlerContext ctx, Object msg) { if (msg instanceof HttpObject) { HttpObject object = (HttpObject) msg; DecoderResult result = object.getDecoderResult(); if (result.isFailure()) { sendErrorMessage(ctx, INTERNAL_SERVER_ERROR, result.cause()); return; }// w ww .ja v a 2s. co m } if (msg instanceof HttpRequest) { _serviceRequest = new ServiceRequest(); _httpRequest = (HttpRequest) msg; _httpContentBuf.setLength(0); if (HttpHeaders.is100ContinueExpected(_httpRequest)) { send100Continue(ctx); } receiveHeader(); } if (msg instanceof HttpContent) { HttpContent next = (HttpContent) msg; receiveContent(next); if (next instanceof LastHttpContent) { LastHttpContent last = (LastHttpContent) next; receiveTrailer(last); routeRequest(ctx); } } }