Mercurial Hosting > luan
diff src/org/eclipse/jetty/io/bio/StreamEndPoint.java @ 802:3428c60d7cfc
replace jetty jars with source
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 07 Sep 2016 21:15:48 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/org/eclipse/jetty/io/bio/StreamEndPoint.java Wed Sep 07 21:15:48 2016 -0600 @@ -0,0 +1,325 @@ +// +// ======================================================================== +// 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.io.bio; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.SocketTimeoutException; + +import org.eclipse.jetty.io.Buffer; +import org.eclipse.jetty.io.EndPoint; + +public class StreamEndPoint implements EndPoint +{ + InputStream _in; + OutputStream _out; + int _maxIdleTime; + boolean _ishut; + boolean _oshut; + + /** + * + */ + public StreamEndPoint(InputStream in, OutputStream out) + { + _in=in; + _out=out; + } + + public boolean isBlocking() + { + return true; + } + + public boolean blockReadable(long millisecs) throws IOException + { + return true; + } + + public boolean blockWritable(long millisecs) throws IOException + { + return true; + } + + /* + * @see org.eclipse.io.BufferIO#isOpen() + */ + public boolean isOpen() + { + return _in!=null; + } + + /* + * @see org.eclipse.io.BufferIO#isOpen() + */ + public final boolean isClosed() + { + return !isOpen(); + } + + public void shutdownOutput() throws IOException + { + _oshut = true; + if (_ishut && _out!=null) + _out.close(); + } + + public boolean isInputShutdown() + { + return _ishut; + } + + public void shutdownInput() throws IOException + { + _ishut = true; + if (_oshut&&_in!=null) + _in.close(); + } + + public boolean isOutputShutdown() + { + return _oshut; + } + + /* + * @see org.eclipse.io.BufferIO#close() + */ + public void close() throws IOException + { + if (_in!=null) + _in.close(); + _in=null; + if (_out!=null) + _out.close(); + _out=null; + } + + protected void idleExpired() throws IOException + { + if (_in!=null) + _in.close(); + } + + /* (non-Javadoc) + * @see org.eclipse.io.BufferIO#fill(org.eclipse.io.Buffer) + */ + public int fill(Buffer buffer) throws IOException + { + if (_ishut) + return -1; + if (_in==null) + return 0; + + int space=buffer.space(); + if (space<=0) + { + if (buffer.hasContent()) + return 0; + throw new IOException("FULL"); + } + + try + { + int filled=buffer.readFrom(_in, space); + if (filled<0) + shutdownInput(); + return filled; + } + catch(SocketTimeoutException e) + { + idleExpired(); + return -1; + } + } + + /* (non-Javadoc) + * @see org.eclipse.io.BufferIO#flush(org.eclipse.io.Buffer) + */ + public int flush(Buffer buffer) throws IOException + { + if (_oshut) + return -1; + if (_out==null) + return 0; + int length=buffer.length(); + if (length>0) + buffer.writeTo(_out); + if (!buffer.isImmutable()) + buffer.clear(); + return length; + } + + /* (non-Javadoc) + * @see org.eclipse.io.BufferIO#flush(org.eclipse.io.Buffer, org.eclipse.io.Buffer, org.eclipse.io.Buffer) + */ + public int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException + { + int len=0; + + if (header!=null) + { + int tw=header.length(); + if (tw>0) + { + int f=flush(header); + len=f; + if (f<tw) + return len; + } + } + + if (buffer!=null) + { + int tw=buffer.length(); + if (tw>0) + { + int f=flush(buffer); + if (f<0) + return len>0?len:f; + len+=f; + if (f<tw) + return len; + } + } + + if (trailer!=null) + { + int tw=trailer.length(); + if (tw>0) + { + int f=flush(trailer); + if (f<0) + return len>0?len:f; + len+=f; + } + } + return len; + } + + /* ------------------------------------------------------------ */ + /* + * @see org.eclipse.io.EndPoint#getLocalAddr() + */ + public String getLocalAddr() + { + return null; + } + + /* ------------------------------------------------------------ */ + /* + * @see org.eclipse.io.EndPoint#getLocalHost() + */ + public String getLocalHost() + { + return null; + } + + /* ------------------------------------------------------------ */ + /* + * @see org.eclipse.io.EndPoint#getLocalPort() + */ + public int getLocalPort() + { + return 0; + } + + /* ------------------------------------------------------------ */ + /* + * @see org.eclipse.io.EndPoint#getRemoteAddr() + */ + public String getRemoteAddr() + { + return null; + } + + /* ------------------------------------------------------------ */ + /* + * @see org.eclipse.io.EndPoint#getRemoteHost() + */ + public String getRemoteHost() + { + return null; + } + + /* ------------------------------------------------------------ */ + /* + * @see org.eclipse.io.EndPoint#getRemotePort() + */ + public int getRemotePort() + { + return 0; + } + + /* ------------------------------------------------------------ */ + /* + * @see org.eclipse.io.EndPoint#getConnection() + */ + public Object getTransport() + { + return null; + } + + /* ------------------------------------------------------------ */ + public InputStream getInputStream() + { + return _in; + } + + /* ------------------------------------------------------------ */ + public void setInputStream(InputStream in) + { + _in=in; + } + + /* ------------------------------------------------------------ */ + public OutputStream getOutputStream() + { + return _out; + } + + /* ------------------------------------------------------------ */ + public void setOutputStream(OutputStream out) + { + _out=out; + } + + + /* ------------------------------------------------------------ */ + public void flush() + throws IOException + { + if (_out != null) + _out.flush(); + } + + /* ------------------------------------------------------------ */ + public int getMaxIdleTime() + { + return _maxIdleTime; + } + + /* ------------------------------------------------------------ */ + public void setMaxIdleTime(int timeMs) throws IOException + { + _maxIdleTime=timeMs; + } + +}