Package org.java_websocket
Class SSLSocketChannel
- java.lang.Object
-
- org.java_websocket.SSLSocketChannel
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
,ByteChannel
,Channel
,ReadableByteChannel
,WritableByteChannel
,WrappedByteChannel
public class SSLSocketChannel extends Object implements WrappedByteChannel, ByteChannel
A class that represents an SSL/TLS peer, and can be extended to create a client or a server. It makes use of the JSSE framework, and specifically theSSLEngine
logic, which is described by Oracle as "an advanced API, not appropriate for casual use", since it requires the user to implement much of the communication establishment procedure himself. More information about it can be found here: http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SSLEngineSSLSocketChannel
implements the handshake protocol, required to establish a connection between two peers, which is common for both client and server and provides the abstractread(ByteBuffer)
andwrite(ByteBuffer)
(String)} methods, that need to be implemented by the specific SSL/TLS peer that is going to extend this class.- Author:
- Alex Karnezis
Modified by marci4 to allow the usage as a ByteChannel
Permission for usage recieved at May 25, 2017 by Alex Karnezis
-
-
Constructor Summary
Constructors Constructor Description SSLSocketChannel(SocketChannel inputSocketChannel, SSLEngine inputEngine, ExecutorService inputExecutor, SelectionKey key)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
boolean
isBlocking()
This function returns the blocking state of the channelboolean
isNeedRead()
returns whether readMore should be called to fetch data which has been decoded but not yet been returned.boolean
isNeedWrite()
returns whether writeMore should be called write additional data.boolean
isOpen()
int
read(ByteBuffer dst)
int
readMore(ByteBuffer dst)
This function does not read data from the underlying channel at all.int
write(ByteBuffer output)
void
writeMore()
Gets called whenWrappedByteChannel.isNeedWrite()
()} requires a additional rite
-
-
-
Constructor Detail
-
SSLSocketChannel
public SSLSocketChannel(SocketChannel inputSocketChannel, SSLEngine inputEngine, ExecutorService inputExecutor, SelectionKey key) throws IOException
- Throws:
IOException
-
-
Method Detail
-
read
public int read(ByteBuffer dst) throws IOException
- Specified by:
read
in interfaceReadableByteChannel
- Throws:
IOException
-
write
public int write(ByteBuffer output) throws IOException
- Specified by:
write
in interfaceWritableByteChannel
- Throws:
IOException
-
isNeedWrite
public boolean isNeedWrite()
Description copied from interface:WrappedByteChannel
returns whether writeMore should be called write additional data.- Specified by:
isNeedWrite
in interfaceWrappedByteChannel
- Returns:
- is a additional write needed
-
writeMore
public void writeMore() throws IOException
Description copied from interface:WrappedByteChannel
Gets called whenWrappedByteChannel.isNeedWrite()
()} requires a additional rite- Specified by:
writeMore
in interfaceWrappedByteChannel
- Throws:
IOException
- may be thrown due to an error while writing
-
isNeedRead
public boolean isNeedRead()
Description copied from interface:WrappedByteChannel
returns whether readMore should be called to fetch data which has been decoded but not yet been returned.- Specified by:
isNeedRead
in interfaceWrappedByteChannel
- Returns:
- is a additional read needed
- See Also:
ReadableByteChannel.read(ByteBuffer)
,WrappedByteChannel.readMore(ByteBuffer)
-
readMore
public int readMore(ByteBuffer dst) throws IOException
Description copied from interface:WrappedByteChannel
This function does not read data from the underlying channel at all. It is just a way to fetch data which has already be received or decoded but was but was not yet returned to the user. This could be the case when the decoded data did not fit into the buffer the user passed toReadableByteChannel.read(ByteBuffer)
.- Specified by:
readMore
in interfaceWrappedByteChannel
- Parameters:
dst
- the destiny of the read- Returns:
- the amount of remaining data
- Throws:
IOException
- when a error occurred during unwrapping
-
isBlocking
public boolean isBlocking()
Description copied from interface:WrappedByteChannel
This function returns the blocking state of the channel- Specified by:
isBlocking
in interfaceWrappedByteChannel
- Returns:
- is the channel blocking
-
close
public void close() throws IOException
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceChannel
- Specified by:
close
in interfaceCloseable
- Throws:
IOException
-
-