- java.lang.Object
-
- org.snmp4j.agent.CommandProcessor
-
- All Implemented Interfaces:
EventListener
,NotificationOriginator
,org.snmp4j.CommandResponder
public class CommandProcessor extends Object implements org.snmp4j.CommandResponder, NotificationOriginator
TheCommandProcessor
is the central glue code that puts together the various sub-systems of a SNMP agent.- Version:
- 3.1
- Author:
- Frank Fock
-
-
Field Summary
Fields Modifier and Type Field Description protected CoexistenceInfoProvider
coexistenceProvider
protected List<MOServer>
moServers
protected NotificationOriginator
notificationOriginator
protected List<org.snmp4j.smi.OctetString>
ownContextEngineIDs
protected List<RequestHandler<SnmpRequest>>
pduHandler
protected ProxyMap
proxyForwarder
protected RequestFactory<org.snmp4j.CommandResponderEvent<?>,org.snmp4j.PDU,SnmpRequest>
requestFactory
protected TemporaryList<SnmpRequest>
requestList
protected org.snmp4j.util.WorkerPool
threadPool
protected VACM
vacm
-
Constructor Summary
Constructors Constructor Description CommandProcessor(org.snmp4j.smi.OctetString contextEngineID)
Creates aCommandProcessor
and registers all PDU types with the supplied contextEngineID as well as withMPv3.LOCAL_ENGINE_ID
as required by RFC 5343.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
addCounterListener(org.snmp4j.event.CounterListener l)
boolean
addMOServer(MOServer server)
Adds aMOServer
to this command processor and returnstrue
on success.void
addPduHandler(RequestHandler<SnmpRequest> handler)
ProxyForwarder
addProxyForwarder(ProxyForwarder proxyForwarder, org.snmp4j.smi.OctetString contextEngineID, int proxyType)
protected <A extends org.snmp4j.smi.Address>
voiddispatchCommand(org.snmp4j.CommandResponderEvent<A> command, CoexistenceInfo cinfo)
protected <A extends org.snmp4j.smi.Address>
voidfinalizeRequest(org.snmp4j.CommandResponderEvent<A> command, SnmpRequest req, MOServer server)
protected void
fireIncrementCounter(org.snmp4j.event.CounterEvent event)
CoexistenceInfoProvider
getCoexistenceProvider()
org.snmp4j.smi.OctetString
getContextEngineID()
protected RequestHandler<SnmpRequest>
getHandler(int pduType)
int
getInternalRequestTimeout()
Gets the internal request timeout millis.NotificationOriginator
getNotificationOriginator()
ProxyMap
getProxyForwarder()
TemporaryList<SnmpRequest>
getRequestList()
MOServer
getServer(org.snmp4j.smi.OctetString context)
Gets aMOServer
responsible for the specified context.VACM
getVacm()
protected org.snmp4j.smi.OctetString
getViewName(org.snmp4j.CommandResponderEvent<?> req, CoexistenceInfo cinfo, int viewType)
Object
notify(org.snmp4j.smi.OctetString context, org.snmp4j.smi.OID notificationID, org.snmp4j.smi.TimeTicks sysUpTime, org.snmp4j.smi.VariableBinding[] vbs)
Sends notifications (traps) to all appropriate notification targets.Object
notify(org.snmp4j.smi.OctetString context, org.snmp4j.smi.OID notificationID, org.snmp4j.smi.VariableBinding[] vbs)
Sends notification/inform messages to all registered targets.protected void
processNextSubRequest(SnmpRequest request, MOServer server, org.snmp4j.smi.OctetString context, SubRequest<?> sreq)
<A extends org.snmp4j.smi.Address>
voidprocessPdu(org.snmp4j.CommandResponderEvent<A> event)
protected <R extends Request<Source,Response,? extends SubRequest<?>>,Source,Response>
voidprocessRequest(MOServer server, RequestHandler<R> handler, R req)
Processes (or re-process) a request and try to complete the request (thus to complete any incomplete subrequests).protected <A extends org.snmp4j.smi.Address>
voidprocessRequest(org.snmp4j.CommandResponderEvent<A> command, CoexistenceInfo cinfo, RequestHandler<SnmpRequest> handler)
protected void
release(MOServer server, SnmpRequest req)
void
removeCounterListener(org.snmp4j.event.CounterListener l)
boolean
removeMOServer(MOServer server)
Removes aMOServer
from this command processor and returnstrue
on success.void
removePduHandler(RequestHandler<SnmpRequest> handler)
ProxyForwarder
removeProxyForwarder(org.snmp4j.smi.OctetString contextEngineID, int proxyType)
protected void
reprocessRequest(MOServer server, SnmpRequest req)
protected <A extends org.snmp4j.smi.Address>
voidsendResponse(org.snmp4j.CommandResponderEvent<A> requestEvent, org.snmp4j.PDU response)
protected void
setAuthorizationError(Request<?,?,?> req, int vacmStatus)
void
setCoexistenceProvider(CoexistenceInfoProvider coexistenceProvider)
void
setContextEngineID(org.snmp4j.smi.OctetString contextEngineID)
void
setInternalRequestTimeout(int timeoutMillis)
Sets the internal request timeout.void
setNotificationOriginator(NotificationOriginator notificationOriginator)
void
setThreadPool(org.snmp4j.util.WorkerPool threadPool)
Deprecated.UsesetWorkerPool(org.snmp4j.util.WorkerPool)
insteadvoid
setVacm(VACM vacm)
void
setWorkerPool(org.snmp4j.util.WorkerPool threadPool)
Sets the internal thread pool for task execution.protected void
unlockManagedObjectIfLockedByLookup(MOServer server, ManagedObject<?> mo, LockRequest lockRequest)
Unlock the providedManagedObject
if the also providedLockRequest
indicates that the managed object was locked by a precedingMOServer.lookup(MOQuery, LockRequest)
operation.
-
-
-
Field Detail
-
threadPool
protected org.snmp4j.util.WorkerPool threadPool
-
vacm
protected VACM vacm
-
ownContextEngineIDs
protected List<org.snmp4j.smi.OctetString> ownContextEngineIDs
-
pduHandler
protected final List<RequestHandler<SnmpRequest>> pduHandler
-
requestList
protected TemporaryList<SnmpRequest> requestList
-
requestFactory
protected RequestFactory<org.snmp4j.CommandResponderEvent<?>,org.snmp4j.PDU,SnmpRequest> requestFactory
-
notificationOriginator
protected NotificationOriginator notificationOriginator
-
proxyForwarder
protected ProxyMap proxyForwarder
-
coexistenceProvider
protected CoexistenceInfoProvider coexistenceProvider
-
-
Constructor Detail
-
CommandProcessor
public CommandProcessor(org.snmp4j.smi.OctetString contextEngineID)
Creates aCommandProcessor
and registers all PDU types with the supplied contextEngineID as well as withMPv3.LOCAL_ENGINE_ID
as required by RFC 5343.- Parameters:
contextEngineID
- the custom engine ID to use (should equal the engineID of the agent, i.e. USM).
-
-
Method Detail
-
setInternalRequestTimeout
public void setInternalRequestTimeout(int timeoutMillis)
Sets the internal request timeout. Any request must return within this amount of milli-seconds. Default is five minutes.- Parameters:
timeoutMillis
- the maximum number of milli-seconds a request can be processed.- Since:
- 1.3
-
getInternalRequestTimeout
public int getInternalRequestTimeout()
Gets the internal request timeout millis.- Returns:
- the maximum number of milli-seconds a request can be processed.
- Since:
- 1.3
-
processPdu
public <A extends org.snmp4j.smi.Address> void processPdu(org.snmp4j.CommandResponderEvent<A> event)
- Specified by:
processPdu
in interfaceorg.snmp4j.CommandResponder
-
setThreadPool
@Deprecated public void setThreadPool(org.snmp4j.util.WorkerPool threadPool)
Deprecated.UsesetWorkerPool(org.snmp4j.util.WorkerPool)
insteadSets the internal thread pool for task execution.- Parameters:
threadPool
- a pool of workers/threads which can execute tasks.
-
setWorkerPool
public void setWorkerPool(org.snmp4j.util.WorkerPool threadPool)
Sets the internal thread pool for task execution.- Parameters:
threadPool
- a pool of workers/threads which can execute tasks.- Since:
- 1.9
-
getVacm
public VACM getVacm()
-
setVacm
public void setVacm(VACM vacm)
-
getContextEngineID
public org.snmp4j.smi.OctetString getContextEngineID()
-
setContextEngineID
public void setContextEngineID(org.snmp4j.smi.OctetString contextEngineID)
-
notify
public Object notify(org.snmp4j.smi.OctetString context, org.snmp4j.smi.OID notificationID, org.snmp4j.smi.VariableBinding[] vbs)
Sends notification/inform messages to all registered targets. This method uses the internalThreadPool
to send the message(s) via theNotificationOriginator
(seegetNotificationOriginator()
) to the targets specified by the SnmpTargetMIB and SnmpNotificationMIB instances supplied to the notification originator.- Specified by:
notify
in interfaceNotificationOriginator
- Parameters:
context
- the context name of the context on whose behalf this notification has been generated.notificationID
- the object ID that uniquely identifies this notification. For SNMPv1 traps, the notification ID has to be build using the rules provided by RFC 2576.vbs
- an array ofVariableBinding
instances representing the payload of the notification.- Returns:
- an array of ResponseEvent instances or NotificationTask instance if
the notification has been send asynchronously. Since the
NotificationOriginator
determines on behalf of the SNMP-NOTIFICATION-MIB contents whether a notification is sent as trap/notification or as inform request, the returned array will contain an element for each addressed target, but only a response PDU for inform targets.null
will be returned when sending the notification failed because there is noNotificationOriginator
set.NOTE: If this command processor is using a ThreadPool then the returned object will be
NotificationTask
instance. If all response have been receivedObject.notify()
will be called on the returnedNotificationTask
object by the sending thread.
-
notify
public Object notify(org.snmp4j.smi.OctetString context, org.snmp4j.smi.OID notificationID, org.snmp4j.smi.TimeTicks sysUpTime, org.snmp4j.smi.VariableBinding[] vbs)
Description copied from interface:NotificationOriginator
Sends notifications (traps) to all appropriate notification targets. The targets to notify are determined through the SNMP-TARGET-MIB and the SNMP-NOTIFICATION-MIB.- Specified by:
notify
in interfaceNotificationOriginator
- Parameters:
context
- the context name of the context on whose behalf this notification has been generated.notificationID
- the object ID that uniquely identifies this notification. For SNMPv1 traps, the notification ID has to be build using the rules provided by RFC 2576.sysUpTime
- the value of the sysUpTime for the contextcontext
. This value will be included in the generated notification assysUpTime.0
.vbs
- an array ofVariableBinding
instances representing the payload of the notification.- Returns:
- an array of ResponseEvent instances. Since the
NotificationOriginator
determines on behalf of the SNMP-NOTIFICATON-MIB contents whether a notification is sent as trap/notification or as inform request, the returned array contains an element for each addressed target, but only a response PDU for inform targets.
-
setNotificationOriginator
public void setNotificationOriginator(NotificationOriginator notificationOriginator)
-
setCoexistenceProvider
public void setCoexistenceProvider(CoexistenceInfoProvider coexistenceProvider)
-
addProxyForwarder
public ProxyForwarder addProxyForwarder(ProxyForwarder proxyForwarder, org.snmp4j.smi.OctetString contextEngineID, int proxyType)
-
removeProxyForwarder
public ProxyForwarder removeProxyForwarder(org.snmp4j.smi.OctetString contextEngineID, int proxyType)
-
getHandler
protected RequestHandler<SnmpRequest> getHandler(int pduType)
-
dispatchCommand
protected <A extends org.snmp4j.smi.Address> void dispatchCommand(org.snmp4j.CommandResponderEvent<A> command, CoexistenceInfo cinfo)
-
processRequest
protected <A extends org.snmp4j.smi.Address> void processRequest(org.snmp4j.CommandResponderEvent<A> command, CoexistenceInfo cinfo, RequestHandler<SnmpRequest> handler)
-
reprocessRequest
protected void reprocessRequest(MOServer server, SnmpRequest req)
-
processRequest
protected <R extends Request<Source,Response,? extends SubRequest<?>>,Source,Response> void processRequest(MOServer server, RequestHandler<R> handler, R req)
Processes (or re-process) a request and try to complete the request (thus to complete any incomplete subrequests).- Type Parameters:
R
- theRequest
type to process.Source
- the source object that created the request for processing.Response
- the response PDU type created by the request processing.- Parameters:
server
- theMOServer
instance to use for accessing instrumentation.handler
- theRequestHandler
to use to process the request.req
- theRequest
.
-
finalizeRequest
protected <A extends org.snmp4j.smi.Address> void finalizeRequest(org.snmp4j.CommandResponderEvent<A> command, SnmpRequest req, MOServer server)
-
release
protected void release(MOServer server, SnmpRequest req)
-
sendResponse
protected <A extends org.snmp4j.smi.Address> void sendResponse(org.snmp4j.CommandResponderEvent<A> requestEvent, org.snmp4j.PDU response)
-
setAuthorizationError
protected void setAuthorizationError(Request<?,?,?> req, int vacmStatus)
-
addPduHandler
public void addPduHandler(RequestHandler<SnmpRequest> handler)
-
removePduHandler
public void removePduHandler(RequestHandler<SnmpRequest> handler)
-
addMOServer
public boolean addMOServer(MOServer server)
Adds aMOServer
to this command processor and returnstrue
on success.
-
removeMOServer
public boolean removeMOServer(MOServer server)
Removes aMOServer
from this command processor and returnstrue
on success.- Parameters:
server
- theMOServer
to remove from this command processor.- Returns:
true
if the server has been removed,false
if the server was not subject to command processing.
-
getServer
public MOServer getServer(org.snmp4j.smi.OctetString context)
Gets aMOServer
responsible for the specified context.- Parameters:
context
- a SNMPv3 context ornull
for the default context.- Returns:
- a
MOServer
that returnstrue
onMOServer.isContextSupported(OctetString)
for the supplied SNMPv3 context ornull
if such aMOServer
instance does not exists.
-
getRequestList
public TemporaryList<SnmpRequest> getRequestList()
-
getNotificationOriginator
public NotificationOriginator getNotificationOriginator()
-
getProxyForwarder
public ProxyMap getProxyForwarder()
-
getCoexistenceProvider
public CoexistenceInfoProvider getCoexistenceProvider()
-
getViewName
protected org.snmp4j.smi.OctetString getViewName(org.snmp4j.CommandResponderEvent<?> req, CoexistenceInfo cinfo, int viewType)
-
processNextSubRequest
protected void processNextSubRequest(SnmpRequest request, MOServer server, org.snmp4j.smi.OctetString context, SubRequest<?> sreq) throws NoSuchElementException
- Throws:
NoSuchElementException
-
unlockManagedObjectIfLockedByLookup
protected void unlockManagedObjectIfLockedByLookup(MOServer server, ManagedObject<?> mo, LockRequest lockRequest)
Unlock the providedManagedObject
if the also providedLockRequest
indicates that the managed object was locked by a precedingMOServer.lookup(MOQuery, LockRequest)
operation.- Parameters:
server
- a MOServer that put the lock.mo
- the possibly locked managed object.lockRequest
- the lock request with the status of the (potentially acquired) lock.- Since:
- 2.4.0
-
addCounterListener
public void addCounterListener(org.snmp4j.event.CounterListener l)
-
removeCounterListener
public void removeCounterListener(org.snmp4j.event.CounterListener l)
-
fireIncrementCounter
protected void fireIncrementCounter(org.snmp4j.event.CounterEvent event)
-
-