Example usage for org.apache.http.impl.io DefaultHttpRequestParser DefaultHttpRequestParser

List of usage examples for org.apache.http.impl.io DefaultHttpRequestParser DefaultHttpRequestParser

Introduction

In this page you can find the example usage for org.apache.http.impl.io DefaultHttpRequestParser DefaultHttpRequestParser.

Prototype

public DefaultHttpRequestParser(SessionInputBuffer sessionInputBuffer, LineParser lineParser,
            HttpRequestFactory httpRequestFactory, MessageConstraints messageConstraints) 

Source Link

Usage

From source file:org.commonjava.indy.httprox.handler.ProxyRequestReader.java

@Override
public void handleEvent(final ConduitStreamSourceChannel sourceChannel) {
    boolean sendResponse = false;
    try {//from w  w w .  j a  v  a 2 s  .c o  m
        final int read = doRead(sourceChannel);

        if (read <= 0) {
            logger.debug("Reads: {} ", read);
            return;
        }

        byte[] bytes = bReq.toByteArray();

        if (sslTunnel != null) {
            logger.debug("Send to ssl tunnel, {}, bytes:\n\n {}\n", new String(bytes),
                    Hex.encodeHexString(bytes));
            directTo(sslTunnel);
            return;
        }

        logger.debug("Request in progress is:\n\n{}", new String(bytes));

        if (headDone) {
            logger.debug("Request done. parsing.");
            MessageConstraints mc = MessageConstraints.DEFAULT;
            SessionInputBufferImpl inbuf = new SessionInputBufferImpl(new HttpTransportMetricsImpl(), 1024);
            HttpRequestFactory requestFactory = new DefaultHttpRequestFactory();
            LineParser lp = new BasicLineParser();

            DefaultHttpRequestParser requestParser = new DefaultHttpRequestParser(inbuf, lp, requestFactory,
                    mc);

            inbuf.bind(new ByteArrayInputStream(bytes));

            try {
                logger.debug("Passing parsed http request off to response writer.");
                HttpRequest request = requestParser.parse();
                logger.debug("Request contains {} header: '{}'", ApplicationHeader.authorization.key(),
                        request.getHeaders(ApplicationHeader.authorization.key()));

                writer.setHttpRequest(request);
                sendResponse = true;
            } catch (ConnectionClosedException e) {
                logger.warn("Client closed connection. Aborting proxy request.");
                sendResponse = false;
                sourceChannel.shutdownReads();
            } catch (HttpException e) {
                logger.error("Failed to parse http request: " + e.getMessage(), e);
                writer.setError(e);
            }
        } else {
            logger.debug("Request not finished. Pausing until more reads are available.");
            sourceChannel.resumeReads();
        }
    } catch (final IOException e) {
        writer.setError(e);
        sendResponse = true;
    }

    if (sendResponse) {
        sinkChannel.resumeWrites();
    }
}