view src/org/eclipse/jetty/server/HttpInput.java @ 978:bdb6eb0fbf93

simplify ChannelEndPoint
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 16 Oct 2016 14:53:43 -0600
parents 5ee36654b383
children bd26bd9320e2
line wrap: on
line source

//
//  ========================================================================
//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
//  ------------------------------------------------------------------------
//  All rights reserved. This program and the accompanying materials
//  are made available under the terms of the Eclipse Public License v1.0
//  and Apache License v2.0 which accompanies this distribution.
//
//      The Eclipse Public License is available at
//      http://www.eclipse.org/legal/epl-v10.html
//
//      The Apache License v2.0 is available at
//      http://www.opensource.org/licenses/apache2.0.php
//
//  You may elect to redistribute this code under either of these licenses.
//  ========================================================================
//

package org.eclipse.jetty.server;

import java.io.IOException;

import javax.servlet.ServletInputStream;

import org.eclipse.jetty.http.HttpParser;
import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.io.EofException;

public class HttpInput extends ServletInputStream
{
	protected final AbstractHttpConnection _connection;
	protected final HttpParser _parser;

	public HttpInput(AbstractHttpConnection connection)
	{
		_connection = connection;
		_parser = connection._parser;
	}
	
	/* ------------------------------------------------------------ */
	/*
	 * @see java.io.InputStream#read()
	 */
	@Override
	public int read() throws IOException
	{
		byte[] bytes = new byte[1];
		int read = read(bytes, 0, 1);
		return read < 0 ? -1 : 0xff & bytes[0];
	}
	
	/* ------------------------------------------------------------ */
	/* 
	 * @see java.io.InputStream#read(byte[], int, int)
	 */
	@Override
	public int read(byte[] b, int off, int len) throws IOException
	{
		int l=-1;
		Buffer content=_parser.blockForContent(_connection.getMaxIdleTime());
		if (content!=null)
			l= content.get(b, off, len);
		else if (_connection.isEarlyEOF())
			throw new EofException("early EOF");
		return l;
	}

	/* ------------------------------------------------------------ */
	@Override
	public int available() throws IOException
	{
		return _parser.available();
	}
}