View Javadoc

    1   //========================================================================
    2   //$Id: StreamEndPoint.java,v 1.1 2005/10/05 14:09:39 janb Exp $
    3   //Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
    4   //------------------------------------------------------------------------
    5   //Licensed under the Apache License, Version 2.0 (the "License");
    6   //you may not use this file except in compliance with the License.
    7   //You may obtain a copy of the License at
    8   //http://www.apache.org/licenses/LICENSE-2.0
    9   //Unless required by applicable law or agreed to in writing, software
    10  //distributed under the License is distributed on an "AS IS" BASIS,
    11  //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  //See the License for the specific language governing permissions and
    13  //limitations under the License.
    14  //========================================================================
    15
    16
    17  package org.mortbay.io.bio;
    18
    19  import java.io.IOException;
    20  import java.io.InputStream;
    21  import java.io.OutputStream;
    22
    23  import org.mortbay.io.Buffer;
    24  import org.mortbay.io.EndPoint;
    25
    26  /**
    27   * @author gregw
    28   *
    29   * To change the template for this generated type comment go to
    30   * Window - Preferences - Java - Code Generation - Code and Comments
    31   */
    32  public class StreamEndPoint implements EndPoint
    33  {
    34      InputStream _in;
    35      OutputStream _out;
    36
    37      /**
    38       *
    39       */
    40      public StreamEndPoint(InputStream in, OutputStream out)
    41      {
    42          _in=in;
    43          _out=out;
    44      }
    45
    46      public boolean isBlocking()
    47      {
    48          return true;
    49      }
    50
    51      public boolean blockReadable(long millisecs) throws IOException
    52      {
    53          return true;
    54      }
    55
    56      public boolean blockWritable(long millisecs) throws IOException
    57      {
    58          return true;
    59      }
    60
    61      /*
    62       * @see org.mortbay.io.BufferIO#isOpen()
    63       */
    64      public boolean isOpen()
    65      {
    66          return _in!=null;
    67      }
    68
    69      /*
    70       * @see org.mortbay.io.BufferIO#isOpen()
    71       */
    72      public final boolean isClosed()
    73      {
    74          return !isOpen();
    75      }
    76
    77      /*
    78       * @see org.mortbay.io.BufferIO#close()
    79       */
    80      public void close() throws IOException
    81      {
    82          if (_in!=null)
    83              _in.close();
    84          _in=null;
    85          if (_out!=null)
    86              _out.close();
    87          _out=null;
    88      }
    89
    90      /* (non-Javadoc)
    91       * @see org.mortbay.io.BufferIO#fill(org.mortbay.io.Buffer)
    92       */
    93      public int fill(Buffer buffer) throws IOException
    94      {
    95          // TODO handle null array()
    96          if (_in==null)
    97              return 0;
    98
    99      	int space=buffer.space();
    100     	if (space<=0)
    101     	{
    102     	    if (buffer.hasContent())
    103     	        return 0;
    104     	    throw new IOException("FULL");
    105     	}
    106
    107         int len = buffer.readFrom(_in,space);
    108
    109     	return len;
    110     }
    111
    112     /* (non-Javadoc)
    113      * @see org.mortbay.io.BufferIO#flush(org.mortbay.io.Buffer)
    114      */
    115     public int flush(Buffer buffer) throws IOException
    116     {
    117         // TODO handle null array()
    118         if (_out==null)
    119             return -1;
    120         int length=buffer.length();
    121         if (length>0)
    122             buffer.writeTo(_out);
    123         buffer.clear();
    124         return length;
    125     }
    126
    127     /* (non-Javadoc)
    128      * @see org.mortbay.io.BufferIO#flush(org.mortbay.io.Buffer, org.mortbay.io.Buffer, org.mortbay.io.Buffer)
    129      */
    130     public int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException
    131     {
    132         int len=0;
    133
    134         // TODO  consider copying buffer and trailer into header if there is space.
    135
    136
    137         if (header!=null)
    138         {
    139             int tw=header.length();
    140             if (tw>0)
    141             {
    142                 int f=flush(header);
    143                 len=f;
    144                 if (f<tw)
    145                     return len;
    146             }
    147         }
    148
    149         if (buffer!=null)
    150         {
    151             int tw=buffer.length();
    152             if (tw>0)
    153             {
    154                 int f=flush(buffer);
    155                 if (f<0)
    156                     return len>0?len:f;
    157                 len+=f;
    158                 if (f<tw)
    159                     return len;
    160             }
    161         }
    162
    163         if (trailer!=null)
    164         {
    165             int tw=trailer.length();
    166             if (tw>0)
    167             {
    168                 int f=flush(trailer);
    169                 if (f<0)
    170                     return len>0?len:f;
    171                 len+=f;
    172             }
    173         }
    174         return len;
    175     }
    176
    177     /* ------------------------------------------------------------ */
    178     /*
    179      * @see org.mortbay.io.EndPoint#getLocalAddr()
    180      */
    181     public String getLocalAddr()
    182     {
    183         return null;
    184     }
    185
    186     /* ------------------------------------------------------------ */
    187     /*
    188      * @see org.mortbay.io.EndPoint#getLocalHost()
    189      */
    190     public String getLocalHost()
    191     {
    192         return null;
    193     }
    194
    195     /* ------------------------------------------------------------ */
    196     /*
    197      * @see org.mortbay.io.EndPoint#getLocalPort()
    198      */
    199     public int getLocalPort()
    200     {
    201         return 0;
    202     }
    203
    204     /* ------------------------------------------------------------ */
    205     /*
    206      * @see org.mortbay.io.EndPoint#getRemoteAddr()
    207      */
    208     public String getRemoteAddr()
    209     {
    210         return null;
    211     }
    212
    213     /* ------------------------------------------------------------ */
    214     /*
    215      * @see org.mortbay.io.EndPoint#getRemoteHost()
    216      */
    217     public String getRemoteHost()
    218     {
    219         return null;
    220     }
    221
    222     /* ------------------------------------------------------------ */
    223     /*
    224      * @see org.mortbay.io.EndPoint#getRemotePort()
    225      */
    226     public int getRemotePort()
    227     {
    228         return 0;
    229     }
    230
    231     /* ------------------------------------------------------------ */
    232     /*
    233      * @see org.mortbay.io.EndPoint#getConnection()
    234      */
    235     public Object getTransport()
    236     {
    237         return null;
    238     }
    239
    240     /* ------------------------------------------------------------ */
    241     public InputStream getInputStream()
    242     {
    243         return _in;
    244     }
    245
    246     /* ------------------------------------------------------------ */
    247     public void setInputStream(InputStream in)
    248     {
    249         _in=in;
    250     }
    251
    252     /* ------------------------------------------------------------ */
    253     public OutputStream getOutputStream()
    254     {
    255         return _out;
    256     }
    257
    258     /* ------------------------------------------------------------ */
    259     public void setOutputStream(OutputStream out)
    260     {
    261         _out=out;
    262     }
    263
    264
    265     /* ------------------------------------------------------------ */
    266     public void flush()
    267         throws IOException
    268     {
    269         _out.flush();
    270     }
    271
    272     /* ------------------------------------------------------------ */
    273     public boolean isBufferingInput()
    274     {
    275         return false;
    276     }
    277
    278     /* ------------------------------------------------------------ */
    279     public boolean isBufferingOutput()
    280     {
    281         return false;
    282     }
    283
    284     /* ------------------------------------------------------------ */
    285     public boolean isBufferred()
    286     {
    287         return false;
    288     }
    289
    290 }