com.icegreen.greenmail.imap
Class ImapRequestLineReader

java.lang.Object
  extended by com.icegreen.greenmail.imap.ImapRequestLineReader

public class ImapRequestLineReader
extends Object

Wraps the client input reader with a bunch of convenience methods, allowing lookahead=1 on the underlying character stream. TODO need to look at encoding, and whether we should be wrapping an InputStream instead.

Version:
$Revision: 109034 $
Author:
Darrell DeBoer

Method Summary
 void commandContinuationRequest()
          Sends a server command continuation request '+' back to the client, requesting more data to be sent.
 char consume()
          Consumes the current character in the reader, so that subsequent calls to the request will provide a new character.
 void consumeLine()
           
 void eol()
          Moves the request line reader to end of the line, checking that no non-space character are found.
 char nextChar()
          Reads the next character in the current line.
 char nextWordChar()
          Reads the next regular, non-space character in the current line.
 void read(byte[] holder)
          Reads and consumes a number of characters from the underlying reader, filling the char array provided.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

nextWordChar

public char nextWordChar()
                  throws ProtocolException
Reads the next regular, non-space character in the current line. Spaces are skipped over, but end-of-line characters will cause a ProtocolException to be thrown. This method will continue to return the same character until the consume() method is called.

Returns:
The next non-space character.
Throws:
ProtocolException - If the end-of-line or end-of-stream is reached.

nextChar

public char nextChar()
              throws ProtocolException
Reads the next character in the current line. This method will continue to return the same character until the consume() method is called.

Returns:
The next character.
Throws:
ProtocolException - If the end-of-stream is reached.

eol

public void eol()
         throws ProtocolException
Moves the request line reader to end of the line, checking that no non-space character are found.

Throws:
ProtocolException - If more non-space tokens are found in this line, or the end-of-file is reached.

consume

public char consume()
             throws ProtocolException
Consumes the current character in the reader, so that subsequent calls to the request will provide a new character. This method does *not* read the new character, or check if such a character exists. If no current character has been seen, the method moves to the next character, consumes it, and moves on to the subsequent one.

Throws:
ProtocolException - if a the current character can't be obtained (eg we're at end-of-file).

read

public void read(byte[] holder)
          throws ProtocolException
Reads and consumes a number of characters from the underlying reader, filling the char array provided.

Parameters:
holder - A char array which will be filled with chars read from the underlying reader.
Throws:
ProtocolException - If a char can't be read into each array element.

commandContinuationRequest

public void commandContinuationRequest()
                                throws ProtocolException
Sends a server command continuation request '+' back to the client, requesting more data to be sent.

Throws:
ProtocolException

consumeLine

public void consumeLine()
                 throws ProtocolException
Throws:
ProtocolException