private void writeInternal()

in zuul-core/src/main/java/com/netflix/zuul/netty/server/OriginResponseReceiver.java [210:254]


    private void writeInternal(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
        if (!ctx.channel().isActive()) {
            ReferenceCountUtil.release(msg);
            return;
        }

        if (msg instanceof HttpRequestMessage) {
            promise.addListener((future) -> {
                if (!future.isSuccess()) {
                    Throwable cause = ctx.channel()
                            .attr(SSL_HANDSHAKE_UNSUCCESS_FROM_ORIGIN_THROWABLE)
                            .get();
                    if (cause != null) {
                        // Set the specific SSL handshake error if the handlers have already caught them
                        ctx.channel()
                                .attr(SSL_HANDSHAKE_UNSUCCESS_FROM_ORIGIN_THROWABLE)
                                .set(null);
                        fireWriteError("request headers", cause, ctx);
                        logger.debug(
                                "SSLException is overridden by SSLHandshakeException caught in handler level. Original"
                                        + " SSL exception message: ",
                                future.cause());
                    } else {
                        fireWriteError("request headers", future.cause(), ctx);
                    }
                }
            });

            HttpRequestMessage zuulReq = (HttpRequestMessage) msg;
            preWriteHook(ctx, zuulReq);

            super.write(ctx, buildOriginHttpRequest(zuulReq), promise);
        } else if (msg instanceof HttpContent) {
            promise.addListener((future) -> {
                if (!future.isSuccess()) {
                    fireWriteError("request content chunk", future.cause(), ctx);
                }
            });
            super.write(ctx, msg, promise);
        } else {
            // should never happen
            ReferenceCountUtil.release(msg);
            throw new ZuulException("Received invalid message from client", true);
        }
    }