Example usage for io.netty.handler.codec DecoderResult isFailure

List of usage examples for io.netty.handler.codec DecoderResult isFailure

Introduction

In this page you can find the example usage for io.netty.handler.codec DecoderResult isFailure.

Prototype

public boolean isFailure() 

Source Link

Usage

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);
        }
    }

}