Package org.snmp4j.agent
Class CommandProcessor
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
The
CommandProcessor is the central glue code that puts together
the various sub-systems of a SNMP agent.- Version:
- 1.0
- Author:
- Frank Fock
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected CoexistenceInfoProviderprotected NotificationOriginatorprotected List<org.snmp4j.smi.OctetString>protected final Vector<RequestHandler<SnmpRequest>>protected ProxyMapprotected RequestFactory<org.snmp4j.CommandResponderEvent,org.snmp4j.PDU, SnmpRequest> protected TemporaryList<Request>protected org.snmp4j.util.WorkerPoolprotected VACM -
Constructor Summary
ConstructorsConstructorDescriptionCommandProcessor(org.snmp4j.smi.OctetString contextEngineID) Creates aCommandProcessorand registers all PDU types with the supplied contextEngineID as well as withMPv3.LOCAL_ENGINE_IDas required by RFC 5343. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddCounterListener(org.snmp4j.event.CounterListener l) voidaddMOServer(MOServer server) voidaddPduHandler(RequestHandler<SnmpRequest> handler) addProxyForwarder(ProxyForwarder proxyForwarder, org.snmp4j.smi.OctetString contextEngineID, int proxyType) protected voiddispatchCommand(org.snmp4j.CommandResponderEvent command, CoexistenceInfo cinfo) protected voidfinalizeRequest(org.snmp4j.CommandResponderEvent command, SnmpRequest req, MOServer server) protected voidfireIncrementCounter(org.snmp4j.event.CounterEvent event) org.snmp4j.smi.OctetStringprotected RequestHandler<SnmpRequest>getHandler(int pduType) intGets the internal request timeout millis.getServer(org.snmp4j.smi.OctetString context) getVacm()protected org.snmp4j.smi.OctetStringgetViewName(org.snmp4j.CommandResponderEvent req, CoexistenceInfo cinfo, int viewType) 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.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 voidprocessNextSubRequest(SnmpRequest request, MOServer server, org.snmp4j.smi.OctetString context, SubRequest sreq) voidprocessPdu(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 voidprocessRequest(org.snmp4j.CommandResponderEvent command, CoexistenceInfo cinfo, RequestHandler<SnmpRequest> handler) protected voidrelease(MOServer server, SnmpRequest req) voidremoveCounterListener(org.snmp4j.event.CounterListener l) voidremoveMOServer(MOServer server) voidremovePduHandler(RequestHandler handler) removeProxyForwarder(org.snmp4j.smi.OctetString contextEngineID, int proxyType) protected voidreprocessRequest(MOServer server, SnmpRequest req) protected voidsendResponse(org.snmp4j.CommandResponderEvent requestEvent, org.snmp4j.PDU response) protected voidsetAuthorizationError(Request req, int vacmStatus) voidsetCoexistenceProvider(CoexistenceInfoProvider coexistenceProvider) voidsetContextEngineID(org.snmp4j.smi.OctetString contextEngineID) voidsetInternalRequestTimeout(int timeoutMillis) Sets the internal request timeout.voidsetNotificationOriginator(NotificationOriginator notificationOriginator) voidsetThreadPool(org.snmp4j.util.WorkerPool threadPool) Deprecated.voidvoidsetWorkerPool(org.snmp4j.util.WorkerPool threadPool) Sets the internal thread pool for task execution.protected voidunlockManagedObjectIfLockedByLookup(MOServer server, ManagedObject mo, LockRequest lockRequest) Unlock the providedManagedObjectif the also providedLockRequestindicates that the managed object was locked by a precedingMOServer.lookup(MOQuery, LockRequest)operation.
-
Field Details
-
threadPool
protected org.snmp4j.util.WorkerPool threadPool -
vacm
-
moServers
-
ownContextEngineIDs
-
pduHandler
-
requestList
-
requestFactory
protected RequestFactory<org.snmp4j.CommandResponderEvent,org.snmp4j.PDU, requestFactorySnmpRequest> -
notificationOriginator
-
proxyForwarder
-
coexistenceProvider
-
-
Constructor Details
-
CommandProcessor
public CommandProcessor(org.snmp4j.smi.OctetString contextEngineID) Creates aCommandProcessorand registers all PDU types with the supplied contextEngineID as well as withMPv3.LOCAL_ENGINE_IDas required by RFC 5343.- Parameters:
contextEngineID- the custom engine ID to use (should equal the engineID of the agent, i.e. USM).
-
-
Method Details
-
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:
processPduin interfaceorg.snmp4j.CommandResponder
-
setThreadPool
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
-
setVacm
-
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 internalThreadPoolto send the message(s) via theNotificationOriginator(seegetNotificationOriginator()) to the targets specified by the SnmpTargetMIB and SnmpNotificationMIB instances supplied to the notification originator.- Specified by:
notifyin 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 ofVariableBindinginstances representing the payload of the notification.- Returns:
- an array of ResponseEvent instances or NotificationTask instance if
the notification has been send asynchronously. Since the
NotificationOriginatordetermines 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.nullwill be returned when sending the notification failed because there is noNotificationOriginatorset.NOTE: If this command processor is using a ThreadPool then the returned object will be
NotificationTaskinstance. If all response have been receivedObject.notify()will be called on the returnedNotificationTaskobject 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:NotificationOriginatorSends 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:
notifyin 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 ofVariableBindinginstances representing the payload of the notification.- Returns:
- an array of ResponseEvent instances. Since the
NotificationOriginatordetermines 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
-
setCoexistenceProvider
-
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
-
dispatchCommand
-
processRequest
protected void processRequest(org.snmp4j.CommandResponderEvent command, CoexistenceInfo cinfo, RequestHandler<SnmpRequest> handler) -
reprocessRequest
-
processRequest
protected <R extends Request<Source,Response, void processRequest? extends SubRequest>, Source, Response> (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- theRequesttype to process.Source- the source object that created the request for processing.Response- the response PDU type created by the request processing.- Parameters:
server- theMOServerinstance to use for accessing instrumentation.handler- theRequestHandlerto use to process the request.req- theRequest.
-
finalizeRequest
protected void finalizeRequest(org.snmp4j.CommandResponderEvent command, SnmpRequest req, MOServer server) -
release
-
sendResponse
protected void sendResponse(org.snmp4j.CommandResponderEvent requestEvent, org.snmp4j.PDU response) -
setAuthorizationError
-
addPduHandler
-
removePduHandler
-
addMOServer
-
removeMOServer
-
getServer
-
getRequestList
-
getNotificationOriginator
-
getProxyForwarder
-
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 providedManagedObjectif the also providedLockRequestindicates 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)
-
setWorkerPool(org.snmp4j.util.WorkerPool)instead