CHANGE LOG OF SNMP4J ==================== [2009-04-30] Version 1.10: * Added: Tool to control log level of SNMP4J-Agent. * Improved: ArgumentParser to allow command oriented command line parsing (i.e., different synopsis depending on the chosen command). * Added: Hooks for custom OID and variable text formatters to simplify integration of MIB information/parsers. * Added: VariableBinding.toValueString(). * Fixed: MPv3 did return wrong stats counter if an unknown engine ID had been received. * Added: Zoned IPv6 address support for TransportAddress octet string mapping. * Fixed: NullPointerException in PendingRequest.pduHandleAssigned when retry > 0. * Improved: Wrapped Object.wait() calls in loops as suggested/needed by Java 1.6. * Improved: Log4LogAdapter now provides correct localization information. * Fixed: If no Snmp.cancel is called before a request timed out but at last one response has been received before, then no timeout call to ResponseListener.onResponse was performed. * Improved: Added MPv3(USM usm) constructor to make it easier to use multiple Snmp instances with dedicated USM/MPv3 combination for each Snmp instance. * Fixed: RetrievalEvent.getErrorMessage() now also returns the textual representation of the PDU error status instead of an empty string. [2008-12-15] Version 1.9.3d: * Fixed: Possible OutOfMemory when sync request often gets an IOException. * Fixed: Possible deadlock in sync TableUtils.getTable method. * Fixed: "Hanging" TCP connection when connection closed by timeout while messsage has been received in DefaultTCPTransportMapping. [2008-08-29] Version 1.9.3c: * Fixed: DefaultTCPTransportMapping could not handle source messages where a SNMP message was not sent as complete TCP message by the source, but sent in junks. [2008-08-11] Version 1.9.3b: * Fixed: NullPointerException when processing Report (regression from 1.9.3). * Improved: InterruptedException is forwarded to calling thread where appropriate. [2008-07-22] Version 1.9.3a: * Fixed: Regression when using null TransportMapping in Snmp requests not returning a response when agent does not respond in time on first retry. [2008-07-21] Version 1.9.3: * Improved: Removed creation of unnecessary Null istances. * Improved: Reduced object creation through OID and VariableBinding classes. * Improved: Canceled TimerTasks free objects early to reduce memory consumption, for example, when retries are used with Snmp. [2008-06-30] Version 1.9.2a: * Fixed: Possible NPE in DefaultUdpTransportMapping.close() and DefaultUdpTransportMapping.ListenThread.run(). [2008-06-11] Version 1.9.2: * Improved: If no context engine ID is set for NOTIFICATION and INFORM PDUs, SNMP4J now sets it to its local engine ID. Prior to 1.9.2 that was the authoritative engine ID which is the engine ID of the target in case of an INFORM PDU. * Fixed: Possible NullPointerException when sending async request (regression from 1.9.1f). [2008-05-27] Version 1.9.1g: * Fixed: NullPointerException in Snmp.close() when there has not been any confirmed request processed before. [2008-05-19] Version 1.9.1f: * Improved: Performance of PrivAES.extendShortKey. * Fixed: Inconsistent descriptions in org.snmp4j package JavaDoc. * Improved: DefaultUDPTransportMapping can be now reused after close() has been called by calling listen() again. * Improved: Exception handling of DefaultUDPTransportMapping. * Fixed: DefaultTCPTransportMapping blocked until an incoming request had been received. * Fixed: ArgumentParser error handling and fixed bug regarding default value recognition in conjunction with regular expression. * Improved: Snmp can now be closed and reused with listen() again. Internal timer is only created when needed. [2008-04-22] Version 1.9.1e: * Improved: Exception handling when transport mapping cannot be initialized due to IO exceptions. * Added: VersionInfo in org.snmp4j.version. [2008-04-09] Version 1.9.1d: * Improved: Asymmetric checking of SNMPv1 compatible variable binding in PDUv1 removed. * Fixed: Transport not copied in Snmp.PendingRequest which could cause wrong transport usage when processing retries (was not fixed correctly in 1.9.1b). [2008-04-03] Version 1.9.1c: * Fixed: Missing PDUv1.clone() which could lead to wrong SNMPv1 trap PDU encoding. * Fixed: Possible deadlock race condition when processing sync requests with retry > 0. * Improved: Pending async requests will be removed after timeout even if the response listener did not call Snmp.cancel. * Fixed: TableUtils did not return all rows if request PDUs had to be splitted because of too much columns. [2008-03-27] Version 1.9.1b: * Fixed: Transport not copied in Snmp.PendingRequest which could cause wrong transport usage when processing retries. [2008-03-25] Version 1.9.1a: * Fixed: Async request processing for broadcasts (regression bug in 1.9.1 which prevented mutliple responses for a single async request). [2008-03-18] Version 1.9.1: * Improved: OID parsing from string now supports embedded string to OID conversion, for example the following OIDs are equal: a = new OID("1.3.6.2.1.5.'hal.'.'''.'lo'.1"); b = new OID("1.3.6.2.1.5.104.97.108.46.39.108.111.1"); * Improved: Added factory pattern for creating PDU for incoming messages parsed by message processing models. * Fixed: Null LogLevel returned by JavaLogAdapter.getLogLevel. * Fixed: With async request processing and retry>0 there could have been a race condition where a response event had been generated twice for a request. * Fixed: ArgumentParser option multi parameter support which failed to parse options like "-option param1 param2" correctly. * Changed: MessageDispatcherImpl can now be used to register more than one transport mapping per address class (UDP/TCP). Nevertheless, only the first registered one will be used for sending SNMP messages if no specific transport mapping is given. * Improved: Target is cloned when used internally by Snmp instance to avoid errors through concurrent target usage. [2008-01-31] Version 1.9: * Improved: PDU.add(VariableBinding) no longer clones VariableBindings while adding it if the contained variable is dynamic. Instead VariableBinding.setVariable clones the set variable always as well the oid set by setOid(OID). * Improved: Added factories for thread and timer instances configurable through SNMP4JSettings class. * Improved: Created interfaces for ThreadPool (WorkerPool) and thread of execution (WorkerTask) as well as Timer (CommonTimer) for better Java EE intergration. * Added: ArgumentParser for simple command line parsing. * Fixed: Local engine ID could not be set for simple PDU request for the command line tool. [2007-11-06] Version 1.9 RC2: * Fixed: Walk modus of console example. * Added: -Ocs and -Ods to create and dump subtree snapshot files. [2007-10-18] Version 1.9 RC1: * Fixed: LogFactory.getLogFactory() returned null if log factory has not been initialized yet. Now a new instance of LogFactory is returned instead. * Fixed: Typo in Snmp JavaDoc (getPdu() -> getPDU()). * Added: Hook-up method in DefaultTCPTransportMapping to allow setting socket options by extending the class and overwriting the setSocketOptions method. * Added: TripleDES-EDE privacy protocol implementation. * Changed: SecurityProtocol interface to allow dynamic key extension. * Fixed: Race condition in DefaultTCPTransportMapping. [2007-05-04] Version 1.8.2: * Fixed: Null.clone() did not copy/preserve syntax. * Fixed: MPv3.addEngineID added engine ID to the local cache although if it matched the local engine ID. [2007-04-23] Version 1.8.1a: * Fixed: No error was reported by TableUtils when sending of a request failed. * Fixed: MPv3.removeEngineID fired "engine ID added" event. [2007-03-12] Version 1.8.1: * Fixed: Race condition in DefaultTCPTransportMapping that could cause message loss because messages are accidentially never send (because at the same time another message came in). * Improved: Snmp.addNotificationListener(..) sets the connection timeout to 0 for TCP transport mappings. * Fixed: Snmp.removeNotificationListener(..) caused memory leak because it did not deregister the notification transport mapping properly. * Fixed/Improved: Several code cosmetics and Serializable issues. * Improved: REPORT messages are now sent over the same transport mapping as the message reported on has been received. This improves firewall interoperability. [2007-02-01] Version 1.8: * Fixed: Race condition with sync requests in Snmp.send that could cause a deadlock. * Fixed: Added missing serialVersionUIDs. * Changed: PduHandleCallback.pduHandleAssigned(..) to use Object as type of the PDU reference. [2007-01-08] Version 1.8 RC1: * Changed: Variable is now an interface and the former abstract class implementation is now moved to AbstractVariable. Serialized Variables from 1.7.x or earliers released can be deserialized with 1.8 because the Variable interface defines the same serialVersionUID as the former Variable abstract class. * Fixed: MessageDispatcherImpl.getMessageProcessingModel no longer throws an ArrayIndexOutOfBoundsException when the requested model is not known. * Added: GenericAddress constants for the default address types "udp", "tcp", and "ip". * Fixed: OctetString.fromSubIndex for implied length values. * Added: Constants for default command responder and notification receiver ports in SnmpConstants class. * Added: Append constructor for OID class, to facilitate creating an instance OID from a class OID and an index OID. * Improved: DefaultTcpTransportMapping can now also reconnect if its connection is in state "unconnected". * Fixed: OctetString.startsWith did not work if prefix length did not match the string's length. * Added: Option (-m) to set maxMessageResponseSize for SNMPv3 requests in console example. * Improved: Clarified and implemented TODOs left from earlier versions. * Fixed: IllegalStateException seldom occured in a race condition while waiting for a sync response in Snmp.send(..) or when canceled an async response while a retry was started. * Improved: Performance of message sending and receiving due to less (narrow) synchronization. * Added: -l option to SnmpRequest console example to allow setting the local engine ID to avoid engine ID conflicts. * Added: -b option to set the engine boots counter for the console example (SnmpRequest). * Added: TreeUtils to conveniently walk sub-trees. * Fixed: Bug in LogLevel class causing incorrect log levels to be used in some cases when converting from a levels string representation. * Improved: JavaLogAdapter DEBUG level from SNMP4J (Log4J) now maps to FINE in Java logging. * Added: LogFactory can now be configured through the system property "snmp4j.LogFactory" with the factories class name. * Added: LogProxy for implementing late logger binding. * Changed: BERSerializable no longer extends Serializable. * Added: Security check for transport not listening when sending confirmed PDU. [2006-10-07] Version 1.7.6a: * Fixed: Possible deadlock in ThreadPool when stopping a busy thread pool. * Added: SMIConstants.SYNTAX_BITS to map to SMIConstants.SYNTAX_OCTET_STRING. * Added: TableUtils.destroyRow(..). * Fixed: Opaque.clone() was missing. [2006-09-04] Version 1.7.5: * Changed: VariableBinding(OID, Variable) now checks OID for not being null. * Fixed: MessageDispatcherImpl.addAuthenticationFailureListener did not work. * Fixed: OctetString.split(OctetString, OctetString). [2006-08-19] Version 1.7.4a: * Fixed: Concurrent access to the internal server thread during close() calls does no longer cause a NullPointerException. The synchronization that caused a deadlock in 1.7.4 has been removed again. * Added: Support for the obsolete SMI type BIT STRING for compatibility with very old SNMPv2 draft implementations. In order to activate support for it call SNMP4JSettings.setExtensibilityEnabled(true). See also the org.snmp4j.smi.BitString class. [2006-08-03] Version 1.7.3: * Added: SnmpConstants.getTrapOID to convert a v1 trap info to a v2/v3 notification OID. * Improved: PDU and PDUv1 now check against setting a wrong PDU type for that PDU class (i.e. V1TRAP is not allowed for PDU and ScopedPDU and NOTIFICATION is not allowed for PDUv1). * Added: DefaultPDUFactory.createPDU(int targetVersion). * Changed: PDUv1.toString() to use PDU.toString() for all PDU types other than PDU.V1TRAP. * Added: Constructor to DefaultUDPTransportMapping to create a socket that reuses an address that is in timeout state after a closed connection (TIME_WAIT). * Fixed: Fixed multi-threading issue in MPv3 where the incoming request pdu handle was overwritten which caused state information to get lost when more than one incoming request were processed concurrently. [2006-05-29] Version 1.7.2: * Added: JavaLogFactory and JavaLogAdapter for Java logging. This is now also the default logging for the SnmpRequest tool. * Improved: OctetString.isPrintable to accept whitespaces as printable characters. * Fixed: When connection closed remotely the corresponding event has not been fired in all cases (DefaultTCPTransportMapping). [2006-04-24] Version 1.7.1: * Fixed: Stackoverflow in OID.nextPeer(). * Added: ConnectionOrientedTransportMapping.close(Address peerAddress). * Improved: Reporting of RuntimeExceptions while handling retries. [2006-04-10] Version 1.7: * Improved: Logging interface enhanced. * Added: Variable.toInt() and Variable.toLong() to reduce casting when converting to native integer or long values. * Fixed: OID.mask. * Added: When PDUv1 decodes a Counter64 object, a MessageException is thrown. * Added: OID.nextPeer(), OID.successor(), and OID.predecessor(). * Fixed: ThreadPool.stop() blocked. * Fixed: Additional retries with sync requests when first try failed and second (or second to last) succeeded. * Fixed: Possible NullPointerException when closing Snmp. * Improved: Closing UDP default transport mapping first disconnects socket before closing it. * Fixed: Possible ConcurrentModificationException when using List returned by sync TableUtils.getTable(..). * Added: OctetString.fromByteArray to create an OctetString from a byte array. * Improved: OID.successor() to build correct successor for 128 subidentifier OIDs. * Added: OID.min(OID a, OID b) and OID.max(OID a, OID b) * Fixed: Handling of remote disconnect of TCP transport mapping. * Added: ConnectionOrientedTransportMapping interface and TransportStateListener event listener. * Added: Variable.getSyntaxString(). * Fixed: Bug in Snmp.send(PDU pdu, Target target, TransportMapping transport) which did not propagate the transport mapping. * Added: UsignedInteger32(int) and UsignedInteger32(byte) constructor. * Fixed: Set SnmpMessageLengthDecoder as default for DefaultTCPTransportMapping. * Added sysOREntry OID constant in SnmpConstants. [2005-12-27] Version 1.6e: * Improved: Performance of TableUtils by using a better end condition when traversing a table. [2005-12-06] Version 1.6d: * Fixed: SNMP4J did not detect USM out-of-time-window errors when checking non-authoritative times. [2005-11-30] Version 1.6c: * Fixed: Sync requests were not removed from pending requests list when a response has been received which resulted in additional retries. [2005-11-23] Version 1.6b: * Fixed: Request ID handling for request IDs > 2^31. * Fixed: If request ID < 0 of a incoming request a different request ID has been sent with the corresponding response. * Changed: To let SNMP4J generate a request ID it has to be provided as 0 (negative request IDs will no longer result in a new request ID being generated) * Fixed: Memory leak when sending synchronous requests introduced in v1.6beta. The memory leak was caused because the pending message is not removed when a response has been received which also led SNMP4J send requests messages even though a response had already been received. [2005-10-23] Version 1.6: * Fixed: Retry handling of Snmp. * Added: TaskScheduler and SchedulerTask. * Added: MessageDispatcher.getTransport(..) and made corresponding private method in MessageDispatcherImpl public. [2005-10-13] Version 1.6 RC 1: * Fixed: Asynchronous Snmp.inform() used wrong PDU type (GETBULK instead INFORM). * Fixed: MessageDispatcherImpl did not set peer transport mapping in StateReference (needed to respond correctly if multiple TCP transport mappings are used). * Fixed: IpAddress.equals(Object o) threw ClassCastException if o was not an IpAddress. * Added: Static method PDUFactory.createPDU(..). * Improved: Made Target cloneable. * Fixed: Fixed execution of broadcast requests in Snmp.java. * Added: tryToExceute in ThreadPool and added two other methods to better interrupt/cancel tasks. * Added: Interface for external handling of reports in Snmp. * Added: ConsoleLogAdapter and ConsoleLogFactory for console logging. [2005-08-24] Version 1.6 beta 1: * Added: LogAdapter.fatal(..) methods. * Fixed: TransportIpAddress.parse did not parse IPv6 addresses correctly. * Improved: Introduced TransportListener interface to clearly separate TransportMappings from MessageDispatchers. * Fixed: BER length encoding of length > 2^31. * Added: TransportMapping.getListenAddress() returns the listen address of transport mappings. * Fixed: Initialization of CommunityTarget SNMP version to 1 for constructor with address. * Fixed: MessageDispatcherImpl.getNextRequestID() did return 1 after max int has been reached for all negative integer values. * Fixed: Snmp.processReport(..) did not remove pending request when a final report has been received. * Fixed: Counter64.getBERLength() [Thanks to Jim Doble]. * Added: SnmpEngineEvent and Listener that provide a callback hook for engine ID cache updates of the MPv3 local storage. * Changed: UsmUserTable.UsmUserKey is now public. * Improved: Hash code computation for UsmUserEntry. * Fixed: Snmp.send(PDU,Target,TransportMapping) did not pass the transport mapping to the underlying calls. * Added: Support for localized USM users. * Fixed: Sometimes lost MPv3 cache information when processing reports (out of time, etc.) due to garbage collection on WeakHashMap. [2005-04-26] Version 1.5: * Fixed: Encoding of OIDs with sub-identifiers > 2^31. * Fixed: Counter64 encoding error for some values > 2^24. * Fixed: Timeout option descritpion of console tool. * Added: Some debug messages for notInTimeWindow exceptions. * Changed: Address is now an interface (was an abstract class). An new abstract base class for IpAddress and TransportIpAddress has been introduced which is called SMIAddress. Because of the class type change of Address you will need to recompile your application, when upgrading to SNMP4J 1.5. * Improved: UdpAddress and TcpAddress BER encoding routines now encode the respective address as OCTET STRING according to the TRANSPORT-ADDRESS-MIB. * Fixed: ThreadPool.stop did not notify TaskManagers which could block the stop() method execution. * Improved: By default system properties are no longer used to determine SNMP4J configuration, instead the configuration (which transport protocols, security protocols, SMI syntaxes, address types, etc. to use) is hard coded and contains all available features. To add additional features without changing SNMP4J classes/code, use the SNMP4JSettings.setExtensibility method. Consequently, SNMP4J can now be used with Applets. * Added: OID.mask(OctetString) to mask an OID by a bit string. * Added: TransportIpAddress.getValue() which returns the address value as a byte array. * Fixed: Typo in -OtCSV options and description CVS changed into CSV. * Added: snmpInPkts counter support. * Improved: Console example can now be extended more easily. * Changed: Made Snmp default constructor public. * Added: Snmp(MessageDispatcher). [2005-04-04] Version 1.2.1: * Changed: Due to incomplete state of Log4J 1.3-alpha6 and for the sake of a more flexible logging interface the new package org.snmp4j.log has been introduced. By default SNMP4J does not use logging. To enable logging, for example Log4J logging which is supported out-of-the-box, use "static { LogFactory.setLogFactory(new Log4LogFactory());}" [2005-03-30] Version 1.2: * Improved: Replaced the log4j-1.3alpha-6.jar with a patched version that does not print out Log4J internal messages. These internal logging messages will be also removed from the official log4j 1.3 version once it is released as beta. * Added: OctetString.startsWith(OctetString). * Changed: Logging API again back from JCL to Log4J-1.3's UGLI independent logging interface. * Improved: Privacy protocols know also return their maximum key length. Privacy keys now adhere to that maximum length when keys are generated by passwordToKey. * Added: USM.getSecurityProtocols() * Added: OID.toByteArray() to simplify conversion of index OIDs to SMI values. * Fixed: OctetString.compareTo function did not compare byte values as unsigned causing wrong ordering of bytes > 127. * Added: OctetString.set(int, byte). * Changed: Target is now an interface (as an abstract class). AbstractTarget has been introduced which implements the same functionality as the former Target object. CAUTION: v1.2 is therefore *not* binary compatible with older versions. Please recompile your classes when upgrading to v1.2! * Fixed: Snmp.trap threw always an exception. * Added: USM.updateUser(..) and new constructor that accepts a custom SecurityProtocols set. * Added: zeroDotZero to SnmpConstants. * Changed: Log4J logging is now wrapped by the Apache commons logging to be more independent regarding the used logging framework. * Fixed: notInTimeWindow report was sent with wrong securityLevel (should be authNoPriv - was noAuthNoPriv). * Improved: StateReference now also holds the TransportMapping that was/should be used to communicate with the peer. * Fixed: Added missing clone() method to TimeTicks. * Added: Range option for plain OIDs for the command line parsing of the SnmpRequest command line tool. The range specification allows more convenient specification of the columns of a table (for example '1.3.6.1.2.1.2.2.1-18'). * Fixed: JavaDoc of Snmp class used deprecated methods. [2005-02-17] Version 1.1.1: * Fixed: BER decoding of zero Counter64 value and optimized encoding of Counter64 values. * Added: -tCVS and -ttCVS operation modes to support CVS dumps of tabular SNMP data with the console example (SnmpRequest.java). [2005-02-04] Version 1.1a: * Added: UsmUser checks for minimum passphrase length (8). See RFC3414 §11.2. * Fixed: TableUtils did not recognize SNMP exception VB status and errors (SNMPv1) indicating table boundary. [2005-02-02] Version 1.1: * Improved: ResponseEvent now includes the peer address of the response sending entity. * Added: PDU.toArray() and PDU.addAll(VariableBinding[]). * Added: OID.trim(int n) which removes the n rightmost subidentifiers of an OID. * Changed: MessageDispatcherImpl.addTransportMapping does not replace a transport mapping for the same address class any more. * Changed: Snmp.sendPDU methods are now deprecated, because they do not return the peer address. The new Snmp.send methods return a ResponseEvent object that provides this information. * Added: PDU type send methods that set the PDU type when sending the PDU. * Added: Snmp.addNotificationListener() and related methods to support simple (de)registration of inbound only transport mappings. * Improved: Snmp's and DefaultTcpTransportMapping's threads now run as daemon threads and thus no longer prevents an application to exit. Nevertheless, it is strongly recommended to call Snmp.close() before exiting to close all ports nicely. * Improved: Removed redundant class UsmUserNameTable. * Added: Methods to extract and delete USM users (USM class). * Improved: MPv3.Cache entries are now removed even if the target agent does not respond. * Changed: Made OctetString.isPrintable() public. * Added: TransportMapping.isListening(). * Added: TransportMappings class which allows generic mapping of address classes to transport mappings. * Fixed: TableUtils did not handle sparse tables correctly. * Fixed: MPv3.setLocalEngineID did not check parameter. * Fixed: DefaultPDUFactory did not create SNMPv3 ScopedPDUs. * Changed: Replaced -D option of console tool by -d to avoid name clashes with JVM option -D. [2005-01-13] Version 1.0.4c: * Fixed: UsmUserKey.compareTo and UsmUserEntry.compareTo methods did not compare classes engine ID correctly. [2004-11-22] Version 1.0.4b: * Fixed: In some situations an SNMPv3_USM_ERROR could have returned when trying to send a request/response PDU to a target for whose engine ID no engine time notion has been stored in the local cache. [2004-11-18] Version 1.0.4a: * Fixed: TableUtils.getTable did not cancel requests which caused a memory leak. * Fixed: UnsupportedOperationException was thrown in TableUtils.getTable() when using it on a SNMPv1 target. * Fixed: Unclosed file handle when reading smisyntax.properties. * Fixed: Memory leak when sending asynchronous requests. When sending an async request do not forget to cancel the request using Snmp.cancel(PDU, ReponseListener) within the onResponse method of your listener! * Fixed: Unclosed file handles when reading address.properties and SecurityProtocols.properties. * Added: Synchronous TableUtils.getTable() method. * Improved: TransportMapping inheritance regarding asynchronous message processing support. * Added: DefaultPDUFactory implementation. * Fixed: PDU.isConfirmedPdu(). [2004-11-04] Version 1.0.3c: * Added: The DefaultUdpTransportMapping and DefaultTcpTransportMapping now by default support asynchronous (i.e. multi-threaded) message processing. For synchronous message processing the flag asyncMsgProcessingSupported should be set to false, to increase performance! [2004-10-30] Version 1.0.3b: * Fixed: TableUtils did use GETBULK PDU type also for SNMPv1 targets. * Improved: By default, the MessageDispatcherImpl class now checks for inconsistencies between PDU type and used SNMP version. [2004-10-13] Version 1.0.3a: * Fixed: Race condition in Variable.registerSyntaxes(). In a multithreaded usage, this could have caused some BER decoding failures. * Improved: Minor JavaDoc improvements. [2004-08-20] Version 1.0.3: * Added: Variable.isException(). * Improved: DefaultUdpTransportMapping now closes socket in close() even if listen() has not been called before. * Added: Variable.createVariableFromSyntax(int smiSyntax). * Fixed: Uncaught exception thrown by the Snmp class because of an incomplete synchronization within the retry processing. * Improved: Several JavaDoc improvements, for example added documentation for the different PDU types. [2004-08-07] Version 1.0.2: * Improved: Added constants for exception Null variables and Null constructor that takes an exception status syntax as parameter. * Fixed: GenericAddress.parseAddress was not multi-threading safe. * Added: Package org.snmp4j.util containing a ThreadPool implementation and a MultiThreadedMessageDispatcher. * Added: TableUtils to retrieve a columns of one or more SNMP tables effeciently and row oriented using GETBULK requests. * Added: OID(int[] rawOID, int offset, int length) constructor. [2004-07-02] Version 1.0.1a: * Fixed: Two regression issues that broke the TCP transport mapping. * Fixed: TCP transport mapping left an unused timer thread running when closed. [2004-06-26] Version 1.0.1: * Fixed: SNMPv3 trap sending did not use local engine ID and time values (although it should have because the sending engine is the authoritative). * Fixed: Context engine ID was not set to the local engine ID when empty and the sent PDU was a unconfirmed one. * Added: DefaultCounterListener which implements SNMP error counters in a generic way. It is not used by SNMP4J by default. * Fixed: Incorrect usage description in SnmpRequest. * Fixed: clone() methods of Counter32 and Gauge32. * Added: clone() method to VariableBinding. * Added: Counter32.increment() and Counter64.increment() methods. [2004-06-21] Version 1.0a: * Fixed: Stack overflow when using PDUv1 for other PDU types than PDU.V1TRAP (which is *not* recommended anyway!). * Improved: MessageDispatcherImpl.sendPdu throws now a MessageException when USM fails to prepare the outgoing message (instead of a NullPointerException). * Fixed: Two race conditions when creating Snmp instances concurrently (two singleton factory methods needed to be synchronized). * Improved: Console example returned "strange variable ..." when reaching end of a subtree-walk. [2004-05-21] Version 1.0: * Fixed: Several small cosmetic fixes in code, build, and JavaDoc. [2004-05-08] Version 1.0 RC2: * Fixed: SNMPv3 interoperability problems due to incorrect (too long) Mesage Authentication Code length. * Fixed: Regression bug in the privacy module that has been introduced by the optimization in the last version. * Fixed: The SNMP4J-Tool did not use supplied context and contextEngineID parameters. [2004-04-20] Version 1.0 RC: * Fixed: Bug in Counter64.getBERLength() - length was too short by one for very big counter values. * Improved: Performance of BER encoding and decoding because less buffer copying is used now. There is still a small optimization potential for SNMPv3 message handling. This will be utilized in the final 1.0 release. * Improved: Report handling. * Improved: JavaDoc but package descriptions are still incomplete. * Fixed: When Snmp.close() has been called all resources are freed now - also the internal message processing thread. [2004-04-07] Version 1.0beta(2): * Fixed: The dist/lib/SNMP4J.jar was not up-to-date and contained a bug, the sources did not contain. If you have downloaded the intial release you can simply rebuild it using "ant". There is then no need to download the beta(2) release.