Module org.snmp4j

Class DefaultUdpTransportMapping

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, TransportMapping<UdpAddress>
    Direct Known Subclasses:
    DTLSTM

    public class DefaultUdpTransportMapping
    extends UdpTransportMapping
    The DefaultUdpTransportMapping implements a UDP transport mapping based on Java standard IO and using an internal thread for listening on the inbound socket.
    Version:
    1.9
    • Field Detail

      • socket

        protected java.net.DatagramSocket socket
      • socketTimeout

        private int socketTimeout
      • receiveBufferSize

        private int receiveBufferSize
    • Constructor Detail

      • DefaultUdpTransportMapping

        public DefaultUdpTransportMapping()
                                   throws java.net.SocketException
        Creates a UDP transport with an arbitrary local port on all local interfaces.
        Throws:
        java.net.SocketException - if socket binding fails.
      • DefaultUdpTransportMapping

        public DefaultUdpTransportMapping​(UdpAddress udpAddress,
                                          boolean reuseAddress)
                                   throws java.net.SocketException
        Creates a UDP transport with optional reusing the address if is currently in timeout state (TIME_WAIT) after the connection is closed.
        Parameters:
        udpAddress - the local address for sending and receiving of UDP messages.
        reuseAddress - if true addresses are reused which provides faster socket binding if an application is restarted for instance.
        Throws:
        java.net.SocketException - if socket binding fails.
        Since:
        1.7.3
      • DefaultUdpTransportMapping

        public DefaultUdpTransportMapping​(UdpAddress udpAddress)
                                   throws java.io.IOException
        Creates a UDP transport on the specified address. The address will not be reused if it is currently in timeout state (TIME_WAIT).
        Parameters:
        udpAddress - the local address for sending and receiving of UDP messages.
        Throws:
        java.io.IOException - if socket binding fails.
    • Method Detail

      • prepareOutPackets

        protected java.util.List<java.net.DatagramPacket> prepareOutPackets​(UdpAddress targetAddress,
                                                                            byte[] message,
                                                                            TransportStateReference tmStateReference,
                                                                            java.net.DatagramSocket socket,
                                                                            long timeoutMillis,
                                                                            int maxRetries)
                                                                     throws java.io.IOException
        Prepare an application message for sending over the network to the specified target address.
        Parameters:
        targetAddress - the UDP address the message will be sent to.
        message - the application message to send.
        tmStateReference - the transport state reference associated with this message.
        socket - the socket that will send the message over the network. @return an ByteBuffer that contains the network representation of the message (i.e. encrypted).
        timeoutMillis - maximum number of milli seconds the connection creation might take (if connection based). Use 0 for responses or transport mappings that do not require connection establishment.
        maxRetries - maximum retries during connection creation. Use 0 for responses.
        Returns:
        a list of prepared DatagramPacket instances. By default this is a singleton list.
        Throws:
        java.io.IOException - if the preparation of the network message fails (e.g. because the encryption handshake fails).
      • close

        public void close()
                   throws java.io.IOException
        Closes the socket and stops the listener thread.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in interface TransportMapping<UdpAddress>
        Specified by:
        close in class UdpTransportMapping
        Throws:
        java.io.IOException - if the socket cannot be closed.
      • listen

        public void listen()
                    throws java.io.IOException
        Starts the listener thread that accepts incoming messages. The thread is started in daemon mode and thus it will not block application terminated. Nevertheless, the close() method should be called to stop the listen thread gracefully and free associated resources.
        Specified by:
        listen in interface TransportMapping<UdpAddress>
        Specified by:
        listen in class UdpTransportMapping
        Throws:
        java.io.IOException - if the listen port could not be bound to the server thread.
      • ensureSocket

        protected java.net.DatagramSocket ensureSocket()
                                                throws java.net.SocketException
        Throws:
        java.net.SocketException
      • setMaxInboundMessageSize

        public void setMaxInboundMessageSize​(int maxInboundMessageSize)
      • getSocketTimeout

        public int getSocketTimeout()
        Returns the socket timeout. 0 returns implies that the option is disabled (i.e., timeout of infinity).
        Returns:
        the socket timeout setting.
      • getReceiveBufferSize

        public int getReceiveBufferSize()
        Gets the requested receive buffer size for the underlying UDP socket. This size might not reflect the actual size of the receive buffer, which is implementation specific.
        Returns:
        <=0 if the default buffer size of the OS is used, or a value >0 if the user specified a buffer size.
      • setReceiveBufferSize

        public void setReceiveBufferSize​(int receiveBufferSize)
        Sets the receive buffer size, which should be greater than the maximum inbound message size. This method has to be called before listen() to be effective.
        Parameters:
        receiveBufferSize - an integer value >0 and > AbstractTransportMapping.getMaxInboundMessageSize().
      • setSocketTimeout

        public void setSocketTimeout​(int socketTimeout)
        Sets the socket timeout in milliseconds.
        Parameters:
        socketTimeout - the socket timeout for incoming messages in milliseconds. A timeout of zero is interpreted as an infinite timeout.
      • renewSocketAfterException

        protected java.net.DatagramSocket renewSocketAfterException​(java.net.SocketException socketException,
                                                                    java.net.DatagramSocket failedSocket)
                                                             throws java.net.SocketException
        If receiving new datagrams fails with a SocketException, this method is called to renew the socket - if possible.
        Parameters:
        socketException - the exception that occurred.
        failedSocket - the socket that caused the exception. By default, he socket will be closed in order to be able to reopen it. Implementations may also try to reuse the socket, in dependence of the socketException.
        Returns:
        the new socket or null if the listen thread should be terminated with the provided exception.
        Throws:
        java.net.SocketException - a new socket exception if the socket could not be renewed.
        Since:
        2.2.2
      • fireProcessMessage

        protected void fireProcessMessage​(java.net.DatagramPacket packet,
                                          java.nio.ByteBuffer bis,
                                          TransportStateReference stateReference)
      • prepareInPacket

        protected java.nio.ByteBuffer prepareInPacket​(java.net.DatagramPacket packet,
                                                      byte[] buf,
                                                      TransportStateReference tmStateReference)
                                               throws java.io.IOException
        Prepare an network packet for the application.
        Parameters:
        packet - the incoming network datagram packet.
        buf - the buffer of the packet.
        tmStateReference - the transport state reference.
        Returns:
        a byte buffer with the application data of the packet.
        Throws:
        java.io.IOException - if there occurs an IO exception during preparation.
        Since:
        3.0