@Override
    public void handleEvent( final ConduitStreamSourceChannel sourceChannel )
    {
        boolean sendResponse = false;
        try
        {
            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();
        }
    }
@Override
    public void handleEvent( final ConduitStreamSourceChannel sourceChannel )
    {
        boolean sendResponse = false;
        try
        {
            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();
        }
    }
@ Override public void handleEvent ( final ConduitStreamSourceChannel sourceChannel ) { boolean sendResponse = false ; try { 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 ( ) ; } }
TODO: NONE of the request headers (except authorization) are passed through!
TODO : NONE of the request headers ( except authorization ) are passed through!