- java.lang.Object
-
- org.snmp4j.agent.CommandProcessor
-
- All Implemented Interfaces:
java.util.EventListener
,NotificationOriginator
,org.snmp4j.CommandResponder
public class CommandProcessor extends java.lang.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.0
- Author:
- Frank Fock
-
-
Field Summary
Fields Modifier and Type Field Description protected CoexistenceInfoProvider
coexistenceProvider
protected java.util.List<MOServer>
moServers
protected NotificationOriginator
notificationOriginator
protected java.util.List<org.snmp4j.smi.OctetString>
ownContextEngineIDs
protected java.util.List<RequestHandler<SnmpRequest>>
pduHandler
protected ProxyMap
proxyForwarder
protected RequestFactory<org.snmp4j.CommandResponderEvent,org.snmp4j.PDU,SnmpRequest>
requestFactory
protected TemporaryList<Request>
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)
void
addMOServer(MOServer server)
void
addPduHandler(RequestHandler<SnmpRequest> handler)
ProxyForwarder
addProxyForwarder(ProxyForwarder proxyForwarder, org.snmp4j.smi.OctetString contextEngineID, int proxyType)
protected void
dispatchCommand(org.snmp4j.CommandResponderEvent command, CoexistenceInfo cinfo)
protected void
finalizeRequest(org.snmp4j.CommandResponderEvent 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<Request>
getRequestList()
MOServer
getServer(org.snmp4j.smi.OctetString context)
VACM
getVacm()
protected org.snmp4j.smi.OctetString
getViewName(org.snmp4j.CommandResponderEvent req, CoexistenceInfo cinfo, int viewType)
java.lang.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.java.lang.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)
void
processPdu(org.snmp4j.CommandResponderEvent 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 void
processRequest(org.snmp4j.CommandResponderEvent command, CoexistenceInfo cinfo, RequestHandler<SnmpRequest> handler)
protected void
release(MOServer server, SnmpRequest req)
void
removeCounterListener(org.snmp4j.event.CounterListener l)
void
removeMOServer(MOServer server)
void
removePduHandler(RequestHandler handler)
ProxyForwarder
removeProxyForwarder(org.snmp4j.smi.OctetString contextEngineID, int proxyType)
protected void
reprocessRequest(MOServer server, SnmpRequest req)
protected void
sendResponse(org.snmp4j.CommandResponderEvent 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
-
moServers
protected java.util.List<MOServer> moServers
-
ownContextEngineIDs
protected java.util.List<org.snmp4j.smi.OctetString> ownContextEngineIDs
-
pduHandler
protected final java.util.List<RequestHandler<SnmpRequest>> pduHandler
-
requestList
protected TemporaryList<Request> 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 void processPdu(org.snmp4j.CommandResponderEvent 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 java.lang.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-NOTIFICTON-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 java.lang.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-NOTIFICTON-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 void dispatchCommand(org.snmp4j.CommandResponderEvent command, CoexistenceInfo cinfo)
-
processRequest
protected void processRequest(org.snmp4j.CommandResponderEvent 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 void finalizeRequest(org.snmp4j.CommandResponderEvent command, SnmpRequest req, MOServer server)
-
release
protected void release(MOServer server, SnmpRequest req)
-
sendResponse
protected void sendResponse(org.snmp4j.CommandResponderEvent 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 handler)
-
addMOServer
public void addMOServer(MOServer server)
-
removeMOServer
public void removeMOServer(MOServer server)
-
getServer
public MOServer getServer(org.snmp4j.smi.OctetString context)
-
getRequestList
public TemporaryList<Request> 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 java.util.NoSuchElementException
- Throws:
java.util.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)
-
-