|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.teleal.cling.transport.SwitchableRouterImpl
public class SwitchableRouterImpl
Default implementation of switchable network message router.
This implementation is actually wrapping a regular
RouterImpl
, making it on/off
switchable.
If the router can't be enabled (e.g. an exception occurs during
socket binding), a warning log message will be printed. You can customize this behavior by
overriding handleStartFailure(org.teleal.cling.transport.spi.InitializationException)
.
You have to expect that disable()
and @{link #enable()} will throw a
SwitchableRouterImpl.RouterLockAcquisitionException
. We do not manually abort ongoing HTTP stream
connections, they might block access to the underlying synchronized router instance
when you try to disable/enable it. However, the only situation in which you should get this
exception is when an the response from an HTTP server is taking longer than the timeout
of this classes' lock acquisition routine, see getLockTimeoutMillis()
. This
might be the case if the response is large and/or the network connection is slow, but
not slow enough to run into connection/data read timeouts.
Nested Class Summary | |
---|---|
static class |
SwitchableRouterImpl.RouterLockAcquisitionException
|
Field Summary | |
---|---|
protected Lock |
readLock
|
protected ReentrantReadWriteLock |
routerLock
|
protected Lock |
writeLock
|
Constructor Summary | |
---|---|
SwitchableRouterImpl(UpnpServiceConfiguration configuration,
ProtocolFactory protocolFactory)
|
Method Summary | |
---|---|
void |
broadcast(byte[] bytes)
Call this method to broadcast a UDP message to all hosts on the network. |
boolean |
disable()
|
boolean |
enable()
|
List<NetworkAddress> |
getActiveStreamServers(InetAddress preferredAddress)
|
UpnpServiceConfiguration |
getConfiguration()
|
protected int |
getLockTimeoutMillis()
|
NetworkAddressFactory |
getNetworkAddressFactory()
|
ProtocolFactory |
getProtocolFactory()
|
void |
handleStartFailure(InitializationException ex)
Called by the SwitchableRouter.enable() method before it returns. |
boolean |
isEnabled()
|
protected void |
lock(Lock lock)
|
protected void |
lock(Lock lock,
int timeoutMilliseconds)
|
void |
received(IncomingDatagramMessage msg)
This method is called internally by the transport layer when a datagram, either unicast or multicast, has been received. |
void |
received(UpnpStream stream)
This method is called internally by the transport layer when a TCP stream connection has been made and a response has to be returned to the sender. |
void |
send(OutgoingDatagramMessage msg)
Call this method to send a UDP datagram message. |
StreamResponseMessage |
send(StreamRequestMessage msg)
Call this method to send a TCP (HTTP) stream message. |
void |
shutdown()
Unbinds all sockets and stops all listening threads for datagrams and streams. |
protected void |
unlock(Lock lock)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected ReentrantReadWriteLock routerLock
protected Lock readLock
protected Lock writeLock
Constructor Detail |
---|
public SwitchableRouterImpl(UpnpServiceConfiguration configuration, ProtocolFactory protocolFactory)
Method Detail |
---|
public UpnpServiceConfiguration getConfiguration()
getConfiguration
in interface Router
public ProtocolFactory getProtocolFactory()
getProtocolFactory
in interface Router
public boolean isEnabled() throws SwitchableRouterImpl.RouterLockAcquisitionException
isEnabled
in interface SwitchableRouter
SwitchableRouterImpl.RouterLockAcquisitionException
public boolean enable() throws SwitchableRouterImpl.RouterLockAcquisitionException
enable
in interface SwitchableRouter
true
if the router was enabled. false
if it's already running.
SwitchableRouterImpl.RouterLockAcquisitionException
public void handleStartFailure(InitializationException ex)
SwitchableRouter
SwitchableRouter.enable()
method before it returns.
handleStartFailure
in interface SwitchableRouter
ex
- The cause of the failure.public boolean disable() throws SwitchableRouterImpl.RouterLockAcquisitionException
disable
in interface SwitchableRouter
true
if the router was disabled. false
if it wasn't running.
SwitchableRouterImpl.RouterLockAcquisitionException
public NetworkAddressFactory getNetworkAddressFactory() throws SwitchableRouterImpl.RouterLockAcquisitionException
getNetworkAddressFactory
in interface Router
SwitchableRouterImpl.RouterLockAcquisitionException
public List<NetworkAddress> getActiveStreamServers(InetAddress preferredAddress) throws SwitchableRouterImpl.RouterLockAcquisitionException
getActiveStreamServers
in interface Router
preferredAddress
- A preferred stream server bound address or null
.
SwitchableRouterImpl.RouterLockAcquisitionException
public void shutdown() throws SwitchableRouterImpl.RouterLockAcquisitionException
Router
shutdown
in interface Router
SwitchableRouterImpl.RouterLockAcquisitionException
public void received(IncomingDatagramMessage msg) throws SwitchableRouterImpl.RouterLockAcquisitionException
Router
This method is called internally by the transport layer when a datagram, either unicast or multicast, has been received. An implementation of this interface has to handle the received message, e.g. selecting and executing a UPnP protocol. This method should not block until the execution completes, the calling thread should be free to handle the next reception as soon as possible.
received
in interface Router
msg
- The received datagram message.
SwitchableRouterImpl.RouterLockAcquisitionException
public void received(UpnpStream stream) throws SwitchableRouterImpl.RouterLockAcquisitionException
Router
This method is called internally by the transport layer when a TCP stream connection has been made and a response has to be returned to the sender. An implementation of this interface has to handle the received stream connection and return a response, e.g. selecting and executing a UPnP protocol. This method should not block until the execution completes, the calling thread should be free to process the next reception as soon as possible. Typically this means starting a new thread of execution in this method.
received
in interface Router
SwitchableRouterImpl.RouterLockAcquisitionException
public void send(OutgoingDatagramMessage msg) throws SwitchableRouterImpl.RouterLockAcquisitionException
Router
Call this method to send a UDP datagram message.
send
in interface Router
msg
- The UDP datagram message to send.
SwitchableRouterImpl.RouterLockAcquisitionException
public StreamResponseMessage send(StreamRequestMessage msg) throws SwitchableRouterImpl.RouterLockAcquisitionException
Router
Call this method to send a TCP (HTTP) stream message.
send
in interface Router
msg
- The TCP (HTTP) stream message to send.
SwitchableRouterImpl.RouterLockAcquisitionException
public void broadcast(byte[] bytes) throws SwitchableRouterImpl.RouterLockAcquisitionException
Router
Call this method to broadcast a UDP message to all hosts on the network.
broadcast
in interface Router
bytes
- The byte payload of the UDP datagram.
SwitchableRouterImpl.RouterLockAcquisitionException
protected void lock(Lock lock, int timeoutMilliseconds) throws SwitchableRouterImpl.RouterLockAcquisitionException
SwitchableRouterImpl.RouterLockAcquisitionException
protected void lock(Lock lock) throws SwitchableRouterImpl.RouterLockAcquisitionException
SwitchableRouterImpl.RouterLockAcquisitionException
protected void unlock(Lock lock)
protected int getLockTimeoutMillis()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |