public class AprSocketContext
extends java.lang.Object
| Modifier and Type | Class and Description |
|---|---|
private class |
AprSocketContext.AcceptorDispatchThread |
private class |
AprSocketContext.AcceptorThread |
(package private) class |
AprSocketContext.AprPoller |
static interface |
AprSocketContext.BlockingPollHandler
Callback for poll events, will be invoked in a thread pool.
|
static interface |
AprSocketContext.HostInfoLoader
Delegates loading of persistent info about a host - public certs,
tickets, config, persistent info etc.
|
static interface |
AprSocketContext.NonBlockingPollHandler
Additional callbacks for non-blocking.
|
static interface |
AprSocketContext.RawDataHandler
Called when a chunk of data is sent or received.
|
static interface |
AprSocketContext.TlsCertVerifier
Called in SSL mode after the handshake is completed.
|
| Modifier and Type | Field and Description |
|---|---|
private java.util.concurrent.BlockingQueue<AprSocket> |
acceptedQueue |
private AprSocketContext.AcceptorThread |
acceptor
For now - single acceptor thread per connector.
|
private AprSocketContext.AcceptorDispatchThread |
acceptorDispatch |
private int |
backlog |
private java.lang.String |
certFile |
(package private) java.util.concurrent.ExecutorService |
connectExecutor |
private java.util.concurrent.atomic.AtomicInteger |
connectionsCount
Total connections handled ( accepted or connected ).
|
(package private) int |
connectTimeout |
private int |
contextId |
private static java.util.concurrent.atomic.AtomicInteger |
contextNumber |
private boolean |
debugPoll |
(package private) boolean |
debugSSL |
(package private) int |
defaultTimeout |
private boolean |
deferAccept |
private AprSocket |
END |
private static int |
FALLBACK_POLL_TIME |
(package private) java.util.concurrent.atomic.AtomicLong |
handlerCount |
private AprSocketContext.HostInfoLoader |
hostInfoLoader |
private java.util.Map<java.lang.String,HostInfo> |
hosts |
(package private) int |
keepAliveTimeout |
private java.lang.String |
keyFile |
private static java.util.logging.Logger |
log |
private int |
maxConnections |
(package private) java.util.concurrent.atomic.AtomicLong |
maxHandlerTime
Max time spent in a callback ( will be longer for blocking )
|
private static java.io.IOException |
noApr |
private boolean |
nonBlockingAccept |
(package private) java.util.concurrent.atomic.AtomicInteger |
open |
private java.util.List<AprSocketContext.AprPoller> |
pollers
Pollers.
|
private int |
pollerThreadCount
Poller thread count.
|
private int |
pollTime
Poll interval, in microseconds.
|
(package private) AprSocketContext.RawDataHandler |
rawDataHandler |
private long |
rootPool
Root APR memory pool.
|
protected boolean |
running |
private static boolean |
sizeLogged |
private byte[] |
spdyNPN |
private java.lang.String |
SSLCipherSuite
SSL cipher suite.
|
private long |
sslCtx
SSL context.
|
protected boolean |
sslMode |
private int |
sslProtocol |
(package private) boolean |
tcpNoDelay |
private java.util.concurrent.atomic.AtomicInteger |
threadNumber |
private java.util.concurrent.ExecutorService |
threadPool |
private boolean |
threadSafe |
private byte[] |
ticketKey |
(package private) AprSocketContext.TlsCertVerifier |
tlsCertVerifier |
(package private) java.util.concurrent.atomic.AtomicLong |
totalHandlerTime |
(package private) boolean |
USE_TICKETS |
private boolean |
useSendfile |
| Constructor and Description |
|---|
AprSocketContext() |
| Modifier and Type | Method and Description |
|---|---|
(package private) AprSocketContext.AprPoller |
allocatePoller()
Create the poller.
|
protected long |
allocatePoller(int size,
long pool) |
(package private) void |
assignPoller(AprSocket ch) |
protected void |
connectBlocking(AprSocket apr) |
void |
customVerification(AprSocketContext.TlsCertVerifier verifier) |
(package private) void |
destroy() |
(package private) void |
destroySocket(AprSocket socket) |
protected void |
finalize()
To clean the pools - we could track if all channels are
closed, but this seems simpler and safer.
|
(package private) void |
findPollerAndAdd(AprSocket ch) |
int |
getBacklog() |
boolean |
getDeferAccept() |
protected java.util.concurrent.Executor |
getExecutor() |
HostInfo |
getHostInfo(java.lang.String host,
int port,
boolean ssl)
Override or use hostInfoLoader to implement persistent/memcache storage.
|
int |
getPollerThreadCount() |
private long |
getRootPool() |
java.lang.String |
getSSLCipherSuite() |
(package private) long |
getSslCtx() |
boolean |
isServer() |
void |
listen(int port) |
(package private) AprSocket |
newSocket(AprSocketContext context) |
protected void |
onSocket(AprSocket s)
Called on each accepted socket (for servers) or after connection (client)
after handshake.
|
protected void |
rawData(AprSocket ch,
boolean inp,
byte[] data,
int pos,
int len,
int requested,
boolean closed) |
void |
setBacklog(int backlog) |
void |
setDeferAccept(boolean deferAccept)
Defer accept.
|
void |
setHostLoader(AprSocketContext.HostInfoLoader handler) |
AprSocketContext |
setKeys(java.lang.String certPemFile,
java.lang.String keyDerFile)
Set certificate, will also enable TLS mode.
|
void |
setMaxconnections(int maxCon) |
void |
setNpn(byte[] data) |
void |
setNpn(java.lang.String npn)
For client:
- ClientHello will include the npn extension ( the ID == 0x3374)
- if ServerHello includes a list of protocols - select one
- send it after ChangeCipherSpec and before Finish
For server:
- if ClientHello includes the npn extension
-- will send this string as list of supported protocols in ServerHello
- read the selection before Finish.
|
void |
setPollerThreadCount(int pollerThreadCount) |
void |
setSSLCipherSuite(java.lang.String SSLCipherSuite) |
void |
setSslProtocol(java.lang.String protocol) |
void |
setTcpNoDelay(boolean b) |
void |
setTicketKey(byte[] key48Bytes) |
AprSocketContext |
setTls()
All accepted/connected sockets will start handshake automatically.
|
AprSocket |
socket(HostInfo hi) |
AprSocket |
socket(long socket) |
AprSocket |
socket(java.lang.String host,
int port,
boolean ssl)
Get a socket for connectiong to host:port.
|
void |
stop() |
private static final java.util.logging.Logger log
private static final int FALLBACK_POLL_TIME
boolean USE_TICKETS
private final AprSocket END
private static final java.util.concurrent.atomic.AtomicInteger contextNumber
private int contextId
private final java.util.concurrent.atomic.AtomicInteger threadNumber
private AprSocketContext.AcceptorThread acceptor
private AprSocketContext.AcceptorDispatchThread acceptorDispatch
private boolean threadSafe
private final java.util.List<AprSocketContext.AprPoller> pollers
boolean tcpNoDelay
protected boolean running
protected boolean sslMode
private boolean nonBlockingAccept
private final java.util.concurrent.BlockingQueue<AprSocket> acceptedQueue
private long rootPool
private long sslCtx
AprSocketContext.TlsCertVerifier tlsCertVerifier
final int connectTimeout
final int defaultTimeout
final int keepAliveTimeout
final java.util.concurrent.atomic.AtomicInteger open
private int pollTime
private AprSocketContext.HostInfoLoader hostInfoLoader
final AprSocketContext.RawDataHandler rawDataHandler
private final java.util.Map<java.lang.String,HostInfo> hosts
private java.lang.String certFile
private java.lang.String keyFile
private byte[] spdyNPN
private byte[] ticketKey
private java.util.concurrent.ExecutorService threadPool
final java.util.concurrent.ExecutorService connectExecutor
final boolean debugSSL
private boolean debugPoll
private boolean deferAccept
private int backlog
private boolean useSendfile
private int sslProtocol
final java.util.concurrent.atomic.AtomicLong maxHandlerTime
final java.util.concurrent.atomic.AtomicLong totalHandlerTime
final java.util.concurrent.atomic.AtomicLong handlerCount
private final java.util.concurrent.atomic.AtomicInteger connectionsCount
private int pollerThreadCount
private int maxConnections
private java.lang.String SSLCipherSuite
private static java.io.IOException noApr
private static boolean sizeLogged
public void setPollerThreadCount(int pollerThreadCount)
public int getPollerThreadCount()
public void setMaxconnections(int maxCon)
public void setBacklog(int backlog)
public int getBacklog()
public void setDeferAccept(boolean deferAccept)
public boolean getDeferAccept()
public void setNpn(java.lang.String npn)
npn - public void setNpn(byte[] data)
public void setHostLoader(AprSocketContext.HostInfoLoader handler)
public boolean isServer()
protected java.util.concurrent.Executor getExecutor()
public AprSocketContext setTls()
public void setTcpNoDelay(boolean b)
public void setSslProtocol(java.lang.String protocol)
public void setTicketKey(byte[] key48Bytes)
public void customVerification(AprSocketContext.TlsCertVerifier verifier)
public AprSocketContext setKeys(java.lang.String certPemFile, java.lang.String keyDerFile)
public java.lang.String getSSLCipherSuite()
public void setSSLCipherSuite(java.lang.String SSLCipherSuite)
public HostInfo getHostInfo(java.lang.String host, int port, boolean ssl)
protected void rawData(AprSocket ch, boolean inp, byte[] data, int pos, int len, int requested, boolean closed)
public void listen(int port)
throws java.io.IOException
java.io.IOExceptionpublic AprSocket socket(java.lang.String host, int port, boolean ssl)
public AprSocket socket(long socket)
void destroySocket(AprSocket socket)
protected void connectBlocking(AprSocket apr) throws java.io.IOException
java.io.IOExceptionAprSocket newSocket(AprSocketContext context)
protected void finalize()
finalize in class java.lang.Objectpublic void stop()
void destroy()
private long getRootPool()
throws java.io.IOException
java.io.IOExceptionlong getSslCtx()
throws java.lang.Exception
java.lang.Exceptionvoid findPollerAndAdd(AprSocket ch) throws java.io.IOException
java.io.IOExceptionvoid assignPoller(AprSocket ch) throws java.io.IOException
java.io.IOExceptionprotected void onSocket(AprSocket s)
AprSocketContext.AprPoller allocatePoller() throws java.io.IOException
java.io.IOExceptionprotected long allocatePoller(int size,
long pool)