Class ConnectionAdapterImpl
- java.lang.Object
-
- org.opendaylight.openflowjava.protocol.impl.core.connection.ConnectionAdapterImpl
-
- All Implemented Interfaces:
ConnectionAdapter
,ConnectionFacade
,MessageConsumer
,OpenflowProtocolService
,org.opendaylight.yangtools.yang.binding.RpcService
public class ConnectionAdapterImpl extends Object implements ConnectionFacade
Handles messages (notifications + rpcs) and connections.- Author:
- mirehak, michal.polkorab
-
-
Field Summary
Fields Modifier and Type Field Description protected InetSocketAddress
address
protected io.netty.channel.Channel
channel
protected boolean
disconnectOccured
protected org.opendaylight.openflowjava.protocol.impl.core.connection.ChannelOutboundQueue
output
protected static com.google.common.cache.RemovalListener<RpcResponseKey,org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>>
REMOVAL_LISTENER
protected com.google.common.cache.Cache<RpcResponseKey,org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>>
responseCache
expiring cache for future rpcResponses.
-
Constructor Summary
Constructors Constructor Description ConnectionAdapterImpl(io.netty.channel.Channel channel, InetSocketAddress address, boolean useBarrier, int channelOutboundQueueSize)
Default constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<BarrierOutput>>
barrier(BarrierInput input)
Invokebarrier
RPC.void
checkListeners()
Throws exception if any of required listeners is missing.void
consume(org.opendaylight.yangtools.yang.binding.DataObject message)
Invoked to consume a message.void
consumeDeviceMessage(org.opendaylight.yangtools.yang.binding.DataObject message)
Method is equivalent toMessageConsumer.consume(DataObject)
to prevent missing method in every children ofAbstractConnectionAdapterStatistics
class, because we overriding original method forStatisticsCounters
.Future<Boolean>
disconnect()
Disconnect corresponding switch.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<EchoOutput>>
echo(EchoInput input)
Invokeecho
RPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<EchoReplyOutput>>
echoReply(EchoReplyInput input)
Invokeecho-reply
RPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<ExperimenterOutput>>
experimenter(ExperimenterInput input)
Invokeexperimenter
RPC.protected org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>
findRpcResponse(RpcResponseKey key)
Return cached RpcListener ornull
if not cached.void
fireConnectionReadyNotification()
Notify listener about connection ready-to-use event.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<FlowModOutput>>
flowMod(FlowModInput input)
Invokeflow-mod
RPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetAsyncOutput>>
getAsync(GetAsyncInput input)
Invokeget-async
RPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetConfigOutput>>
getConfig(GetConfigInput input)
Invokeget-config
RPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetFeaturesOutput>>
getFeatures(GetFeaturesInput input)
Invokeget-features
RPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetQueueConfigOutput>>
getQueueConfig(GetQueueConfigInput input)
Invokeget-queue-config
RPC.InetSocketAddress
getRemoteAddress()
Returns the address of the connected switch.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GroupModOutput>>
groupMod(GroupModInput input)
Invokegroup-mod
RPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<HelloOutput>>
hello(HelloInput input)
Invokehello
RPC.boolean
isAlive()
Determines if the connection to the switch is alive.boolean
isAutoRead()
Determines if the channel is configured to auto-read.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<MeterModOutput>>
meterMod(MeterModInput input)
Invokemeter-mod
RPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<MultipartRequestOutput>>
multipartRequest(MultipartRequestInput input)
Invokemultipart-request
RPC.void
onSwitchCertificateIdentified(List<X509Certificate> certificateChain)
Notify listener about switch certificate information.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<PacketOutOutput>>
packetOut(PacketOutInput input)
Invokepacket-out
RPC.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<PortModOutput>>
portMod(PortModInput input)
Invokeport-mod
RPC.<T extends OutboundQueueHandler>
OutboundQueueHandlerRegistration<T>registerOutboundQueueHandler(T handler, int maxQueueDepth, long maxBarrierNanos)
Registers a new bypass outbound queue.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<RoleRequestOutput>>
roleRequest(RoleRequestInput input)
Invokerole-request
RPC.protected <I extends OfHeader,O extends OfHeader>
com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<O>>sendToSwitchExpectRpcResultFuture(I input, Class<O> responseClazz, String failureInfo)
Sends given message to switch, sending result or switch response will be reported via return value.protected <O extends org.opendaylight.yangtools.yang.binding.DataObject>
com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<O>>sendToSwitchFuture(Object input, String failureInfo)
Sends given message to switch, sending result will be reported via return value.void
setAlienMessageListener(AlienMessageListener alienMessageListener)
Set handler for alien messages received from device.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<SetAsyncOutput>>
setAsync(SetAsyncInput input)
Invokeset-async
RPC.void
setAutoRead(boolean autoRead)
Sets option for automatic channel reading - if set to false, incoming messages won't be read.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<SetConfigOutput>>
setConfig(SetConfigInput input)
Invokeset-config
RPC.void
setConnectionReadyListener(ConnectionReadyListener connectionReadyListener)
Set listener for connection became ready-to-use event.void
setDatapathId(BigInteger datapathId)
Set datapathId for the dpn.void
setExecutorService(ExecutorService executorService)
Sets executorService.void
setMessageListener(OpenflowProtocolListener messageListener)
Sets the protocol message listener.void
setPacketInFiltering(boolean enabled)
Set filtering of PacketIn messages.void
setSystemListener(SystemNotificationsListener systemListener)
Sets the system message listener.com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<TableModOutput>>
tableMod(TableModInput input)
Invoketable-mod
RPC.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter
disconnect, getRemoteAddress, isAlive, isAutoRead, setAutoRead
-
Methods inherited from interface org.opendaylight.openflowjava.protocol.impl.core.connection.MessageConsumer
consume
-
Methods inherited from interface org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OpenflowProtocolService
barrier, echo, echoReply, experimenter, flowMod, getAsync, getConfig, getFeatures, getQueueConfig, groupMod, hello, meterMod, multipartRequest, packetOut, portMod, roleRequest, setAsync, setConfig, tableMod
-
-
-
-
Field Detail
-
REMOVAL_LISTENER
protected static final com.google.common.cache.RemovalListener<RpcResponseKey,org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>> REMOVAL_LISTENER
-
channel
protected final io.netty.channel.Channel channel
-
address
protected final InetSocketAddress address
-
disconnectOccured
protected boolean disconnectOccured
-
output
protected final org.opendaylight.openflowjava.protocol.impl.core.connection.ChannelOutboundQueue output
-
responseCache
protected com.google.common.cache.Cache<RpcResponseKey,org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?>> responseCache
expiring cache for future rpcResponses.
-
-
Constructor Detail
-
ConnectionAdapterImpl
public ConnectionAdapterImpl(io.netty.channel.Channel channel, InetSocketAddress address, boolean useBarrier, int channelOutboundQueueSize)
Default constructor.- Parameters:
channel
- the channel to be set - used for communicationaddress
- client address (used only in case of UDP communication, as there is no need to store address over tcp (stable channel))useBarrier
- value is configurable by configSubsytem
-
-
Method Detail
-
setMessageListener
public void setMessageListener(OpenflowProtocolListener messageListener)
Description copied from interface:ConnectionAdapter
Sets the protocol message listener.- Specified by:
setMessageListener
in interfaceConnectionAdapter
- Parameters:
messageListener
- here will be pushed all messages from switch
-
setConnectionReadyListener
public void setConnectionReadyListener(ConnectionReadyListener connectionReadyListener)
Description copied from interface:ConnectionAdapter
Set listener for connection became ready-to-use event.- Specified by:
setConnectionReadyListener
in interfaceConnectionAdapter
- Parameters:
connectionReadyListener
- listens to connection ready event
-
setSystemListener
public void setSystemListener(SystemNotificationsListener systemListener)
Description copied from interface:ConnectionAdapter
Sets the system message listener.- Specified by:
setSystemListener
in interfaceConnectionAdapter
- Parameters:
systemListener
- here will be pushed all system messages from library
-
setAlienMessageListener
public void setAlienMessageListener(AlienMessageListener alienMessageListener)
Description copied from interface:ConnectionAdapter
Set handler for alien messages received from device.- Specified by:
setAlienMessageListener
in interfaceConnectionAdapter
- Parameters:
alienMessageListener
- here will be pushed all alien messages from switch
-
consumeDeviceMessage
public void consumeDeviceMessage(org.opendaylight.yangtools.yang.binding.DataObject message)
Method is equivalent toMessageConsumer.consume(DataObject)
to prevent missing method in every children ofAbstractConnectionAdapterStatistics
class, because we overriding original method forStatisticsCounters
.- Parameters:
message
- from device to processing
-
checkListeners
public void checkListeners()
Description copied from interface:ConnectionAdapter
Throws exception if any of required listeners is missing.- Specified by:
checkListeners
in interfaceConnectionAdapter
-
fireConnectionReadyNotification
public void fireConnectionReadyNotification()
Description copied from interface:ConnectionAdapter
Notify listener about connection ready-to-use event.- Specified by:
fireConnectionReadyNotification
in interfaceConnectionAdapter
-
onSwitchCertificateIdentified
public void onSwitchCertificateIdentified(List<X509Certificate> certificateChain)
Description copied from interface:ConnectionAdapter
Notify listener about switch certificate information.- Specified by:
onSwitchCertificateIdentified
in interfaceConnectionAdapter
- Parameters:
certificateChain
- X509 certificate chain presented by the switch
-
registerOutboundQueueHandler
public <T extends OutboundQueueHandler> OutboundQueueHandlerRegistration<T> registerOutboundQueueHandler(T handler, int maxQueueDepth, long maxBarrierNanos)
Description copied from interface:ConnectionAdapter
Registers a new bypass outbound queue.- Specified by:
registerOutboundQueueHandler
in interfaceConnectionAdapter
- Type Parameters:
T
- handler type- Parameters:
handler
- queue handlermaxQueueDepth
- max amount of not confirmed messaged in queue (i.e. edge for barrier message)maxBarrierNanos
- regular base for barrier message- Returns:
- An
OutboundQueueHandlerRegistration
-
setPacketInFiltering
public void setPacketInFiltering(boolean enabled)
Description copied from interface:ConnectionAdapter
Set filtering of PacketIn messages. By default these messages are not filtered.- Specified by:
setPacketInFiltering
in interfaceConnectionAdapter
- Parameters:
enabled
- True if PacketIn messages should be filtered, false if they should be reported.
-
setDatapathId
public void setDatapathId(BigInteger datapathId)
Description copied from interface:ConnectionAdapter
Set datapathId for the dpn.- Specified by:
setDatapathId
in interfaceConnectionAdapter
- Parameters:
datapathId
- of the dpn
-
setExecutorService
public void setExecutorService(ExecutorService executorService)
Description copied from interface:ConnectionAdapter
Sets executorService.- Specified by:
setExecutorService
in interfaceConnectionAdapter
- Parameters:
executorService
- for all dpns
-
flowMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<FlowModOutput>> flowMod(FlowModInput input)
Description copied from interface:OpenflowProtocolService
Invokeflow-mod
RPC.- Specified by:
flowMod
in interfaceOpenflowProtocolService
- Parameters:
input
- offlow-mod
- Returns:
- output of
flow-mod
-
sendToSwitchExpectRpcResultFuture
protected <I extends OfHeader,O extends OfHeader> com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<O>> sendToSwitchExpectRpcResultFuture(I input, Class<O> responseClazz, String failureInfo)
Sends given message to switch, sending result or switch response will be reported via return value.- Parameters:
input
- message to sendresponseClazz
- type of responsefailureInfo
- describes, what type of message caused failure by sending- Returns:
- future object,
- if send fails,
RpcResult
will contain errors and failed status - else
RpcResult
will be stored in responseCache and wait for particular timeout (AbstractConnectionAdapter.RPC_RESPONSE_EXPIRATION
),- either switch will manage to answer and then corresponding response message will be set into returned future
- or response in cache will expire and returned future will be cancelled
- if send fails,
-
sendToSwitchFuture
protected <O extends org.opendaylight.yangtools.yang.binding.DataObject> com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<O>> sendToSwitchFuture(Object input, String failureInfo)
Sends given message to switch, sending result will be reported via return value.- Parameters:
input
- message to sendfailureInfo
- describes, what type of message caused failure by sending- Returns:
- future object,
- if send successful,
RpcResult
without errors and successful status will be returned, - else
RpcResult
will contain errors and failed status
- if send successful,
-
consume
public void consume(org.opendaylight.yangtools.yang.binding.DataObject message)
Description copied from interface:MessageConsumer
Invoked to consume a message.- Specified by:
consume
in interfaceMessageConsumer
- Parameters:
message
- to process
-
disconnect
public Future<Boolean> disconnect()
Description copied from interface:ConnectionAdapter
Disconnect corresponding switch.- Specified by:
disconnect
in interfaceConnectionAdapter
- Returns:
- future set to true, when disconnect completed
-
barrier
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<BarrierOutput>> barrier(BarrierInput input)
Description copied from interface:OpenflowProtocolService
Invokebarrier
RPC.- Specified by:
barrier
in interfaceOpenflowProtocolService
- Parameters:
input
- ofbarrier
- Returns:
- output of
barrier
-
echo
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<EchoOutput>> echo(EchoInput input)
Description copied from interface:OpenflowProtocolService
Invokeecho
RPC.- Specified by:
echo
in interfaceOpenflowProtocolService
- Parameters:
input
- ofecho
- Returns:
- output of
echo
-
echoReply
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<EchoReplyOutput>> echoReply(EchoReplyInput input)
Description copied from interface:OpenflowProtocolService
Invokeecho-reply
RPC.- Specified by:
echoReply
in interfaceOpenflowProtocolService
- Parameters:
input
- ofecho-reply
- Returns:
- output of
echo-reply
-
experimenter
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<ExperimenterOutput>> experimenter(ExperimenterInput input)
Description copied from interface:OpenflowProtocolService
Invokeexperimenter
RPC.Send experimenter message to device, reply is not solicitated.
- Specified by:
experimenter
in interfaceOpenflowProtocolService
- Parameters:
input
- ofexperimenter
- Returns:
- output of
experimenter
-
getConfig
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetConfigOutput>> getConfig(GetConfigInput input)
Description copied from interface:OpenflowProtocolService
Invokeget-config
RPC.- Specified by:
getConfig
in interfaceOpenflowProtocolService
- Parameters:
input
- ofget-config
- Returns:
- output of
get-config
-
getFeatures
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetFeaturesOutput>> getFeatures(GetFeaturesInput input)
Description copied from interface:OpenflowProtocolService
Invokeget-features
RPC.- Specified by:
getFeatures
in interfaceOpenflowProtocolService
- Parameters:
input
- ofget-features
- Returns:
- output of
get-features
-
getQueueConfig
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetQueueConfigOutput>> getQueueConfig(GetQueueConfigInput input)
Description copied from interface:OpenflowProtocolService
Invokeget-queue-config
RPC.- Specified by:
getQueueConfig
in interfaceOpenflowProtocolService
- Parameters:
input
- ofget-queue-config
- Returns:
- output of
get-queue-config
-
groupMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GroupModOutput>> groupMod(GroupModInput input)
Description copied from interface:OpenflowProtocolService
Invokegroup-mod
RPC.- Specified by:
groupMod
in interfaceOpenflowProtocolService
- Parameters:
input
- ofgroup-mod
- Returns:
- output of
group-mod
-
hello
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<HelloOutput>> hello(HelloInput input)
Description copied from interface:OpenflowProtocolService
Invokehello
RPC.- Specified by:
hello
in interfaceOpenflowProtocolService
- Parameters:
input
- ofhello
- Returns:
- output of
hello
-
meterMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<MeterModOutput>> meterMod(MeterModInput input)
Description copied from interface:OpenflowProtocolService
Invokemeter-mod
RPC.- Specified by:
meterMod
in interfaceOpenflowProtocolService
- Parameters:
input
- ofmeter-mod
- Returns:
- output of
meter-mod
-
packetOut
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<PacketOutOutput>> packetOut(PacketOutInput input)
Description copied from interface:OpenflowProtocolService
Invokepacket-out
RPC.- Specified by:
packetOut
in interfaceOpenflowProtocolService
- Parameters:
input
- ofpacket-out
- Returns:
- output of
packet-out
-
multipartRequest
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<MultipartRequestOutput>> multipartRequest(MultipartRequestInput input)
Description copied from interface:OpenflowProtocolService
Invokemultipart-request
RPC.- Specified by:
multipartRequest
in interfaceOpenflowProtocolService
- Parameters:
input
- ofmultipart-request
- Returns:
- output of
multipart-request
-
portMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<PortModOutput>> portMod(PortModInput input)
Description copied from interface:OpenflowProtocolService
Invokeport-mod
RPC.- Specified by:
portMod
in interfaceOpenflowProtocolService
- Parameters:
input
- ofport-mod
- Returns:
- output of
port-mod
-
roleRequest
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<RoleRequestOutput>> roleRequest(RoleRequestInput input)
Description copied from interface:OpenflowProtocolService
Invokerole-request
RPC.- Specified by:
roleRequest
in interfaceOpenflowProtocolService
- Parameters:
input
- ofrole-request
- Returns:
- output of
role-request
-
setConfig
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<SetConfigOutput>> setConfig(SetConfigInput input)
Description copied from interface:OpenflowProtocolService
Invokeset-config
RPC.- Specified by:
setConfig
in interfaceOpenflowProtocolService
- Parameters:
input
- ofset-config
- Returns:
- output of
set-config
-
tableMod
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<TableModOutput>> tableMod(TableModInput input)
Description copied from interface:OpenflowProtocolService
Invoketable-mod
RPC.- Specified by:
tableMod
in interfaceOpenflowProtocolService
- Parameters:
input
- oftable-mod
- Returns:
- output of
table-mod
-
getAsync
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<GetAsyncOutput>> getAsync(GetAsyncInput input)
Description copied from interface:OpenflowProtocolService
Invokeget-async
RPC.- Specified by:
getAsync
in interfaceOpenflowProtocolService
- Parameters:
input
- ofget-async
- Returns:
- output of
get-async
-
setAsync
public com.google.common.util.concurrent.ListenableFuture<org.opendaylight.yangtools.yang.common.RpcResult<SetAsyncOutput>> setAsync(SetAsyncInput input)
Description copied from interface:OpenflowProtocolService
Invokeset-async
RPC.- Specified by:
setAsync
in interfaceOpenflowProtocolService
- Parameters:
input
- ofset-async
- Returns:
- output of
set-async
-
isAlive
public boolean isAlive()
Description copied from interface:ConnectionAdapter
Determines if the connection to the switch is alive.- Specified by:
isAlive
in interfaceConnectionAdapter
- Returns:
- true, if connection to switch is alive
-
isAutoRead
public boolean isAutoRead()
Description copied from interface:ConnectionAdapter
Determines if the channel is configured to auto-read.- Specified by:
isAutoRead
in interfaceConnectionAdapter
- Returns:
- true, if channel is configured to auto-read
-
setAutoRead
public void setAutoRead(boolean autoRead)
Description copied from interface:ConnectionAdapter
Sets option for automatic channel reading - if set to false, incoming messages won't be read.- Specified by:
setAutoRead
in interfaceConnectionAdapter
- Parameters:
autoRead
- target value to be switched to
-
getRemoteAddress
public InetSocketAddress getRemoteAddress()
Description copied from interface:ConnectionAdapter
Returns the address of the connected switch.- Specified by:
getRemoteAddress
in interfaceConnectionAdapter
- Returns:
- address of the remote end - address of a switch if connected
-
findRpcResponse
protected org.opendaylight.openflowjava.protocol.impl.core.connection.ResponseExpectedRpcListener<?> findRpcResponse(RpcResponseKey key)
Return cached RpcListener ornull
if not cached.
-
-