org.w3c.www.mux
Class MuxInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by org.w3c.www.mux.MuxInputStream
All Implemented Interfaces:
java.io.Closeable, MUX

public class MuxInputStream
extends java.io.InputStream
implements MUX


Field Summary
protected  int avail_credit
          Current available credit on that session.
protected  byte[] buffer
          This input stream associated buffer.
protected  int buflen
          The current buffer length.
protected  int bufptr
          The current buffer position.
protected  boolean closed
          Has this stream been closed ?
protected  int consumed_credit
          Currently consumed credits.
protected  java.lang.String errmsg
          Error message in case of error.
protected  int markptr
          The current mark within the input buffer, or -1.
protected  boolean pushpending
          Yet another push is pending from the reader thread.
protected  MuxSession session
          The MuxSession instance this input stream is attached to.
protected  org.w3c.www.mux.MuxWriter writer
          A quick reference to that session writer.
 
Fields inherited from interface org.w3c.www.mux.MUX
CONTROL, CTRL_CODE, CTRL_DEFINE_STACK, CTRL_DEFINE_STRING, CTRL_MUX_CONTROL, CTRL_SEND_CREDIT, FIN, LENGTH, LONG_LENGTH, MAX_SESSION, PUSH, READER_BUFFER_SIZE, RECEIVER_DEFAULT_CREDIT, RST, SENDER_DEFAULT_CREDIT, SENDER_DEFAULT_FRAGMENT_SIZE, SESSION, SESSIONS_INCR, SYN, WRITER_BUFFER_SIZE
 
Constructor Summary
protected MuxInputStream(MuxSession session)
          Create an input stream to read data from the given session.
 
Method Summary
 int available()
          Get the number of available bytes on that stream.
 void close()
          Close that input stream.
protected  void error(java.lang.String msg)
          Notify that stream of some error condition.
 void mark(int readlimit)
          Set a mark in that input stream.
protected  void push(byte[] data, int off, int len, boolean noflush)
          Fill in that input stream with more data.
 int read()
          Read one byte of input from the stream.
 int read(byte[] b, int off, int len)
          Reads into an array of bytes.
 void reset()
          Reset buffer to last mark.
 
Methods inherited from class java.io.InputStream
markSupported, read, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

session

protected MuxSession session
The MuxSession instance this input stream is attached to.


writer

protected org.w3c.www.mux.MuxWriter writer
A quick reference to that session writer.


buffer

protected byte[] buffer
This input stream associated buffer.


bufptr

protected int bufptr
The current buffer position.


markptr

protected int markptr
The current mark within the input buffer, or -1.


buflen

protected int buflen
The current buffer length.


closed

protected boolean closed
Has this stream been closed ?


consumed_credit

protected int consumed_credit
Currently consumed credits.


avail_credit

protected int avail_credit
Current available credit on that session.


pushpending

protected boolean pushpending
Yet another push is pending from the reader thread.


errmsg

protected java.lang.String errmsg
Error message in case of error.

Constructor Detail

MuxInputStream

protected MuxInputStream(MuxSession session)
Create an input stream to read data from the given session.

Parameters:
session - The session to read data from.
Method Detail

push

protected void push(byte[] data,
                    int off,
                    int len,
                    boolean noflush)
             throws java.io.IOException
Fill in that input stream with more data. This method can only be called from within that package, typically by the session reader, to fill in the buffer.

Parameters:
data - The data read from the socket.
off - Offset of available data within above buffer.
len - Length of available data within above buffer.
noflush - Set to true if there is already more data available for that session.
Throws:
java.io.IOException

mark

public void mark(int readlimit)
Set a mark in that input stream.

Overrides:
mark in class java.io.InputStream
Parameters:
readlimit - The maximum limit of bytes allowed to be read before the mark becomes invalid.

reset

public void reset()
           throws java.io.IOException
Reset buffer to last mark.

Overrides:
reset in class java.io.InputStream
Throws:
java.io.IOException - If the mark has not been set, or if it is no longer valid.

error

protected void error(java.lang.String msg)
Notify that stream of some error condition. When an error condition is detected, all read accesses to the stream will result in an IOException being thrown, with as a message, the message provided here.

Parameters:
msg - Error message to be provided in any future IOException.

available

public int available()
              throws java.io.IOException
Get the number of available bytes on that stream.

Overrides:
available in class java.io.InputStream
Returns:
Number of bytes available.
Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Close that input stream.

Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.InputStream
Throws:
java.io.IOException - If some IO error occured during close.

read

public int read()
         throws java.io.IOException
Read one byte of input from the stream.

Specified by:
read in class java.io.InputStream
Returns:
The byte read, or -1 if end of stream.
Throws:
java.io.IOException - If an IO error has occured.

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Reads into an array of bytes. This method will block until some input is available.

Overrides:
read in class java.io.InputStream
Parameters:
b - the buffer into which the data is read
off - the start offset of the data
len - the maximum number of bytes read
Returns:
the actual number of bytes read, -1 is returned when the end of the stream is reached.
Throws:
java.io.IOException - If an I/O error has occurred.