Module org.snmp4j
Package org.snmp4j

Class Snmp

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.util.EventListener, CommandResponder, Session

    public class Snmp
    extends java.lang.Object
    implements Session, CommandResponder
    The Snmp class is the core of SNMP4J. It provides functions to send and receive SNMP PDUs. All SNMP PDU types can be send. Confirmed PDUs can be sent synchronously and asynchronously.

    The Snmp class is transport protocol independent. Support for a specific TransportMapping instance is added by calling the addTransportMapping(TransportMapping transportMapping) method or creating a Snmp instance by using the non-default constructor with the corresponding transport mapping. Transport mappings are used for incoming and outgoing messages.

    To setup a default SNMP session for UDP transport and with SNMPv3 support the following code snippet can be used:

       Address targetAddress = GenericAddress.parse("udp:127.0.0.1/161");
       TransportMapping transport = new DefaultUdpTransportMapping();
       snmp = new Snmp(transport);
       USM usm = new USM(SecurityProtocols.getInstance(),
                         new OctetString(MPv3.createLocalEngineID()), 0);
       SecurityModels.getInstance().addSecurityModel(usm);
       transport.listen();
     

    How a synchronous SNMPv3 message with authentication and privacy is then sent illustrates the following code snippet:

       // add user to the USM
       snmp.getUSM().addUser(new OctetString("MD5DES"),
                             new UsmUser(new OctetString("MD5DES"),
                                         AuthMD5.ID,
                                         new OctetString("MD5DESUserAuthPassword"),
                                         PrivDES.ID,
                                         new OctetString("MD5DESUserPrivPassword")));
       // create the target
       UserTarget target = new UserTarget();
       target.setAddress(targetAddress);
       target.setRetries(1);
       target.setTimeout(5000);
       target.setVersion(SnmpConstants.version3);
       target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
       target.setSecurityName(new OctetString("MD5DES"));
    
       // create the PDU
       PDU pdu = new ScopedPDU();
       pdu.add(new VariableBinding(new OID("1.3.6")));
       pdu.setType(PDU.GETNEXT);
    
       // send the PDU
       ResponseEvent response = snmp.send(pdu, target);
       // extract the response PDU (could be null if timed out)
       PDU responsePDU = response.getResponse();
       // extract the address used by the agent to send the response:
       Address peerAddress = response.getPeerAddress();
     

    An asynchronous SNMPv1 request is sent by the following code:

       // setting up target
       CommunityTarget target = new CommunityTarget();
       target.setCommunity(new OctetString("public"));
       target.setAddress(targetAddress);
       target.setRetries(2);
       target.setTimeout(1500);
       target.setVersion(SnmpConstants.version1);
       // creating PDU
       PDU pdu = new PDU();
       pdu.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,1,1})));
       pdu.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,1,2})));
       pdu.setType(PDU.GETNEXT);
       // sending request
       ResponseListener listener = new ResponseListener() {
         public void onResponse(ResponseEvent event) {
           // Always cancel async request when response has been received
           // otherwise a memory leak is created! Not canceling a request
           // immediately can be useful when sending a request to a broadcast
           // address.
           ((Snmp)event.getSource()).cancel(event.getRequest(), this);
           System.out.println("Received response PDU is: "+event.getResponse());
         }
       };
       snmp.sendPDU(pdu, target, null, listener);
     

    Traps (notifications) and other SNMP PDUs can be received by adding the following code to the first code snippet above:

       CommandResponder trapPrinter = new CommandResponder() {
         public synchronized void processPdu(CommandResponderEvent e) {
           PDU command = e.getPDU();
           if (command != null) {
             System.out.println(command.toString());
           }
         }
       };
       snmp.addCommandResponder(trapPrinter);
     
    Version:
    1.10
    Author:
    Frank Fock
    • Constructor Detail

      • Snmp

        public Snmp()
        Creates a Snmp instance that uses a MessageDispatcherImpl with no message processing models and no security protols (by default). You will have to add those by calling the appropriate methods on getMessageDispatcher().

        At least one transport mapping has to be added before listen() is called in order to be able to send and receive SNMP messages.

        To initialize a Snmp instance created with this constructor follow this sample code:

         Transport transport = ...;
         Snmp snmp = new Snmp();
         SecurityProtocols.getInstance().addDefaultProtocols();
         MessageDispatcher disp = snmp.getMessageDispatcher();
         disp.addMessageProcessingModel(new MPv1());
         disp.addMessageProcessingModel(new MPv2c());
         snmp.addTransportMapping(transport);
         OctetString localEngineID = new OctetString(
            MPv3.createLocalEngineID());
            // For command generators, you may use the following code to avoid
            // engine ID clashes:
            // MPv3.createLocalEngineID(
            //   new OctetString("MyUniqueID"+System.currentTimeMillis())));
         USM usm = new USM(SecurityProtocols.getInstance(), localEngineID, 0);
         disp.addMessageProcessingModel(new MPv3(usm));
         snmp.listen();
         
      • Snmp

        public Snmp​(TransportMapping<? extends Address> transportMapping)
        Creates a Snmp instance that uses a MessageDispatcherImpl with all supported message processing models and the default security protols for dispatching.

        To initialize a Snmp instance created with this constructor follow this sample code:

         Transport transport = ...;
         Snmp snmp = new Snmp(transport);
         OctetString localEngineID =
           new OctetString(snmp.getMPv3().getLocalEngineID());
         USM usm = new USM(SecurityProtocols.getInstance(), localEngineID, 0);
         SecurityModels.getInstance().addSecurityModel(usm);
         snmp.listen();
         
        Parameters:
        transportMapping - TransportMapping the initial TransportMapping. You can add more or remove the same later.
      • Snmp

        public Snmp​(MessageDispatcher messageDispatcher,
                    TransportMapping<? extends Address> transportMapping)
        Creates a Snmp instance by supplying a MessageDispatcher and a TransportMapping.

        As of version 1.1, the supplied message dispatcher is not altered in terms of adding any message processing models to it. This has to be done now outside the Snmp class.

        To initialize a Snmp instance created with this constructor follow this sample code:

         Transport transport = ...;
         SecurityProtocols.getInstance().addDefaultProtocols();
         MessageDispatcher disp = new MessageDispatcherImpl();
         disp.addMessageProcessingModel(new MPv1());
         disp.addMessageProcessingModel(new MPv2c());
         Snmp snmp = new Snmp(disp, transport);
         OctetString localEngineID = new OctetString(
            MPv3.createLocalEngineID());
            // For command generators, you may use the following code to avoid
            // engine ID clashes:
            // MPv3.createLocalEngineID(
            //   new OctetString("MyUniqueID"+System.currentTimeMillis())));
         USM usm = new USM(SecurityProtocols.getInstance(), localEngineID, 0);
         disp.addMessageProcessingModel(new MPv3(usm));
         snmp.listen();
         
        Parameters:
        messageDispatcher - a MessageDispatcher instance that will be used to dispatch incoming and outgoing messages.
        transportMapping - the initial TransportMapping, which may be null. You can add or remove transport mappings later using addTransportMapping(org.snmp4j.TransportMapping<? extends org.snmp4j.smi.Address>) and removeTransportMapping(org.snmp4j.TransportMapping<? extends org.snmp4j.smi.Address>) respectively.
      • Snmp

        public Snmp​(MessageDispatcher messageDispatcher)
        Creates a Snmp instance by supplying a MessageDispatcher.

        The supplied message dispatcher is not altered in terms of adding any message processing models to it. This has to be done now outside the Snmp class.

        Do not forget to add at least one transport mapping before calling the listen method!

        To initialize a Snmp instance created with this constructor follow this sample code:

         Transport transport = ...;
         SecurityProtocols.getInstance().addDefaultProtocols();
         MessageDispatcher disp = new MessageDispatcherImpl();
         disp.addMessageProcessingModel(new MPv1());
         disp.addMessageProcessingModel(new MPv2c());
         Snmp snmp = new Snmp(disp);
         snmp.addTransportMapping(transport);
         OctetString localEngineID = new OctetString(
            MPv3.createLocalEngineID());
            // For command generators, you may use the following code to avoid
            // engine ID clashes:
            // MPv3.createLocalEngineID(
            //   new OctetString("MyUniqueID"+System.currentTimeMillis())));
         USM usm = new USM(SecurityProtocols.getInstance(), localEngineID, 0);
         disp.addMessageProcessingModel(new MPv3(usm));
         snmp.listen();
         
        Parameters:
        messageDispatcher - a MessageDispatcher instance that will be used to dispatch incoming and outgoing messages.
        Since:
        1.5
    • Method Detail

      • initMessageDispatcher

        protected final void initMessageDispatcher()
      • getMessageDispatcher

        public MessageDispatcher getMessageDispatcher()
        Returns the message dispatcher associated with this SNMP session.
        Returns:
        a MessageDispatcher instance.
        Since:
        1.1
      • setMessageDispatcher

        public void setMessageDispatcher​(MessageDispatcher messageDispatcher)
        Sets the message dispatcher associated with this SNMP session. The CommandResponder registration is removed from the existing message dispatcher (if not null).
        Parameters:
        messageDispatcher - a message dispatcher that processes incoming SNMP PDUs.
        Since:
        2.5.7
      • addTransportMapping

        public void addTransportMapping​(TransportMapping<? extends Address> transportMapping)
        Adds a TransportMapping to this SNMP session.
        Parameters:
        transportMapping - a TransportMapping instance.
      • removeTransportMapping

        public void removeTransportMapping​(TransportMapping<? extends Address> transportMapping)
        Removes the specified transport mapping from this SNMP session. If the transport mapping is not currently part of this SNMP session, this method will have no effect.
        Parameters:
        transportMapping - a previously added TransportMapping.
      • addNotificationListener

        public boolean addNotificationListener​(TransportMapping<?> transportMapping,
                                               Address listenAddress,
                                               CommandResponder listener)
        Adds a notification listener to this Snmp instance. Calling this method will create a transport mapping for the specified listening address and registers the provided CommandResponder with the internal NotificationDispatcher.
        Parameters:
        transportMapping - the TransportMapping that is listening on the provided listenAddress. Call TransportMappings.getInstance().createTransportMapping(listenAddress); to create such a transport mapping.
        listenAddress - the Address denoting the transport end-point (interface and port) to listen for incoming notifications.
        listener - the CommandResponder instance that should handle the received notifications.
        Returns:
        true if registration was successful and false if, for example, the transport mapping for the listen address could not be created.
        Since:
        2.5.0
      • addNotificationListener

        public boolean addNotificationListener​(Address listenAddress,
                                               CommandResponder listener)
        Adds a notification listener to this Snmp instance. Calling this method will create a transport mapping for the specified listening address and registers the provided CommandResponder with the internal NotificationDispatcher.
        Parameters:
        listenAddress - the Address denoting the transport end-point (interface and port) to listen for incoming notifications.
        listener - the CommandResponder instance that should handle the received notifications.
        Returns:
        true if registration was successful and false if, for example, the transport mapping for the listen address could not be created.
        Since:
        1.6
      • removeNotificationListener

        public boolean removeNotificationListener​(Address listenAddress)
        Removes (deletes) the notification listener for the specified transport endpoint.
        Parameters:
        listenAddress - the listen Address to be removed.
        Returns:
        true if the notification listener has been removed successfully.
      • getNotificationListenerTM

        public TransportMapping<?> getNotificationListenerTM​(Address listenAddress)
        Gets the transport mapping registered for the specified listen address.
        Parameters:
        listenAddress - the listen address.
        Returns:
        the TransportMapping for the specified listen address or null if there is no notification listener for that address.
        Since:
        2.5.0
      • listen

        public void listen()
                    throws java.io.IOException
        Puts all associated transport mappings into listen mode.
        Throws:
        java.io.IOException - if a transport mapping throws an IOException when its TransportMapping.listen() method has been called.
      • getNextRequestID

        public int getNextRequestID()
        Gets the next unique request ID. The returned ID is unique across the last 2^31-1 IDs generated by this message dispatcher.
        Returns:
        an integer value in the range 1..2^31-1. The returned ID can be used to map responses to requests send through this message dispatcher.
        Since:
        1.1
        See Also:
        MessageDispatcher.getNextRequestID()
      • close

        public void close()
                   throws java.io.IOException
        Closes the session and frees any allocated resources, i.e. sockets and the internal thread for processing request timeouts.

        If there are any pending requests, the ResponseListener associated with the pending requests, will be called with a null response and a InterruptedException in the error member of the ResponseEvent returned.

        After a Session has been closed it must not be used anymore.

        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in interface Session
        Throws:
        java.io.IOException - if a transport mapping cannot be closed successfully.
      • get

        public <A extends AddressResponseEvent<A> get​(PDU pdu,
                                                        Target<A> target)
                                                 throws java.io.IOException
        Sends a GET request to a target. This method sets the PDU's type to PDU.GET and then sends a synchronous request to the supplied target.
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - a PDU instance. For SNMPv3 messages, the supplied PDU instance has to be a ScopedPDU instance.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        Returns:
        the received response encapsulated in a ResponseEvent instance. To obtain the received response PDU call ResponseEvent.getResponse(). If the request timed out, that method will return null.
        Throws:
        java.io.IOException - if the PDU cannot be sent to the target.
        Since:
        1.1
      • get

        public <A extends Address> void get​(PDU pdu,
                                            Target<A> target,
                                            java.lang.Object userHandle,
                                            ResponseListener listener)
                                     throws java.io.IOException
        Asynchronously sends a GET request PDU to the given target. The response is then returned by calling the supplied ResponseListener instance.
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - the PDU instance to send.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        userHandle - an user defined handle that is returned when the request is returned via the listener object.
        listener - a ResponseListener instance that is called when pdu is a confirmed PDU and the request is either answered or timed out.
        Throws:
        java.io.IOException - if the PDU cannot be sent to the target.
        Since:
        1.1
      • getNext

        public <A extends AddressResponseEvent<A> getNext​(PDU pdu,
                                                            Target<A> target)
                                                     throws java.io.IOException
        Sends a GETNEXT request to a target. This method sets the PDU's type to PDU.GETNEXT and then sends a synchronous request to the supplied target. This method is a convenience wrapper for the send(PDU pdu, Target target) method.
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - a PDU instance. For SNMPv3 messages, the supplied PDU instance has to be a ScopedPDU instance.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        Returns:
        the received response encapsulated in a ResponseEvent instance. To obtain the received response PDU call ResponseEvent.getResponse(). If the request timed out, that method will return null.
        Throws:
        java.io.IOException - if the PDU cannot be sent to the target.
        Since:
        1.1
      • getNext

        public <A extends Address> void getNext​(PDU pdu,
                                                Target<A> target,
                                                java.lang.Object userHandle,
                                                ResponseListener listener)
                                         throws java.io.IOException
        Asynchronously sends a GETNEXT request PDU to the given target. The response is then returned by calling the supplied ResponseListener instance.
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - the PDU instance to send.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        userHandle - an user defined handle that is returned when the request is returned via the listener object.
        listener - a ResponseListener instance that is called when pdu is a confirmed PDU and the request is either answered or timed out.
        Throws:
        java.io.IOException - if the PDU cannot be sent to the target.
        Since:
        1.1
      • getBulk

        public <A extends AddressResponseEvent<A> getBulk​(PDU pdu,
                                                            Target<A> target)
                                                     throws java.io.IOException
        Sends a GETBULK request to a target. This method sets the PDU's type to PDU.GETBULK and then sends a synchronous request to the supplied target. This method is a convenience wrapper for the send(PDU pdu, Target target) method.
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - a PDU instance. For SNMPv3 messages, the supplied PDU instance has to be a ScopedPDU instance.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        Returns:
        the received response encapsulated in a ResponseEvent instance. To obtain the received response PDU call ResponseEvent.getResponse(). If the request timed out, that method will return null.
        Throws:
        java.io.IOException - if the PDU cannot be sent to the target.
        Since:
        1.1
      • getBulk

        public <A extends Address> void getBulk​(PDU pdu,
                                                Target<A> target,
                                                java.lang.Object userHandle,
                                                ResponseListener listener)
                                         throws java.io.IOException
        Asynchronously sends a GETBULK request PDU to the given target. The response is then returned by calling the supplied ResponseListener instance.
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - the PDU instance to send.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        userHandle - an user defined handle that is returned when the request is returned via the listener object.
        listener - a ResponseListener instance that is called when pdu is a confirmed PDU and the request is either answered or timed out.
        Throws:
        java.io.IOException - if the PDU cannot be sent to the target.
        Since:
        1.1
      • inform

        public <A extends AddressResponseEvent<A> inform​(PDU pdu,
                                                           Target<A> target)
                                                    throws java.io.IOException
        Sends an INFORM request to a target. This method sets the PDU's type to PDU.INFORM and then sends a synchronous request to the supplied target. This method is a convenience wrapper for the send(PDU pdu, Target target) method.
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - a PDU instance. For SNMPv3 messages, the supplied PDU instance has to be a ScopedPDU instance.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        Returns:
        the received response encapsulated in a ResponseEvent instance. To obtain the received response PDU call ResponseEvent.getResponse(). If the request timed out, that method will return null.
        Throws:
        java.io.IOException - if the inform request could not be send to the specified target.
        Since:
        1.1
      • inform

        public <A extends Address> void inform​(PDU pdu,
                                               Target<A> target,
                                               java.lang.Object userHandle,
                                               ResponseListener listener)
                                        throws java.io.IOException
        Asynchronously sends an INFORM request PDU to the given target. The response is then returned by calling the supplied ResponseListener instance.
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - the PDU instance to send.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        userHandle - an user defined handle that is returned when the request is returned via the listener object.
        listener - a ResponseListener instance that is called when pdu is a confirmed PDU and the request is either answered or timed out.
        Throws:
        java.io.IOException - if the PDU cannot be sent to the target.
        Since:
        1.1
      • trap

        public void trap​(PDUv1 pdu,
                         Target<?> target)
                  throws java.io.IOException
        Sends a SNMPv1 trap to a target. This method sets the PDU's type to PDU.V1TRAP and then sends it to the supplied target. This method is a convenience wrapper for the send(PDU pdu, Target target) method.
        Parameters:
        pdu - a PDUv1 instance.
        target - the Target instance representing the target SNMP engine where to send the pdu. The selected SNMP protocol version for the target must be SnmpConstants.version1.
        Throws:
        java.io.IOException - if the trap cannot be sent.
        Since:
        1.1
      • notify

        public void notify​(PDU pdu,
                           Target<?> target)
                    throws java.io.IOException
        Sends a SNMPv2c or SNMPv3 notification to a target. This method sets the PDU's type to PDU.NOTIFICATION and then sends it to the supplied target. This method is a convenience wrapper for the send(PDU pdu, Target target) method.
        Parameters:
        pdu - a PDUv1 instance.
        target - the Target instance representing the target SNMP engine where to send the pdu. The selected SNMP protocol version for the target must be SnmpConstants.version2c or SnmpConstants.version2c.
        Throws:
        java.io.IOException - if the notification cannot be sent.
        Since:
        1.1
      • set

        public <A extends AddressResponseEvent<A> set​(PDU pdu,
                                                        Target<A> target)
                                                 throws java.io.IOException
        Sends a SET request to a target. This method sets the PDU's type to PDU.SET and then sends a synchronous request to the supplied target.
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - a PDU instance. For SNMPv3 messages, the supplied PDU instance has to be a ScopedPDU instance.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        Returns:
        the received response encapsulated in a ResponseEvent instance. To obtain the received response PDU call ResponseEvent.getResponse(). If the request timed out, that method will return null.
        Throws:
        java.io.IOException - if the PDU cannot be sent to the target.
        Since:
        1.1
      • set

        public void set​(PDU pdu,
                        Target<?> target,
                        java.lang.Object userHandle,
                        ResponseListener listener)
                 throws java.io.IOException
        Asynchronously sends a SET request PDU to the given target. The response is then returned by calling the supplied ResponseListener instance.
        Parameters:
        pdu - the PDU instance to send.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        userHandle - an user defined handle that is returned when the request is returned via the listener object.
        listener - a ResponseListener instance that is called when pdu is a confirmed PDU and the request is either answered or timed out.
        Throws:
        java.io.IOException - if the PDU cannot be sent to the target.
        Since:
        1.1
      • send

        public <A extends AddressResponseEvent<A> send​(PDU pdu,
                                                         Target<A> target)
                                                  throws java.io.IOException
        Description copied from interface: Session
        Sends a PDU to the given target and returns the received response PDU.
        Specified by:
        send in interface Session
        Type Parameters:
        A - the Address type of target and response (i.e., must be the same)
        Parameters:
        pdu - the PDU to send.
        target - the Target instance that specifies how and where to send the PDU.
        Returns:
        the received response encapsulated in a ResponseEvent instance. To obtain the received response PDU call ResponseEvent.getResponse(). If the request timed out, that method will return null. If the sent pdu is an unconfirmed PDU (notification, response, or report), then null will be returned.
        Throws:
        java.io.IOException - if the message could not be send.
      • send

        public <A extends AddressResponseEvent<A> send​(PDU pdu,
                                                         Target<A> target,
                                                         TransportMapping<? super A> transport)
                                                  throws java.io.IOException
        Sends a PDU to the given target and if the PDU is a confirmed request, then the received response is returned synchronously.
        Specified by:
        send in interface Session
        Type Parameters:
        A - type of the target Address
        Parameters:
        pdu - a PDU instance. When sending a SNMPv1 trap PDU, the supplied PDU instance must be a PDUv1. For all types of SNMPv3 messages, the supplied PDU instance has to be a ScopedPDU instance.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        transport - specifies the TransportMapping to be used when sending the PDU. If transport is null, the associated message dispatcher will try to determine the transport mapping by the target's address.
        Returns:
        the received response encapsulated in a ResponseEvent instance. To obtain the received response PDU call ResponseEvent.getResponse(). If the request timed out, that method will return null. If the sent pdu is an unconfirmed PDU (notification, response, or report), then null will be returned.
        Throws:
        java.io.IOException - if the message could not be sent.
        See Also:
        PDU, ScopedPDU, PDUv1
      • send

        public <A extends Address> void send​(PDU pdu,
                                             Target<A> target,
                                             java.lang.Object userHandle,
                                             ResponseListener listener)
                                      throws java.io.IOException
        Description copied from interface: Session
        Asynchronously sends a PDU to the given target. The response is then returned by calling the supplied ResponseListener instance.
        Specified by:
        send in interface Session
        Type Parameters:
        A - the Address type of target and response (i.e., must be the same)
        Parameters:
        pdu - the PDU instance to send.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        userHandle - an user defined handle that is returned when the request is returned via the listener object.
        listener - a ResponseListener instance that is called when pdu is a confirmed PDU and the request is either answered or timed out.
        Throws:
        java.io.IOException - if the message could not be send.
      • send

        public <A extends Address> void send​(PDU pdu,
                                             Target<A> target,
                                             TransportMapping<? super A> transport,
                                             java.lang.Object userHandle,
                                             ResponseListener listener)
                                      throws java.io.IOException
        Description copied from interface: Session
        Asynchronously sends a PDU to the given target. The response is then returned by calling the supplied ResponseListener instance.
        Specified by:
        send in interface Session
        Type Parameters:
        A - the target Address type.
        Parameters:
        pdu - the PDU instance to send.
        target - the Target instance representing the target SNMP engine where to send the pdu.
        transport - specifies the TransportMapping to be used when sending the PDU. If transport is null, the associated message dispatcher will try to determine the transport mapping by the target's address.
        userHandle - an user defined handle that is returned when the request is returned via the listener object.
        listener - a ResponseListener instance that is called when pdu is a confirmed PDU and the request is either answered or timed out.
        Throws:
        java.io.IOException - if the message could not be send.
      • sendMessage

        protected <A extends AddressPduHandle sendMessage​(PDU pdu,
                                                            Target<A> target,
                                                            TransportMapping<? super A> transport,
                                                            PduHandleCallback<PDU> pduHandleCallback)
                                                     throws java.io.IOException
        Actually sends a PDU to a target and returns a handle for the sent PDU.
        Type Parameters:
        A - the target Address type.
        Parameters:
        pdu - the PDU instance to be sent.
        target - a Target instance denoting the target SNMP entity.
        transport - the (optional) transport mapping to be used to send the request. If transport is null a suitable transport mapping is determined from the target address.
        pduHandleCallback - callback for newly created PDU handles before the request is sent out.
        Returns:
        PduHandle that uniquely identifies the sent PDU for further reference.
        Throws:
        java.io.IOException - if the transport fails to send the PDU or the if the message cannot be BER encoded.
      • setLocalEngine

        public void setLocalEngine​(byte[] engineID,
                                   int engineBoots,
                                   int engineTime)
        Sets the local engine ID for the SNMP entity represented by this Snmp instance. This is a convenience method that sets the local engine ID in the associated MPv3 and USM.
        Specified by:
        setLocalEngine in interface Session
        Parameters:
        engineID - a byte array containing the local engine ID. The length and content has to comply with the constraints defined in the SNMP-FRAMEWORK-MIB.
        engineBoots - the number of boots of this SNMP engine (zero based).
        engineTime - the number of seconds since the value of engineBoots last changed.
        See Also:
        MPv3, USM
      • getLocalEngineID

        public byte[] getLocalEngineID()
        Gets the local engine ID if the MPv3 is available, otherwise a runtime exception is thrown.
        Specified by:
        getLocalEngineID in interface Session
        Returns:
        byte[] the local engine ID.
      • discoverAuthoritativeEngineID

        public <A extends Address> byte[] discoverAuthoritativeEngineID​(A address,
                                                                        long timeout)
        Discovers the engine ID of the SNMPv3 entity denoted by the supplied address. This method does not need to be called for normal operation, because SNMP4J automatically discovers authoritative engine IDs and also automatically synchronize engine time values. For this method to operate successfully, the discover engine IDs flag in USM must be true (which is the default).
        Type Parameters:
        A - the Address type.
        Parameters:
        address - an Address instance representing the transport address of the SNMPv3 entity for which its authoritative engine ID should be discovered.
        timeout - the maximum time in milliseconds to wait for a response.
        Returns:
        a byte array containing the authoritative engine ID or null if it could not be discovered.
        See Also:
        USM.setEngineDiscoveryEnabled(boolean enableEngineDiscovery)
      • getUSM

        public USM getUSM()
        Gets the User Based Security Model (USM). This is a convenience method that uses the MPv3.getSecurityModel(int) method of the associated MPv3 instance to get the USM.
        Returns:
        the USM instance associated with the MPv3 bound to this Snmp instance, or null otherwise.
      • getMessageProcessingModel

        public MessageProcessingModel getMessageProcessingModel​(int messageProcessingModel)
        Gets the message processing model for the supplied ID.
        Parameters:
        messageProcessingModel - a mesage processing model ID as defined in MessageProcessingModel.
        Returns:
        MessageProcessingModel a MessageProcessingModel if messageProcessingModel has been registered with the message dispatcher associated with this SNMP session.
      • processPdu

        public <A extends Address> void processPdu​(CommandResponderEvent<A> event)
        Process an incoming request or notification PDU.
        Specified by:
        processPdu in interface CommandResponder
        Type Parameters:
        A - type of the peer Address.
        Parameters:
        event - a CommandResponderEvent with the decoded incoming PDU as dispatched to this method call by the associated message dispatcher.
      • isContextEngineIdDiscoveryDisabled

        public boolean isContextEngineIdDiscoveryDisabled()
        Checks whether RFC5343 based context engine ID discovery is disabled or not. The default value is false.
        Returns:
        true if context engine ID discovery is disabled.
        Since:
        2.0
      • setContextEngineIdDiscoveryDisabled

        public void setContextEngineIdDiscoveryDisabled​(boolean contextEngineIdDiscoveryDisabled)
        Sets the RFC5343 based context engine ID discovery. The default value is false.
        Parameters:
        contextEngineIdDiscoveryDisabled - true to disable context engine ID discovery, false to enable context engine ID discovery.
        Since:
        2.0
      • handleInternalResponse

        protected void handleInternalResponse​(PDU response,
                                              PDU pdu,
                                              Address target)
      • removeCommandResponder

        public void removeCommandResponder​(CommandResponder listener)
        Removes a CommandResponder from this SNMP session.
        Parameters:
        listener - a previously added CommandResponder instance.
      • addCommandResponder

        public void addCommandResponder​(CommandResponder listener)
        Adds a CommandResponder to this SNMP session. The command responder will then be informed about incoming SNMP PDUs of any kind that are not related to any outstanding requests of this SNMP session.
        Parameters:
        listener - the CommandResponder instance to be added.
      • fireProcessPdu

        protected void fireProcessPdu​(CommandResponderEvent<?> event)
        Fires a CommandResponderEvent event to inform listeners about a received PDU. If a listener has marked the event as processed further listeners will not be informed about the event.
        Parameters:
        event - a CommandResponderEvent.
      • getReportHandler

        public Snmp.ReportHandler getReportHandler()
        Returns the report handler which is used internally to process reports received from command responders.
        Returns:
        the ReportHandler instance.
        Since:
        1.6
      • getCounterSupport

        public CounterSupport getCounterSupport()
        Gets the counter support for Snmp related counters. These are for example: snmp4jStatsRequestTimeouts, snmp4jStatsRequestTimeouts, snmp4jStatsRequestWaitTime
        Returns:
        the counter support if available. If the SNMP4JSettings.getSnmp4jStatistics() value is SNMP4JSettings.Snmp4jStatistics.none then no counter support will be created and no statistics will be collected.
        Since:
        2.4.2
      • setCounterSupport

        public void setCounterSupport​(CounterSupport counterSupport)
        Sets the counter support instance to handle counter events on behalf of this Snmp instance.
        Parameters:
        counterSupport - the counter support instance that collects the statistics events created by this Snmp instance. See also getCounterSupport().
        Since:
        2.4.2
      • setTimeoutModel

        public void setTimeoutModel​(TimeoutModel timeoutModel)
        Sets the timeout model for this SNMP session. The default timeout model sends retries whenever the time specified by the timeout parameter of the target has elapsed without a response being received for the request. By specifying a different timeout model this behaviour can be changed.
        Parameters:
        timeoutModel - a TimeoutModel instance (must not be null).
      • setReportHandler

        public void setReportHandler​(Snmp.ReportHandler reportHandler)
        Sets the report handler and overrides the default report handler.
        Parameters:
        reportHandler - a ReportHandler instance which must not be null.
        Since:
        1.6
      • getPendingSyncRequestCount

        public int getPendingSyncRequestCount()
        Gets the number of currently pending synchronous requests.
        Returns:
        the size of the synchronous request queue.
        Since:
        2.4.2
      • getPendingAsyncRequestCount

        public int getPendingAsyncRequestCount()
        Gets the number of currently pending asynchronous requests.
        Returns:
        the size of the asynchronous request queue.
        Since:
        2.4.2
      • closeTransportMapping

        protected void closeTransportMapping​(TransportMapping<?> tm)