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

org.littleshoot.proxy.impl.ConnectionFlowStep Maven / Gradle / Ivy

Go to download

LittleProxy is a high performance HTTP proxy written in Java and using the Netty networking framework.

There is a newer version: 1.1.2
Show newest version
package org.littleshoot.proxy.impl;

import io.netty.util.concurrent.Future;

/**
 * Represents a phase in a {@link ConnectionFlow}.
 */
abstract class ConnectionFlowStep {
    private final ProxyConnectionLogger LOG;
    private final ProxyConnection connection;
    private final ConnectionState state;

    /**
     * Construct a new step in a connection flow.
     * 
     * @param connection
     *            the connection that we're working on
     * @param state
     *            the state that the connection will show while we're processing
     *            this step
     */
    ConnectionFlowStep(ProxyConnection connection,
            ConnectionState state) {
        super();
        this.connection = connection;
        this.state = state;
        this.LOG = connection.getLOG();
    }

    ProxyConnection getConnection() {
        return connection;
    }

    ConnectionState getState() {
        return state;
    }

    /**
     * Indicates whether or not to suppress the initial request. Defaults to
     * false, can be overridden.
     * 
     * @return
     */
    boolean shouldSuppressInitialRequest() {
        return false;
    }

    /**
     * 

* Indicates whether or not this step should be executed on the channel's * event loop. Defaults to true, can be overridden. *

* *

* If this step modifies the pipeline, for example by adding/removing * handlers, it's best to make it execute on the event loop. *

* * * @return */ boolean shouldExecuteOnEventLoop() { return true; } /** * Implement this method to actually do the work involved in this step of * the flow. * * @return */ protected abstract Future execute(); /** * When the flow determines that this step was successful, it calls into * this method. The default implementation simply continues with the flow. * Other implementations may choose to not continue and instead wait for a * message or something like that. * * @param flow */ void onSuccess(ConnectionFlow flow) { flow.advance(); } /** *

* Any messages that are read from the underlying connection while we're at * this step of the connection flow are passed to this method. *

* *

* The default implementation ignores the message and logs this, since we * weren't really expecting a message here. *

* *

* Some {@link ConnectionFlowStep}s do need to read the messages, so they * override this method as appropriate. *

* * @param flow * our {@link ConnectionFlow} * @param msg * the message read from the underlying connection */ void read(ConnectionFlow flow, Object msg) { LOG.debug("Received message while in the middle of connecting: {}", msg); } @Override public String toString() { return state.toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy