All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vmware.xenon.common.http.netty.NettyFullHttpRequest Maven / Gradle / Ivy

There is a newer version: 1.6.18
Show newest version
/*
 * Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.  You may obtain a copy of
 * the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed
 * under the License is distributed on an "AS IS" BASIS, without warranties or
 * conditions of any kind, EITHER EXPRESS OR IMPLIED.  See the License for the
 * specific language governing permissions and limitations under the License.
 */

package com.vmware.xenon.common.http.netty;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.DefaultFullHttpRequest;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpVersion;

import com.vmware.xenon.common.Operation;

/**
 * We override DefaultFullHttpRequest so that later (in NettyHttpToHttp2Handler) we can figure
 * out what streamId to associate with our Operation, so that we can call the call the correct
 * completion handler when we get a response.
 *
 * Much of the code in here is copied from DefaultFullHttpRequest. The difference is the
 * addition of setOperation() and getOperation()
 *
 */
public class NettyFullHttpRequest extends DefaultFullHttpRequest {

    private Operation operation;

    public NettyFullHttpRequest(HttpVersion httpVersion, HttpMethod method, String uri) {
        super(httpVersion, method, uri);
    }

    public NettyFullHttpRequest(HttpVersion httpVersion, HttpMethod method, String uri, ByteBuf content) {
        super(httpVersion, method, uri, content);
    }

    public NettyFullHttpRequest(HttpVersion httpVersion, HttpMethod method, String uri,
                                  ByteBuf content, boolean validateHeaders) {
        super(httpVersion, method, uri, content, validateHeaders);
    }

    /**
     * Called by NettyHttpServiceClient: it knows the operation for this request, and later,
     * once we find the stream ID, we'll want to know which operation it was.
     */
    public void setOperation(Operation operation) {
        this.operation = operation;
    }

    /**
     * Called by NettyHttpToHttp2Handler so it can associate the stream ID with the operation
     */
    public Operation getOperation() {
        return this.operation;
    }

    private FullHttpRequest copy(boolean copyContent, ByteBuf newContent) {
        NettyFullHttpRequest copy = new NettyFullHttpRequest(
                protocolVersion(),
                method(),
                uri(),
                copyContent ? content().copy()
                        : newContent == null ? Unpooled.buffer(0) : newContent,
                false);
        copy.headers().set(headers());
        copy.trailingHeaders().set(trailingHeaders());
        return copy;
    }

    @Override
    public FullHttpRequest copy() {
        return copy(true, null);
    }

    @Override
    public FullHttpRequest duplicate() {
        DefaultFullHttpRequest duplicate = new NettyFullHttpRequest(
                protocolVersion(), method(), uri(), content().duplicate(), false);
        duplicate.headers().set(headers());
        duplicate.trailingHeaders().set(trailingHeaders());
        return duplicate;
    }

    /**
     * We override to avoid a Findbugs warning. We ignore the operation field on purpose.
     */

    @Override
    public boolean equals(Object other) {
        if (!(other instanceof NettyFullHttpRequest)) {
            return false;
        }

        return super.equals(other);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy