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
Modifier and TypeFieldDescriptionprotected CoexistenceInfoProvider
protected NotificationOriginator
protected List<org.snmp4j.smi.OctetString>
protected final Vector<RequestHandler<SnmpRequest>>
protected ProxyMap
protected RequestFactory<org.snmp4j.CommandResponderEvent,
org.snmp4j.PDU, SnmpRequest> protected TemporaryList<Request>
protected org.snmp4j.util.WorkerPool
protected VACM
-
Constructor Summary
ConstructorDescriptionCommandProcessor
(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
Modifier and TypeMethodDescriptionvoid
addCounterListener
(org.snmp4j.event.CounterListener l) void
addMOServer
(MOServer server) void
addPduHandler
(RequestHandler<SnmpRequest> handler) 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) org.snmp4j.smi.OctetString
protected RequestHandler<SnmpRequest>
getHandler
(int pduType) int
Gets the internal request timeout millis.getServer
(org.snmp4j.smi.OctetString context) getVacm()
protected org.snmp4j.smi.OctetString
getViewName
(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 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) 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.void
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 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 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 Details
-
setInternalRequestTimeout
public void setInternalRequestTimeout(int timeoutMillis) Sets the internal request timeout. Any request must return within this amount of milliseconds. Default is five minutes.- Parameters:
timeoutMillis
- the maximum number of milliseconds a request can be processed.- Since:
- 1.3
-
getInternalRequestTimeout
public int getInternalRequestTimeout()Gets the internal request timeout millis.- Returns:
- the maximum number of milliseconds a request can be processed.
- Since:
- 1.3
-
processPdu
public void processPdu(org.snmp4j.CommandResponderEvent event) - Specified by:
processPdu
in 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 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-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
- 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
-
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 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)
-
setWorkerPool(org.snmp4j.util.WorkerPool)
instead