Class Protocol

java.lang.Object
com.sun.mail.iap.Protocol
Direct Known Subclasses:
IMAPProtocol

public class Protocol extends Object
General protocol handling code for IMAP-like protocols.

The Protocol object is multithread safe.

  • Constructor Details

    • Protocol

      public Protocol(String host, int port, Properties props, String prefix, boolean isSSL, MailLogger logger) throws IOException, ProtocolException
      Constructor.

      Opens a connection to the given host at given port.

      Parameters:
      host - host to connect to
      port - portnumber to connect to
      props - Properties object used by this protocol
      prefix - Prefix to prepend to property keys
      isSSL - use SSL?
      logger - log messages here
      Throws:
      IOException - for I/O errors
      ProtocolException - for protocol failures
    • Protocol

      public Protocol(InputStream in, PrintStream out, Properties props, boolean debug) throws IOException
      Constructor for debugging.
      Parameters:
      in - the InputStream to read from
      out - the PrintStream to write to
      props - Properties object used by this protocol
      debug - true to enable debugging output
      Throws:
      IOException - for I/O errors
  • Method Details

    • getTimestamp

      public long getTimestamp()
      Returns the timestamp.
      Returns:
      the timestamp
    • addResponseHandler

      public void addResponseHandler(ResponseHandler h)
      Adds a response handler.
      Parameters:
      h - the response handler
    • removeResponseHandler

      public void removeResponseHandler(ResponseHandler h)
      Removed the specified response handler.
      Parameters:
      h - the response handler
    • notifyResponseHandlers

      public void notifyResponseHandlers(Response[] responses)
      Notify response handlers
      Parameters:
      responses - the responses
    • readResponse

      public Response readResponse() throws IOException, ProtocolException
      Throws:
      IOException
      ProtocolException
    • hasResponse

      public boolean hasResponse()
      Is another response available in our buffer?
      Returns:
      true if another response is in the buffer
      Since:
      JavaMail 1.5.4
    • writeCommand

      public String writeCommand(String command, Argument args) throws IOException, ProtocolException
      Throws:
      IOException
      ProtocolException
    • command

      public Response[] command(String command, Argument args)
      Send a command to the server. Collect all responses until either the corresponding command completion response or a BYE response (indicating server failure). Return all the collected responses.
      Parameters:
      command - the command
      args - the arguments
      Returns:
      array of Response objects returned by the server
    • handleResult

      public void handleResult(Response response) throws ProtocolException
      Convenience routine to handle OK, NO, BAD and BYE responses.
      Parameters:
      response - the response
      Throws:
      ProtocolException - for protocol failures
    • simpleCommand

      public void simpleCommand(String cmd, Argument args) throws ProtocolException
      Convenience routine to handle simple IAP commands that do not have responses specific to that command.
      Parameters:
      cmd - the command
      args - the arguments
      Throws:
      ProtocolException - for protocol failures
    • startTLS

      public void startTLS(String cmd) throws IOException, ProtocolException
      Start TLS on the current connection. cmd is the command to issue to start TLS negotiation. If the command succeeds, we begin TLS negotiation. If the socket is already an SSLSocket this is a nop and the command is not issued.
      Parameters:
      cmd - the command to issue
      Throws:
      IOException - for I/O errors
      ProtocolException - for protocol failures
    • startCompression

      public void startCompression(String cmd) throws IOException, ProtocolException
      Start compression on the current connection. cmd is the command to issue to start compression. If the command succeeds, we begin compression.
      Parameters:
      cmd - the command to issue
      Throws:
      IOException - for I/O errors
      ProtocolException - for protocol failures
    • isSSL

      public boolean isSSL()
      Is this connection using an SSL socket?
      Returns:
      true if using SSL
      Since:
      JavaMail 1.4.6
    • getInetAddress

      public InetAddress getInetAddress()
      Return the address the socket connected to.
      Returns:
      the InetAddress the socket is connected to
      Since:
      JavaMail 1.5.2
    • getChannel

      public SocketChannel getChannel()
      Return the SocketChannel associated with this connection, if any.
      Returns:
      the SocketChannel
      Since:
      JavaMail 1.5.2
    • supportsUtf8

      public boolean supportsUtf8()
      Does the server support UTF-8? This implementation returns false. Subclasses should override as appropriate.
      Returns:
      true if the server supports UTF-8
      Since:
      JavaMail 1.6.0