Class Protocol

  • Direct Known Subclasses:
    IMAPProtocol

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

    The Protocol object is multithread safe.

    • Constructor Summary

      Constructors 
      Constructor Description
      Protocol​(java.io.InputStream in, java.io.PrintStream out, java.util.Properties props, boolean debug)
      Constructor for debugging.
      Protocol​(java.lang.String host, int port, java.util.Properties props, java.lang.String prefix, boolean isSSL, MailLogger logger)
      Constructor.
    • Constructor Detail

      • Protocol

        public Protocol​(java.lang.String host,
                        int port,
                        java.util.Properties props,
                        java.lang.String prefix,
                        boolean isSSL,
                        MailLogger logger)
                 throws java.io.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:
        java.io.IOException - for I/O errors
        ProtocolException - for protocol failures
      • Protocol

        public Protocol​(java.io.InputStream in,
                        java.io.PrintStream out,
                        java.util.Properties props,
                        boolean debug)
                 throws java.io.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:
        java.io.IOException - for I/O errors
    • Method Detail

      • 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
      • 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
      • command

        public Response[] command​(java.lang.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​(java.lang.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​(java.lang.String cmd)
                      throws java.io.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:
        java.io.IOException - for I/O errors
        ProtocolException - for protocol failures
      • startCompression

        public void startCompression​(java.lang.String cmd)
                              throws java.io.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:
        java.io.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 java.net.InetAddress getInetAddress()
        Return the address the socket connected to.
        Returns:
        the InetAddress the socket is connected to
        Since:
        JavaMail 1.5.2
      • getChannel

        public java.nio.channels.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