FileDocCategorySizeDatePackage
SSLEngine.javaAPI DocAndroid 1.5 API19902Wed May 06 22:41:06 BST 2009javax.net.ssl

SSLEngine

public abstract class SSLEngine extends Object
The abstract implementation of secure communications using SSL, TLS, or other protocols. It includes the setup, handshake, and encrypt/decrypt functionality needed to create a secure connection.
since
Android 1.0

Fields Summary
private final String
host
private final int
port
Constructors Summary
protected SSLEngine()
Creates a new {@code SSLEngine} instance.

since
Android 1.0

        host = null;
        port = -1;
    
protected SSLEngine(String host, int port)
Creates a new {@code SSLEngine} instance with the specified host and port.

param
host the name of the host.
param
port the port of the host.
since
Android 1.0

        this.host = host;
        this.port = port;
    
Methods Summary
public abstract voidbeginHandshake()
Initiates a handshake on this engine.

Calling this method is not needed for the initial handshake: it will be called by {@code wrap} or {@code unwrap} if the initial handshake has not been started yet.

throws
SSLException if starting the handshake fails.
throws
IllegalStateException if the engine does not have all the needed settings (e.g. client/server mode not set).
since
Android 1.0

public abstract voidcloseInbound()
Notifies this engine instance that no more inbound network data will be sent to this engine.

throws
SSLException if this engine did not receive a needed protocol specific close notification message from the peer.
since
Android 1.0

public abstract voidcloseOutbound()
Notifies this engine instance that no more outbound application data will be sent to this engine.

since
Android 1.0

public abstract java.lang.RunnablegetDelegatedTask()
Returns a delegate task for this engine instance. Some engine operations may require the results of blocking or long running operations, and the {@code SSLEngineResult} instances returned by this engine may indicate that a delegated task result is needed. In this case the {@link Runnable#run() run} method of the returned {@code Runnable} delegated task must be called.

return
a delegate task, or {@code null} if none are available.
since
Android 1.0

public abstract booleangetEnableSessionCreation()
Returns whether new SSL sessions may be established by this engine.

return
{@code true} if new session may be established, {@code false} if existing sessions must be reused.
since
Android 1.0

public abstract java.lang.String[]getEnabledCipherSuites()
Returns the SSL cipher suite names that are enabled in this engine instance.

return
the SSL cipher suite names that are enabled in this engine instance.
since
Android 1.0

public abstract java.lang.String[]getEnabledProtocols()
Returns the protocol version names that are enabled in this engine instance.

return
the protocol version names that are enabled in this engine instance.
since
Android 1.0

public abstract javax.net.ssl.SSLEngineResult$HandshakeStatusgetHandshakeStatus()
Returns the status of the handshake of this engine instance.

return
the status of the handshake of this engine instance.
since
Android 1.0

public abstract booleangetNeedClientAuth()
Returns whether this engine instance will require client authentication.

return
{@code true} if this engine will require client authentication, {@code false} if no client authentication is needed.
since
Android 1.0

public java.lang.StringgetPeerHost()
Returns the name of the peer host.

return
the name of the peer host, or {@code null} if none is available.
since
Android 1.0

        return host;
    
public intgetPeerPort()
Returns the port number of the peer host.

return
the port number of the peer host, or {@code -1} is none is available.
since
Android 1.0

        return port;
    
public abstract javax.net.ssl.SSLSessiongetSession()
Returns the SSL session for this engine instance.

return
the SSL session for this engine instance.
since
Android 1.0

public abstract java.lang.String[]getSupportedCipherSuites()
Returns the SSL cipher suite names that are supported by this engine. These cipher suites can be enabled using {@link #setEnabledCipherSuites(String[])}.

return
the SSL cipher suite names that are supported by this engine.
since
Android 1.0

public abstract java.lang.String[]getSupportedProtocols()
Returns the protocol names that are supported by this engine. These protocols can be enables using {@link #setEnabledProtocols(String[])}.

return
the protocol names that are supported by this engine.
since
Android 1.0

public abstract booleangetUseClientMode()
Returns whether this engine is set to act in client mode when handshaking.

return
{@code true} if the engine is set to do handshaking in client mode.
since
Android 1.0

public abstract booleangetWantClientAuth()
Returns whether this engine will request client authentication.

return
{@code true} if client authentication will be requested, {@code false} otherwise.
since
Android 1.0

public abstract booleanisInboundDone()
Returns whether no more inbound data will be accepted by this engine.

return
{@code true} if no more inbound data will be accepted by this engine, {@code false} otherwise.
since
Android 1.0

public abstract booleanisOutboundDone()
Returns whether no more outbound data will be produced by this engine.

return
{@code true} if no more outbound data will be producted by this engine, {@code otherwise} false.
since
Android 1.0

public abstract voidsetEnableSessionCreation(boolean flag)
Sets whether new SSL sessions may be established by this engine instance.

param
flag {@code true} if new SSL sessions may be established, {@code false} if existing SSL sessions must be reused.
since
Android 1.0

public abstract voidsetEnabledCipherSuites(java.lang.String[] suites)
Sets the SSL cipher suite names that should be enabled in this engine instance. Only cipher suites listed by {@code getSupportedCipherSuites()} are allowed.

param
suites the SSL cipher suite names to be enabled.
throws
IllegalArgumentException if one of the specified cipher suites is not supported, or if {@code suites} is {@code null}.
since
Android 1.0

public abstract voidsetEnabledProtocols(java.lang.String[] protocols)
Sets the protocol version names that should be enabled in this engine instance. Only protocols listed by {@code getSupportedProtocols()} are allowed.

param
protocols the protocol version names to be enabled.
throws
IllegalArgumentException if one of the protocol version names is not supported, or if {@code protocols} is {@code null}.
since
Android 1.0

public abstract voidsetNeedClientAuth(boolean need)
Sets whether this engine must require client authentication. The client authentication is one of:
  • authentication required
  • authentication requested
  • no authentication needed
This method overrides the setting of {@link #setWantClientAuth(boolean)}.

param
need {@code true} if client authentication is required, {@code false} if no authentication is needed.
since
Android 1.0

public abstract voidsetUseClientMode(boolean mode)
Sets whether this engine should act in client (or server) mode when handshaking.

param
mode {@code true} if this engine should act in client mode, {@code false} if not.
throws
IllegalArgumentException if this method is called after starting the initial handshake.
since
Android 1.0

public abstract voidsetWantClientAuth(boolean want)
Sets whether this engine should request client authentication. The client authentication is one of the following:
  • authentication required
  • authentication requested
  • no authentication needed
This method overrides the setting of {@link #setNeedClientAuth(boolean)}.

param
want {@code true} if client authentication should be requested, {@code false} if no authentication is needed.
since
Android 1.0

public abstract javax.net.ssl.SSLEngineResultunwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer[] dsts, int offset, int length)
Decodes the incoming network data buffer into application data buffers. If a handshake has not been started yet, it will automatically be started.

param
src the buffer with incoming network data
param
dsts the array of destination buffers for incoming application data.
param
offset the offset in the array of destination buffers to which data is to be transferred.
param
length the maximum number of destination buffers to be used.
return
the result object of this operation.
throws
SSLException if a problem occurred while processing the data.
throws
IndexOutOfBoundsException if {@code length} is greater than {@code dsts.length - offset}.
throws
ReadOnlyBufferException if one of the destination buffers is read-only.
throws
IllegalArgumentException if {@code src}, {@code dsts}, or one of the entries in {@code dsts} is {@code null}.
throws
IllegalStateException if the engine does not have all the needed settings (e.g. client/server mode not set).
since
Android 1.0

public javax.net.ssl.SSLEngineResultunwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer dst)
Decodes the incoming network data buffer into the application data buffer. If a handshake has not been started yet, it will automatically be started.

param
src the buffer with incoming network data
param
dst the destination buffer for incoming application data.
return
the result object of this operation.
throws
SSLException if a problem occurred while processing the data.
throws
ReadOnlyBufferException if one of the destination buffers is read-only.
throws
IllegalArgumentException if {@code src} or {@code dst} is {@code null}.
throws
IllegalStateException if the engine does not have all the needed settings (e.g. client/server mode not set).
since
Android 1.0

//        if (src == null) {
//            throw new IllegalArgumentException("Byte buffer src is null");
//        }
//        if (dst == null) {
//            throw new IllegalArgumentException("Byte buffer dst is null");
//        }
//        if (dst.isReadOnly()) {
//            throw new ReadOnlyBufferException();
//        }
        return unwrap(src, new ByteBuffer[] { dst }, 0, 1);
    
public javax.net.ssl.SSLEngineResultunwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer[] dsts)
Decodes the incoming network data buffer into the application data buffers. If a handshake has not been started yet, it will automatically be started.

param
src the buffer with incoming network data
param
dsts the array of destination buffers for incoming application data.
return
the result object of this operation.
throws
SSLException if a problem occurred while processing the data.
throws
ReadOnlyBufferException if one of the destination buffers is read-only.
throws
IllegalArgumentException if {@code src} or {@code dsts} is {@code null}.
throws
IllegalStateException if the engine does not have all the needed settings (e.g. client/server mode not set).
since
Android 1.0

//        if (src == null) {
//            throw new IllegalArgumentException("Byte buffer src is null");
//        }
        if (dsts == null) {
            throw new IllegalArgumentException("Byte buffer array dsts is null");
        }
//        for (int i = 0; i < dsts.length; i++) {
//            if (dsts[i] == null) {
//                throw new IllegalArgumentException("Byte buffer dsts[" + i
//                        + "]  is null");
//            }
//            if (dsts[i].isReadOnly()) {
//                throw new ReadOnlyBufferException();
//            }
//        }
        return unwrap(src, dsts, 0, dsts.length);
    
public abstract javax.net.ssl.SSLEngineResultwrap(java.nio.ByteBuffer[] srcs, int offset, int length, java.nio.ByteBuffer dst)
Encodes the outgoing application data buffers into the network data buffer. If a handshake has not been started yet, it will automatically be started.

param
srcs the array of source buffers of outgoing application data.
param
offset the offset in the array of source buffers from which data is to be retrieved.
param
length the maximum number of source buffers to be used.
param
dst the destination buffer for network data.
return
the result object of this operation.
throws
SSLException if a problem occurred while processing the data.
throws
IndexOutOfBoundsException if {@code length} is greater than {@code srcs.length - offset}.
throws
ReadOnlyBufferException if the destination buffer is readonly.
throws
IllegalArgumentException if {@code srcs}, {@code dst}, or one the entries in {@code srcs} is {@code null}.
throws
IllegalStateException if the engine does not have all the needed settings (e.g. client/server mode not set).
since
Android 1.0

public javax.net.ssl.SSLEngineResultwrap(java.nio.ByteBuffer[] srcs, java.nio.ByteBuffer dst)
Encodes the outgoing application data buffers into the network data buffer. If a handshake has not been started yet, it will automatically be started.

param
srcs the array of source buffers of outgoing application data.
param
dst the destination buffer for network data.
return
the result object of this operation.
throws
SSLException if a problem occurred while processing the data.
throws
ReadOnlyBufferException if the destination buffer is readonly.
throws
IllegalArgumentException if {@code srcs} or {@code dst} is {@code null}.
throws
IllegalStateException if the engine does not have all the needed settings (e.g. client/server mode not set).
since
Android 1.0

        if (srcs == null) {
            throw new IllegalArgumentException("Byte buffer array srcs is null");
        }
//        for (int i = 0; i < srcs.length; i++) {
//            if (srcs[i] == null) {
//                throw new IllegalArgumentException("Byte buffer srcs[" + i
//                        + "]  is null");
//            }
//        }
//        if (dst == null) {
//            throw new IllegalArgumentException("Byte buffer array dst is null");
//        }
//        if (dst.isReadOnly()) {
//            throw new ReadOnlyBufferException();
//        }
        return wrap(srcs, 0, srcs.length, dst);
    
public javax.net.ssl.SSLEngineResultwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer dst)
Encodes the outgoing application data buffer into the network data buffer. If a handshake has not been started yet, it will automatically be started.

param
src the source buffers of outgoing application data.
param
dst the destination buffer for network data.
return
the result object of this operation.
throws
SSLException if a problem occurred while processing the data.
throws
ReadOnlyBufferException if the destination buffer is readonly.
throws
IllegalArgumentException if {@code src} or {@code dst} is {@code null}.
throws
IllegalStateException if the engine does not have all the needed settings (e.g. client/server mode not set).
since
Android 1.0

//        if (src == null) {
//            throw new IllegalArgumentException("Byte buffer src is null");
//        }
//        if (dst == null) {
//            throw new IllegalArgumentException("Byte buffer dst is null");
//        }
//        if (dst.isReadOnly()) {
//            throw new ReadOnlyBufferException();
//        }
        return wrap(new ByteBuffer[] { src }, 0, 1, dst);