- java.lang.Object
-
- org.snmp4j.transport.AbstractTransportMapping<A>
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,TransportMapping<A>
- Direct Known Subclasses:
DummyTransport,DummyTransport.DummyTransportResponder,TcpTransportMapping,UdpTransportMapping
public abstract class AbstractTransportMapping<A extends Address> extends java.lang.Object implements TransportMapping<A>
TheAbstractTransportMappingprovides an abstract implementation for the message dispatcher list and the maximum inbound message size.- Version:
- 3.6.0
-
-
Field Summary
Fields Modifier and Type Field Description protected booleanasyncMsgProcessingSupportedprotected WorkerTasklistenWorkerTaskprivate static LogAdapterloggerprotected intmaxInboundMessageSizeprotected java.util.Set<A>suspendedAddressesprotected java.util.List<TransportListener>transportListener
-
Constructor Summary
Constructors Constructor Description AbstractTransportMapping()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddTransportListener(TransportListener l)Adds a transport listener to the transport.abstract voidclose()Closes the transport an releases all bound resources synchronously.protected voidfireProcessMessage(A address, java.nio.ByteBuffer buf, TransportStateReference tmStateReference)protected abstract WorkerTaskgetListenerWorkerTask()Gets theWorkerTaskthat is responsible for receiving new messages.intgetMaxInboundMessageSize()Gets the maximum length of an incoming message that can be successfully processed by this transport mapping implementation.intgetPriority()Returns the priority of the internal listen thread.abstract java.lang.Class<? extends Address>getSupportedAddressClass()Gets the primaryAddressclass that is supported by this transport mapping.java.lang.StringgetThreadName()Returns the name of the listen thread.protected voidhandleDroppedMessageToSend(A address, byte[] message, TransportStateReference transportStateReference, long timeoutMillis, int maxRetries)Handle a message that could not be send to the specified address, because there is no server socket for receiving responses.booleanisAsyncMsgProcessingSupported()Returnstrueif asynchronous (multi-threaded) message processing may be implemented.booleanisListening()Returnstrueif the transport mapping is listening for incoming messages.abstract voidlisten()Listen for incoming messages.voidremoveAllTransportListeners()voidremoveTransportListener(TransportListener l)Removes a transport listener.booleanresumeAddress(A addressToResumeSending)Resume sending of messages to the specified address.abstract voidsendMessage(A address, byte[] message, TransportStateReference tmStateReference, long timeoutMillis, int maxRetries)Sends a message to the supplied address using this transport.voidsetAsyncMsgProcessingSupported(boolean asyncMsgProcessingSupported)Specifies whether this transport mapping has to support asynchronous messages processing or not.voidsetPriority(int newPriority)Changes the priority of the listen thread for this UDP transport mapping.voidsetThreadName(java.lang.String name)Sets the name of the listen thread for this UDP transport mapping.voidsuspendAddress(A addressToSuspendSending)Suspend sending of messages to the specified address, regardless if a connection is already established or not.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.snmp4j.TransportMapping
getListenAddress, getSupportedAddressClasses, getSupportedTransportType, isAddressSupported, isAddressSupported
-
-
-
-
Field Detail
-
logger
private static final LogAdapter logger
-
transportListener
protected java.util.List<TransportListener> transportListener
-
maxInboundMessageSize
protected int maxInboundMessageSize
-
asyncMsgProcessingSupported
protected boolean asyncMsgProcessingSupported
-
listenWorkerTask
protected WorkerTask listenWorkerTask
-
-
Method Detail
-
getSupportedAddressClass
public abstract java.lang.Class<? extends Address> getSupportedAddressClass()
Description copied from interface:TransportMappingGets the primaryAddressclass that is supported by this transport mapping.- Specified by:
getSupportedAddressClassin interfaceTransportMapping<A extends Address>- Returns:
- a subclass of
Address.
-
isListening
public boolean isListening()
Description copied from interface:TransportMappingReturnstrueif the transport mapping is listening for incoming messages. For connection oriented transport mappings this is a prerequisite to be able to send SNMP messages. For connectionless transport mappings it is a prerequisite to be able to receive responses.- Specified by:
isListeningin interfaceTransportMapping<A extends Address>- Returns:
trueif this transport mapping is listening for messages.
-
sendMessage
public abstract void sendMessage(A address, byte[] message, TransportStateReference tmStateReference, long timeoutMillis, int maxRetries) throws java.io.IOException
Sends a message to the supplied address using this transport. If the target address has been suspended, then instead actually sending the message on the wire, the methodhandleDroppedMessageToSend(Address, byte[], TransportStateReference, long, int)will be called. To stop suspending of a target address, callresumeAddress(Address)for that address.- Specified by:
sendMessagein interfaceTransportMapping<A extends Address>- Parameters:
address- anAddressinstance denoting the target address.message- the whole message as an array of bytes.tmStateReference- the (optional) transport model state reference as defined by RFC 5590 section 6.1.timeoutMillis- maximum number of milli seconds the connection creation might take (if connection based).maxRetries- maximum retries during connection creation.- Throws:
java.io.IOException- if any underlying IO operation fails.
-
addTransportListener
public void addTransportListener(TransportListener l)
Description copied from interface:TransportMappingAdds a transport listener to the transport. Normally, at least one transport listener needs to be added to process incoming messages.- Specified by:
addTransportListenerin interfaceTransportMapping<A extends Address>- Parameters:
l- aTransportListenerinstance.
-
removeTransportListener
public void removeTransportListener(TransportListener l)
Description copied from interface:TransportMappingRemoves a transport listener. Incoming messages will no longer be propagated to the suppliedTransportListener.- Specified by:
removeTransportListenerin interfaceTransportMapping<A extends Address>- Parameters:
l- aTransportListenerinstance.
-
removeAllTransportListeners
public void removeAllTransportListeners()
-
fireProcessMessage
protected void fireProcessMessage(A address, java.nio.ByteBuffer buf, TransportStateReference tmStateReference)
-
close
public abstract void close() throws java.io.IOExceptionDescription copied from interface:TransportMappingCloses the transport an releases all bound resources synchronously.- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Specified by:
closein interfaceTransportMapping<A extends Address>- Throws:
java.io.IOException- if any IO operation for the close fails.
-
suspendAddress
public void suspendAddress(A addressToSuspendSending)
Suspend sending of messages to the specified address, regardless if a connection is already established or not. To be able to send messages again to the specified address usingsendMessage(Address, byte[], TransportStateReference, long, int), callresumeAddress(Address).- Parameters:
addressToSuspendSending- an arbitrary remote address for which any messages send bysendMessage(Address, byte[], TransportStateReference, long, int)should be dropped before sending and reopening a connection to that address.- Since:
- 3.4.4
-
resumeAddress
public boolean resumeAddress(A addressToResumeSending)
Resume sending of messages to the specified address.- Parameters:
addressToResumeSending- an arbitrary remote address for which any messages send bysendMessage(Address, byte[], TransportStateReference, long, int)should be dropped before sending and reopening a connection to that address.- Returns:
trueif the specified address was previously suspended and is now resumed to allow sending messages,falseotherwise.- Since:
- 3.4.4
-
handleDroppedMessageToSend
protected void handleDroppedMessageToSend(A address, byte[] message, TransportStateReference transportStateReference, long timeoutMillis, int maxRetries)
Handle a message that could not be send to the specified address, because there is no server socket for receiving responses.- Parameters:
address- anAddressinstance denoting the target address.message- the whole message as an array of bytes.transportStateReference- the (optional) transport model state reference as defined by RFC 5590 section 6.1.timeoutMillis- maximum number of milli seconds the connection creation might take (if connection based).maxRetries- maximum retries during connection creation.- Since:
- 3.4.4
-
listen
public abstract void listen() throws java.io.IOExceptionDescription copied from interface:TransportMappingListen for incoming messages. For connection oriented transports, this method needs to be called beforeTransportMapping.sendMessage(A, byte[], org.snmp4j.TransportStateReference, long, int)is called for the first time.- Specified by:
listenin interfaceTransportMapping<A extends Address>- Throws:
java.io.IOException- if an IO operation exception occurs while starting the listener.
-
getMaxInboundMessageSize
public int getMaxInboundMessageSize()
Description copied from interface:TransportMappingGets the maximum length of an incoming message that can be successfully processed by this transport mapping implementation.- Specified by:
getMaxInboundMessageSizein interfaceTransportMapping<A extends Address>- Returns:
- an integer > 484.
-
isAsyncMsgProcessingSupported
public boolean isAsyncMsgProcessingSupported()
Returnstrueif asynchronous (multi-threaded) message processing may be implemented. The default istrue.- Returns:
- if
falseis returned theMessageDispatcher.processMessage(org.snmp4j.TransportMapping, org.snmp4j.smi.Address, java.nio.ByteBuffer, org.snmp4j.TransportStateReference)method must not return before the message has been entirely processed.
-
setAsyncMsgProcessingSupported
public void setAsyncMsgProcessingSupported(boolean asyncMsgProcessingSupported)
Specifies whether this transport mapping has to support asynchronous messages processing or not.- Parameters:
asyncMsgProcessingSupported- iffalsetheMessageDispatcher.processMessage(org.snmp4j.TransportMapping, org.snmp4j.smi.Address, java.nio.ByteBuffer, org.snmp4j.TransportStateReference)method must not return before the message has been entirely processed, because the incoming message buffer is not copied before the message is being processed. Iftruethe message buffer is copied for each call, so that the message processing can be implemented asynchronously.
-
setPriority
public void setPriority(int newPriority)
Changes the priority of the listen thread for this UDP transport mapping. This method has no effect, if called beforelisten()has been called for this transport mapping.- Parameters:
newPriority- the new priority.- Since:
- 3.6.0
- See Also:
Thread.setPriority(int)
-
getPriority
public int getPriority()
Returns the priority of the internal listen thread.- Returns:
- a value between
Thread.MIN_PRIORITYandThread.MAX_PRIORITY. - Since:
- 3.6.0
-
setThreadName
public void setThreadName(java.lang.String name)
Sets the name of the listen thread for this UDP transport mapping. This method has no effect, if called beforelisten()has been called for this transport mapping.- Parameters:
name- the new thread name.- Since:
- 3.6.0
-
getThreadName
public java.lang.String getThreadName()
Returns the name of the listen thread.- Returns:
- the thread name if in listening mode, otherwise
null. - Since:
- 3.6.0
-
getListenerWorkerTask
protected abstract WorkerTask getListenerWorkerTask()
Gets theWorkerTaskthat is responsible for receiving new messages.- Returns:
- a
WorkerTaskinstance which is most likely aDefaultThreadFactory.WorkerThread. - Since:
- 3.6.0
-
-