org.snmp4j.transport
Class DefaultTcpTransportMapping

java.lang.Object
  extended by org.snmp4j.transport.AbstractTransportMapping
      extended by org.snmp4j.transport.TcpTransportMapping
          extended by org.snmp4j.transport.DefaultTcpTransportMapping
All Implemented Interfaces:
ConnectionOrientedTransportMapping, TransportMapping

public class DefaultTcpTransportMapping
extends TcpTransportMapping

The DefaultTcpTransportMapping implements a TCP transport mapping with the Java 1.4 new IO API.

It uses a single thread for processing incoming and outgoing messages. The thread is started when the listen method is called, or when an outgoing request is sent using the sendMessage method.

Version:
1.11
Author:
Frank Fock

Nested Class Summary
static class DefaultTcpTransportMapping.SnmpMesssageLengthDecoder
           
 
Field Summary
 
Fields inherited from class org.snmp4j.transport.TcpTransportMapping
tcpAddress
 
Fields inherited from class org.snmp4j.transport.AbstractTransportMapping
asyncMsgProcessingSupported, maxInboundMessageSize, transportListener
 
Constructor Summary
DefaultTcpTransportMapping()
          Creates a default TCP transport mapping with the server for incoming messages disabled.
DefaultTcpTransportMapping(TcpAddress serverAddress)
          Creates a default TCP transport mapping that binds to the given address (interface) on the local host.
 
Method Summary
 void close()
          Closes all open sockets and stops the internal server thread that processes messages.
 boolean close(Address remoteAddress)
          Closes a connection to the supplied remote address, if it is open.
 long getConnectionTimeout()
          Gets the connection timeout.
 int getMaxInboundMessageSize()
          Gets the inbound buffer size for incoming requests.
 MessageLengthDecoder getMessageLengthDecoder()
          Returns the MessageLengthDecoder used by this transport mapping.
 int getPriority()
          Returns the priority of the internal listen thread.
 java.lang.String getThreadName()
          Returns the name of the listen thread.
 boolean isListening()
          Returns true if the transport mapping is listening for incoming messages.
 boolean isServerEnabled()
          Checks whether a server for incoming requests is enabled.
 void listen()
          Listen for incoming and outgoing requests.
 void sendMessage(Address address, byte[] message)
          Sends a SNMP message to the supplied address.
 void setConnectionTimeout(long connectionTimeout)
          Sets the connection timeout.
 void setMaxInboundMessageSize(int maxInboundMessageSize)
          Sets the maximum buffer size for incoming requests.
 void setMessageLengthDecoder(MessageLengthDecoder messageLengthDecoder)
          Sets the message length decoder.
 void setPriority(int newPriority)
          Changes the priority of the server thread for this TCP transport mapping.
 void setServerEnabled(boolean serverEnabled)
          Sets whether a server for incoming requests should be created when the transport is set into listen state.
protected  void setSocketOptions(java.net.ServerSocket serverSocket)
          Sets optional server socket options.
 void setThreadName(java.lang.String name)
          Sets the name of the listen thread for this UDP transport mapping.
 
Methods inherited from class org.snmp4j.transport.TcpTransportMapping
addTransportStateListener, fireConnectionStateChanged, getAddress, getListenAddress, getSupportedAddressClass, removeTransportStateListener
 
Methods inherited from class org.snmp4j.transport.AbstractTransportMapping
addMessageDispatcher, addTransportListener, fireProcessMessage, isAsyncMsgProcessingSupported, removeMessageDispatcher, removeTransportListener, setAsyncMsgProcessingSupported
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.snmp4j.TransportMapping
addMessageDispatcher, addTransportListener, removeMessageDispatcher, removeTransportListener
 

Constructor Detail

DefaultTcpTransportMapping

public DefaultTcpTransportMapping()
                           throws java.net.UnknownHostException,
                                  java.io.IOException
Creates a default TCP transport mapping with the server for incoming messages disabled.

Throws:
java.net.UnknownHostException
java.io.IOException - on failure of binding a local port.

DefaultTcpTransportMapping

public DefaultTcpTransportMapping(TcpAddress serverAddress)
                           throws java.net.UnknownHostException,
                                  java.io.IOException
Creates a default TCP transport mapping that binds to the given address (interface) on the local host.

Parameters:
serverAddress - the TcpAddress instance that describes the server address to listen on incoming connection requests.
Throws:
java.net.UnknownHostException - if the specified interface does not exist.
java.io.IOException - if the given address cannot be bound.
Method Detail

listen

public void listen()
            throws java.io.IOException
Listen for incoming and outgoing requests. If the serverEnabled member is false the server for incoming requests is not started. This starts the internal server thread that processes messages.

Specified by:
listen in interface TransportMapping
Specified by:
listen in class TcpTransportMapping
Throws:
java.net.SocketException - when the transport is already listening for incoming/outgoing messages.
java.io.IOException

setPriority

public void setPriority(int newPriority)
Changes the priority of the server thread for this TCP transport mapping. This method has no effect, if called before listen() has been called for this transport mapping or if SNMP4J is configured to use a non-default thread factory.

Parameters:
newPriority - the new priority.
Since:
1.2.2
See Also:
Thread.setPriority(int)

getPriority

public int getPriority()
Returns the priority of the internal listen thread.

Returns:
a value between Thread.MIN_PRIORITY and Thread.MAX_PRIORITY.
Since:
1.2.2

setThreadName

public void setThreadName(java.lang.String name)
Sets the name of the listen thread for this UDP transport mapping. This method has no effect, if called before listen() has been called for this transport mapping.

Parameters:
name - the new thread name.
Since:
1.6

getThreadName

public java.lang.String getThreadName()
Returns the name of the listen thread.

Returns:
the thread name if in listening mode, otherwise null.
Since:
1.6

close

public void close()
Closes all open sockets and stops the internal server thread that processes messages.

Specified by:
close in interface TransportMapping
Specified by:
close in class TcpTransportMapping

close

public boolean close(Address remoteAddress)
              throws java.io.IOException
Closes a connection to the supplied remote address, if it is open. This method is particularly useful when not using a timeout for remote connections.

Parameters:
remoteAddress - the address of the peer socket.
Returns:
true if the connection has been closed and false if there was nothing to close.
Throws:
java.io.IOException - if the remote address cannot be closed due to an IO exception.
Since:
1.7.1

sendMessage

public void sendMessage(Address address,
                        byte[] message)
                 throws java.io.IOException
Sends a SNMP message to the supplied address.

Specified by:
sendMessage in interface TransportMapping
Specified by:
sendMessage in class TcpTransportMapping
Parameters:
address - an TcpAddress. A ClassCastException is thrown if address is not a TcpAddress instance.
message - byte[] the message to sent.
Throws:
java.io.IOException

getConnectionTimeout

public long getConnectionTimeout()
Gets the connection timeout. This timeout specifies the time a connection may be idle before it is closed.

Returns:
long the idle timeout in milliseconds.

setConnectionTimeout

public void setConnectionTimeout(long connectionTimeout)
Sets the connection timeout. This timeout specifies the time a connection may be idle before it is closed.

Specified by:
setConnectionTimeout in interface ConnectionOrientedTransportMapping
Specified by:
setConnectionTimeout in class TcpTransportMapping
Parameters:
connectionTimeout - the idle timeout in milliseconds. A zero or negative value will disable any timeout and connections opened by this transport mapping will stay opened until they are explicitly closed.

isServerEnabled

public boolean isServerEnabled()
Checks whether a server for incoming requests is enabled.

Returns:
boolean

getMessageLengthDecoder

public MessageLengthDecoder getMessageLengthDecoder()
Description copied from class: TcpTransportMapping
Returns the MessageLengthDecoder used by this transport mapping.

Specified by:
getMessageLengthDecoder in interface ConnectionOrientedTransportMapping
Specified by:
getMessageLengthDecoder in class TcpTransportMapping
Returns:
a MessageLengthDecoder instance.

setServerEnabled

public void setServerEnabled(boolean serverEnabled)
Sets whether a server for incoming requests should be created when the transport is set into listen state. Setting this value has no effect until the listen() method is called (if the transport is already listening, close() has to be called before).

Parameters:
serverEnabled - if true if the transport will listens for incoming requests after listen() has been called.

setMessageLengthDecoder

public void setMessageLengthDecoder(MessageLengthDecoder messageLengthDecoder)
Sets the message length decoder. Default message length decoder is the DefaultTcpTransportMapping.SnmpMesssageLengthDecoder. The message length decoder must be able to decode the total length of a message for this transport mapping protocol(s).

Specified by:
setMessageLengthDecoder in interface ConnectionOrientedTransportMapping
Specified by:
setMessageLengthDecoder in class TcpTransportMapping
Parameters:
messageLengthDecoder - a MessageLengthDecoder instance.

getMaxInboundMessageSize

public int getMaxInboundMessageSize()
Gets the inbound buffer size for incoming requests. When SNMP packets are received that are longer than this maximum size, the messages will be silently dropped and the connection will be closed.

Specified by:
getMaxInboundMessageSize in interface TransportMapping
Overrides:
getMaxInboundMessageSize in class AbstractTransportMapping
Returns:
the maximum inbound buffer size in bytes.

setMaxInboundMessageSize

public void setMaxInboundMessageSize(int maxInboundMessageSize)
Sets the maximum buffer size for incoming requests. When SNMP packets are received that are longer than this maximum size, the messages will be silently dropped and the connection will be closed.

Parameters:
maxInboundMessageSize - the length of the inbound buffer in bytes.

isListening

public boolean isListening()
Description copied from interface: TransportMapping
Returns true if the transport mapping is listening for incoming messages. For connection oriented transport mappings this is a prerequisite to be able to send SNMP messages. For connectionless transport mappings it is a prerequisite to be able to receive responses.

Returns:
true if this transport mapping is listening for messages.

setSocketOptions

protected void setSocketOptions(java.net.ServerSocket serverSocket)
Sets optional server socket options. The default implementation does nothing.

Parameters:
serverSocket - the ServerSocket to apply additional non-default options.

Copyright 2005-2010 Frank Fock (SNMP4J.org)

Copyright © 2011 SNMP4J.org. All Rights Reserved.