www.pudn.com > javasnmpv3.rar > CHANGES.snmp++v3


Changes snmp++v3.2.22
=====================

- Fixed: After a CTarget::clear() get_type() returned type_base
  instead of type_ctarget (Lior Klibansky).
- Fixed: The message id could be negative if engine boots is
  greater than 0x7fff. (Wai-Kiong Choy)
- Fixed: Removed lots of compiler warnings (-Wcast-qual, -Wshadow),
  unused code, and other things (Jeremy Nimmer)
- Added: User defined log class USER_LOG.
- Fixed: Thread handle was not closed on Snmp::stop_poll_thread() on
  WIN32 platform. (found from Stoyan Haralampiev).
- Fixed: Possible deadlock after a call to Snmp::engine_id_discovery().
- Fixed: debughexprintf() did not print the last output line.
- Fixed: Check for duplicate entries in engine id table.
- Fixed: Don't allow SNMP INFORM over SNMPv1.
- Fixed: If a SNMPv3 response was received from a different address/port
  than the request was sent to, no valid mapping address/port <-> enigne id
  was stored, so no communication was possible.

Changes snmp++v3.2.21
=====================

- Added: New overloeaded Oid::set_data() that takes a char array instead
  of ulong array.
- Fixed: The dotted oid string parser no longer accepts strings like
  "1.3.6.$public", "1.3.6$public$" or "1.3.6.$public$1".
- Fixed: Removed a lot of compiler warnings on Windows x64 (with help of
  Sanjay Bhatia). Introduced new type for sockets (SnmpSocket), and
  removed SNMPHANDLE type.
- Changed: Removed global mutex for v3MP and USM.
- Fixed: sockets were not closed if bind failed. (found from John McCaskey)
- Fixed: Engine id discovery did not work when sending SNMPv3 request
  to IPv4 Address over IPv6 socket.
- Fixed: For async SNMPv3 requests that resulted always in a unknown
  engine id or not in time report from the agent the Snmp class continued
  to resend a request to the agent.
- Fixed: USM was not thread safe (found from John McCaskey):
  Changing users from two different threads or changing users
  while messages of these users are processed could cause
  segmentation faults. The following functions of USM now behave
  different than before or require calls to new functions:
  all three get_user() functions, peek_first_user(), peek_next_user(),
  peek_first_luser(), peek_next_luser(), get_user_count().
  If you use any of these functions, read the new documentation in
  usm_v3.h and change your code (like it was done for the QtExample).
- Changed: The functions to set/get the trap listen port of
  CNotifyEventQueue ar no longer static. Use the new functions
  Snmp::notify_set/get_listen_port() instead.
- Removed: Old X11 code, user defined events and timeouts.
- Improved: Counter64 now uses 64 bit integer for math
  operations, instead of long double. 
- Fixed: Zero length UDP packets will no longer trigger
  a transport-level-failed callback.

Changes snmp++v3.2.20a
======================

- Improved: Detect too large received messages.
- Improved: Removed hard coded limit for max number of Vbs
  (PDU_MAX_VBS) in a Pdu object.
- Fixed: Bug in SNMPv3 encryption code which will lead to a
  crash after a random number of encryptions (Stuart Marks).

- Improved: Compilation of address.cpp for Solaris.

Changes snmp++v3.2.19
=====================

- Fixed: Requests with nonzero but wrong security engine id
  now result in a unknown engine id report.
- Added: New functions USM::add_usm_user() and
  new functions to remove engine ids and hosts from
  the v3MP and USM tables.
- Changed: command line arguments of consoleExamples.

Changes snmp++v3.2.18
=====================

- Added: Privacy protocol 3DES. The Auth/Priv interface was
  modifed. (based on patch from Pierre Pacchioni)
- Fixed: Possible memory leak in mp_v3.cpp v3MP::snmp_parse(..).
- Fixed: Uninitialized variable in asn1.cpp asn_parse_length(..).
- Fixed: Uninitialized variables in snmpmsg.cpp 
  SnmpMessage::unload when v3MP::I->snmp_parse() fails.
  (Reported by Rob Crawford)
- Changed: ID of privacy protocol AES128 now is 4
  as required by the RFC.
- Fixed: Vb::get_value(ptr, len, maxlen) may write
  maxlen+1 bytes into ptr buffer (Daniel Suman).
  This function now is  Vb::get_value(ptr, len, maxlen,
  add_null_byte) where the default for add_null_byte
  is false.
- Improved: Workaround for Cisco SNMP agents that set
  request ids to 0x7fffffff in report messages.
- Fixed: Make auth_priv.h/cpp compile if both OpenSSL and
  LibTomCrypt are defined.
- Added: Basic support for VxWorks with PPC603 (Thanks to
  Lee Noll).

Changes snmp++v3.2.17
=====================

- Changed: Updated auth_priv.cpp for LibTomCrypt 1.02
- Changed: Moved logging classes from agent++ into
  snmp++. (Fedja Jeleskovic)
  Function debug_set_logfile() has been removed, use
  DefaultLog::init(new AgentLogImpl("filename")) and
  DefaultLog::log()->set_filter() instead.
  All logging within snmp++ will be moved to the LOG_XXX
  macros and the debugprintf() function will be removed.
- Changed: Renamed "#ifdef alpha" to "#ifdef __osf__". When
  compiling for DigitalUnix/Tru64 make sure, that __osf__
  is defined.

Changes snmp++v3.2.16
=====================

- Improved: notify_register() now returns correct error codes.
- Added: Snmp::start_poll_thread() that starts a new thread
  that polls for async responses and informs/traps. The thread
  will be stopped automatically in the destructor. It also can
  be stopped using Snmp::stop_poll_thread(). (Fedja Jeleskovic)
- Added: New transport layer error code
  SNMP_CLASS_TL_ACCESS_DENIED for (errno == EACCES)
- Improved: new define SNMP_PP_MUTABLE that can be
  defined to mutable for compilers that support
  mutable member variables.
- Changed: renamed OctetStr::set_hex_np_char() to
  set_np_char()
- Improved: get_printable() will return the same buffer
  for each call if the object wasn't changed.
- Added: Pdu::get_max_vbs() to get the value of
  PDU_MAX_VBS at runtime.
- Fixed: Bug in snmperrs.h (Jason Olenhouse)

Changes snmp++v3.2.15
=====================

- Fixed: Bug in asn1.cpp for systems where
  sizeof(long) != sizeof(*long) (Hu Shu)
- Fixed: timeout calculation in
  EventListHolder::SNMPProcessEvents() (Xu Manjiang)
- Fixed: OctetStr::clear() now sets the length to
  zero (Mr. AWD)

- Fixed: Set sin_len of struct sockaddr_in before calling
  bind(). Define CYGPKG_NET_OPENBSD_STACK to enable it.
  (Harald Kuethe)
- Changed: Pdu class checks Vb validity after all
  assignments. It is no longer possible to add
  a Vb that is not valid.
  Some set/get member functions now return bool
  instead of void.

Changes snmp++v3.2.14
=====================

- Improved: Return value of Pdu functions 
  get/set_notify_id and get/set_notify_enterprise. 
  (Marek Malowidzki)
- Fixed: Check return value of new in
  SnmpCollection::operator+=() (Marek Malowidzki)
- Fixed: Setting a byte with Address::operator[] will
  set validity of the object to true.
- Improved: Behaviour of OctetStr::get_printable() for
  non printable strings can now be configured.

Changes snmp++v3.2.13a
======================

- Fixed: Version info was not updated.
- Fixed: Compilation problems with _NO_SNMPv3

- Changed: The user "initial" is no longer automatically
  added to the USM.
- Fixed: Oid class freed memory twice after
  failed call to operator+=().
- Added: Support for AIX 5 (by courtesy of
  Anders Malmborg)

Changes snmp++v3.2.12a
======================

- Fixed: wrong encryption/decryption for
  DES and IDEA.
- Fixed: consoleExamples can use IPv6.

- Fixed: Do not accept illegal lengths for
  authentication parameters.
- Removed: Obsolete XExample.
- Fixed: Compilation problem in address.cpp
  if __sun is defined (Kostas Lykiardopoulos)
- Improved: Modified constructor of Snmp class
  to allow binding to IPv6 socket.
- Added: AES can now be used with OpenSSL.
- Improved: Compilation under Tru64.
- Fixed: Return code of delete_entry and 
  delete_entries in class USMUserTable returned
  SNMPv3_MP_OK instead SNMPv3_USM_OK.

Changes snmp++v3.2.11
=====================

- Improved: Declared some methods as const
  (Marek Malowidzki).
- Improved: Use shortest possible encoding for
  serializing SNMP messages to improve compatibility
  with buggy/broken SNMP-Tools (Henning Eggers).
- Fixed: Compilation problems on SUN
  (Fabrice Bacchella)
- Improved: declared some methods as const
- Improved: Moved the headers to include/snmp_pp/
  to avoid name colissions.
- Improved: QtExample can receive traps/informs.
- Fixed: Compilation problems with BC++ 5.0
  (Vinoth, Christian Cheney)
- Improved: Added namespace Snmp_pp (Sorin C.)

Changes snmp++v3.2.10a
======================

- Changed: Added two defines _USER_DEFINED_EVENTS
  and _USER_DEFINED_TMEOUTS (enabled by default)
  to switch off the user defined event/timeout queues.
- Improved: Added const to various functions and
  function arguments (Marek Malowidzki)

- Fixed: Added missing DLLOPTs in msec.h (Christian Cheney).

- Improved: The v3MP uses the Snmp object that received
  the message for sending out report messages (needed
  for systems with multiple IP addresses).
  The constructor of the v3MP class was changed, as
  the pointer to the Snmp object is no longer needed
  at construction time.

- Changed: Snmp::notify_register() no longer binds
  to all interfaces, but to the address specified
  in the constructor of the Snmp object.

Changes snmp++v3.2.9d
=====================

- Improved: Removed usage of some multi-threading 
  critical C routines (for example strtok). Although
  on many systems, these routines are multi-threading
  safe, this may not be true for some systems. 

- Fixed: High CPU usage in SNMPProcessEvents() on
  Win32 platform.

- Fixed: SNMPv1 trap sysUpTime TimeTicks where not
  decoded correctly as unsigned integer value, resulting
  in a parse error when sysUpTime > 2^31-1.
- Improved: Log levels.
- Fixed: USMUserNameTable::add_entry() did not update
  the privacy password length.

- Improved: Examples now use the 
  Snmp::socket_startup() on Win32 platforms.

- Added: Two static methods Snmp::socket_startup() and
  Snmp::socket_cleanup() that initialize/cleanup
  Winsock library on WIN32 and do nothing for
  other platforms. The startup method must be
  called before creating Snmp or Address objects.

- Changed: Type of some vars in UsmUserNameTableEntry
  from uchar* to OctetStr. Check if your code uses 
  this struct.
- Changed: engineBoots and engineTime are set to 0 for
  SNMPv3 noAuthNoPriv messages.

Changes snmp++v3.2.8
====================

- Added: Support for OpenSSL.
- Fixed: Compile problem in uxsnmp.cpp. 

Changes snmp++v3.2.7c
=====================

- Fixed: Synchronization problem with mpV3::Cache.
  (Henning Eggers)

- Fixed: Memory leak in OctetStr::from_hex_string.
  (Kent Gibson)
- Changed: EventListHolder::SNMPProcessEvents() 
  param is now in milliseconds (was seconds).

- Fixed: Memory leak if an async SNMPv3 message timed
  out (Henning Eggers).
- Added: Method Snmp::broadcast_discovery() to do
  SNMP broadcast discovery. 
- Improved: Console examples now accept 0 retries,
  removed warnings with gcc 3.2, and v3MP is now
  always created.

- Added: Qt 3.1 example that demonstrates SNMP++v3
  usage with a GUI (Trolltechs Qt 3.1).
- Added: Methods to store, load, and query USM users.
- Improved: Some minor clean-ups.

Changes snmp++v3.2.6b
=====================

- Fixed: GenAddress passed IPv4 addresses as IPv6 
  addresses.
- Changed: By default IDEA is not compiled into 
  SNMP++ by default because patent licensing is
  required for commercial use. Please #define 
  _USE_IDEA if you want to compile IDEA into SNMP++.
  For more details please read also README.v3.

- Fixed: Do not add -Dsun to compile command. If
  you have problems with the SnmpCollection template
  look at the instructions in collect.h. 
- Fixed: Destroy Mutex in ~EventListHolder(). 
- Improved: Lots of cleanups for the address classes.
  This leads to the following incompatibilities to 
  former versions:
  + Enums addr_type and version_type are now inside
    class Address
  + MacAddress, IpxAddress and IpxSockAddress are no
    longer included by default, but can be enabled
    in config_snmp_pp.h 

Changes snmp++v3.2.5d
=====================

- Improved: Made AuthMD5::password_to_key more
  robust against empty passwords.
- Changed: The Win32 DLL export macros now use
  SNMP_PP_DLL instead _USRDLL.
- Changed: Moved VC++ project files in a 
  separate package. 

- Improved: Minor issues with IPv6 support.
- Improved: Socket handling.

- Fixed: uxsnmp.cpp: Detecting error from socket()
  return values.

- Fixed: Moved SNMPAddInput() SNMPRemoveInput()
  SNMPAddTimeout and SNMPREmoveTimeout to the
  class EventListHolder
- Fixed: Unique Id generation in CUDEventQueue and
  CUTEventQueue.
- Fixed: Bugs in Vb::get_value() methods that take a
  char* or unsigned char* as argument
- Added: operator+() for Oids (Alexander Gutkin)
- Improved: Cleanups in queues 

Changes snmp++v3.2.4a
=====================

- Improved: Synchronous and asynchronous SNMP
  request processing is now separated. Thus,
  the global event lists have been removed. 
  Each Snmp class now holds its own event 
  lists.
  To eliminate the use of global event lists
  a new class EventListHolder was defined. Two
  new files eventListHolder.h and 
  eventListHolder.cpp contain now declaration
  and definition of that class respectively.
  That new class is a container of former
  eventList global data structure and former
  global user defined events, user-defined 
  timeouts, notifications and all outstanding
  messages. (LiorK)
- Improved: collect.h (Bill McKinnon)
- Improved: FreeBSD 5.0 support.

- Added: Makefile.gcc_solaris for compilation
  with GNU C++ compiler on Solaris.	


Changes snmp++v3.2.3b
=====================

- Fixed: Counter64::get_printable() could print
  negative values (Yakov Y.)

- Note: New Makefiles assume that you have
  defined _USE_LIBTOMCRYPT when a "crypt"
  directory is present in the same folder as
  the "snmp++" and "agent++" directories. 
- Fixed: Compilation problems without _SNMPv3
  defined.
- Fixed: PDU length computation for encrypted
  SNMPv3 PDUs.

- Improved: New v3MP class.
- Fixed: Estimated length calculation for 
  encoded PDU.


Changes snmp++v3.2.2d
=====================

- Fixed: Possible timeouts under heavy load
  in a multi-threaded environment. 
  [Pavel Spakovsky]

- Fixed: DLL support for VC++ did not allow
  static linking.
- Added: Computation of BER encoded length of
  a Pdu. 

- Added: VC++.NET project files and fixed DLL
  support.

- Fixed: Errors in Counter64::c64_to_ld() and
  Counter64::ld_to_c64() [Mikhail Evstiounin]

- Improved: Prepared for AES usage replacing
  libDES. 
- Fixed: Compilation problems with G++3.2
  (needs updated libDES download).

Changes snmp++v3.2.1d
=====================

- Fixed: Memory leak (40 bytes) when adding an
  user to usm.
- Improved: Some cleanups (#include, const).
- Fixed: Due to possible race condition in
  MyMakeReqId() (uxsnmp.cpp) two requests could
  get the same request id. 
- Fixed: const casting caused problems with
  AIX compiler.

Changes snmp++v3.2.1
====================

- Improved: Use zero length user name for
  SNMPv3 discovery.
- Lots of cleanups.

Changes snmp++v3.2a
===================

- Fixed: Compilation problem with address.cpp on
  Solaris. 

Changes snmp++v3.2
==================

- Added: IPv6 support.
- Improved: moved the USM functions into the class
  USM. To add or delete users, you will now have to
  do the following (see usm_v3.h for more details):
     Usm *usm = mpGetUsm();
     usm->add_usm_user(...);
     usm->delete_usm_user(...);

- Fixed: Possible SegFault in notify queue
  (Lior Klibansky)
- Fixed: Timeout problem in event list (Don Dietz)
- Fixed: Don't use isdigit() for BCC (Eric Zerbib)
- Added: clear() method to SnmpCollection
- Fixed: added clone() method to Pdu class, so
  SnmpCollection will work again.
- Added: Make notify socket decriptor available in
  Snmp class (Don Dietz)

Changes snmp++v3.1.6c
=====================

- Fixed: mp_v3.cpp: Unsigned integer values were
  not BER decoded correctly for SNMPv3 messages.
- Fixed: Some errors when compiling with -ansi
- Improved: Class AuthPriv does no longer depend
  on USM. 

Changes snmp++v3.1.6b
=====================

- Added: BCC32 support.
- Added: DLLOPT decoration for debugprintf.

Changes snmp++v3.1.6a
=====================

- Fixed: Agent address of v1 trap PDUs is set from
  received SNMPmessage if address is not "0.0.0.0".
- Improved: Free BSD support.
- Improved: UdpAddress performance.

- Added: Pdu::set_v1_trap_address to set v1
  trap address. If not set, SNMP++ will use the
  default host address.
- Improved: Added casts in auth_priv.cpp and 
  idea.cpp.

Changes snmp++v3.1.5
====================

- Fixed: Memory leak during processing of
         SNMPv3 traps
- Fixed: Memory leak in agents when sending a
         UnknownEngineID report
- Fixed: Set contextEngineId in Pdu if it was
         not set by the user.
- Improved: Prepared authentication/privacy module
            for easy extensibility.
- Fixed: Convert asn1.cpp back to unix CR/LF ;-)

Changes snmp++v3.1.4b
=====================

- Fixed: Possible crash in ASN.1 BER decoding 
  caused by incorrect SNMP BER encodings.

Changes snmp++v3.1.4a
=====================

- Fixed: Compilation problems with non Linux
  systems regarding *_r system calls.
- Fixed: Handling of unusual v3 msgFlags and
  msgSecurityModels.

Changes snmp++v3.1.4
====================

- Added: Support for Opaque type. The Opaque
  type is implemented as OpaqueStr as subclass
  of OctetStr.

Changes snmp++v3.1.3i
=====================

- Fixed: ASN.1 encoding of very long OIDs
  (128 subidentifiers) could cause seg.fault.
- Improved: Removed obsolete #includes and
  comments. 

Changes snmp++v3.1.3h
=====================

- Fixed: Compilation problems introduced by 
  debugging output redirection on Solaris.
- Added: Makefile.hpux11 for HPUX11 aCC.
- Improved: ASN.1 decoding of integers.
- Fixed: Sending SNMP requests form within
  asynchronous callback functions.

Changes snmp++v3.1.3g
=====================

- Fixed: ASN.1 parse error when parsing some 
  unsigned integers introduced in v3.1.3c.

- Fixed: Completed work on redirecting debugging
  output. 

Changes snmp++v3.1.3f
=====================

- Improved: SNMP++ is no longer busy looping
  when waiting for synchronous requests.
  (Changed select timeout in ProcessPendingEvents 
   in eventlist.cpp from 0 to 10 usec).

- Improved: Debugging output can now be 
  redirected to a file.

Changes snmp++v3.1.3e
=====================

- Fixed: Dropped v1 traps because of a wrongly
  detected ASN.1 parse error.

- Fixed: Wrongly added trap oid and timestamp
  variable bindings for received notifications.

- Added: _NO_THREADS in config.h to facilitate
  disabling of threads (contributed by Martin 
  Janzen).

Changes snmp++v3.1.3d
=====================

- Fixed: Traps sent out may had wrong security
  level noAuthNoPriv.

Changes snmp++v3.1.3c
=====================

- Fixed: Missing type checks in BER decoding
  have been added.

Changes snmp++v3.1.3b
=====================

- Fixed: A pdu with an unknown engineId report 
  was overwritten by a second pdu with an 
  unknown message id status when they both were
  send from a multi-homed agent that sends 
  responses not only from one source address.

- Fixed: User name returned by agent in error
  conditions did not match configured user by
  command generator in some cases.

Changes snmp++v3.1.3a
=====================

- Fixed: Bugs related Solaris 64bit support.
- Fixed: Handling of the OPAQUE syntax in
  snmpmsg.cpp.

Changes snmp++v3.1.3
====================

- Fixed: Now using reentrant system functions
  like gethostbyname_r, gethostbyaddr_r, and 
  strtok_r.
- Fixed: Command line parameter handling of
  the consoleExamples.
- Fixed: MyMakeReqID did not locked its call to
  snmpEventList->GetEntry against other threads.
- Fixed: Locking for eventlist.cpp
- Added: Remove operation in SnmpCollection 
  template.

Changes snmp++v3.1.2a
=====================

- Target::get_type() is now const.
- Improved: Trap receiver example.

Changes snmp++v3.1.2
====================

- Fixed: Handling of responses to INFORM-requests.  

Changes snmp++v3.1.1
====================

- Fixed: Added locking for SNMPv3 MP cache. 
- Improved: AGENT++ is no longer needed for console
  examples.
- Fixed: SNMP version was not set for received 
  notifications.

Changes snmp++v3.1
==================

- Replaced RSAEURO by LIBDES which is free even for
  commercial use.

Changes snmp++v3.0.2b
=====================

- Added: Snmpx::Snmpx(int&, const UdpAddress&) to 
  support binding on a specific IP address.

Changes snmp++v3.0.2a
=====================

- Fixed: Filtering notifications.

Changes snmp++v3.0.2
====================

- Fixed: Compilation problems when using async requests
  on Win32 platforms.
- Improved: In v3.0.1 pending requests could block 
  requests from other threads. This has been fixed. 

Changes snmp++v3.0.1
====================

- Added: SNMP++v3.0.1 is now thread-safe! 
- Added: Snmp::report can send SNMPv3 reports. 

Changes snmp++v3.0n
===================

- Added: SNMP++ sets the contextEngineID of a SNMPv3
  PDU if it is not set by the user.

Changes snmp++v3.0m
===================

- Fixed: Removed all deprecated #include . 
- Fixed: Solaris makefile for Solaris 7.0 (removed 
  Templates.DB related stuff)

Changes snmp++v3.0l
===================

- Fixed: Entries added to the SNMP++ usmUserTable during
  discovery did not appear in the AGENT++ USM MIB.

Changes snmp++v3.0k
===================

- Fixed: Setting a usmOwnKeyChange object with a zero 
  length string caused a segmentation fault.

- Fixed: Compilation problems with BSD Unix.

- Fixed: Renaming of snmpv3BootCounter file on WinNT.

Changes snmp++v3.0j
===================

- Fixed: snmpmsg.cpp: Check for exceeding maximum 
  response PDU size, did not check response PDUs only.
  This bug caused SNMP++ to not send v3 traps.

- Fixed: Setting trap OIDs when receiving traps.


Changes snmp++v3.0i
===================

- Fixed: OIDs for snmpAuthProtocols and snmpPrivProtocols

- Fixed: Sending of v1 traps did not set IP address of
  the sending host correctly when the gethostname failed
  for that host.


Changes snmp++v3.0h
===================

- Fixed: (usm_v3.cpp): Handling of maxMsgSize.

- Fixed: (asn1.cpp): BER encoding of ASN.1 header
  length did not support length above 65535 bytes. Now 
  lengths up to 2^31-1 bytes are supported.

- Fixed: (usm_v3.cpp): Did not check length of userName
  before copying it. Could have caused problems with
  incorrect SNMPv3 implementations.
 

Changes snmp++v3.0g
===================

- Fixed: BER encoding of unsigned 64bit integers.
  High values (all nine most significant bits are 1) were 
  incorrect encoded.

- Fixed: Removed compilation warnings for timetick.cpp and
  integer.cpp


Changes snmp++v3.0f
===================

- Fixed: Several DLLOPT decorators had been missing in asn1.h.

- Added: Prototype for freeSmivalDescriptor in snmpmsg.h.


Changes snmp++v3.0e
===================

- Fixed: Bug in idea.h.

- Fixed: Bug in mp_v3.cpp.


Changes snmp++v3.0d
===================

- Fixed: Bug in Oid::RnCompare()

- Fixed: mpIncSnmpUnknownSecurityModels() increased the
         wrong counter.

- Update: The changes of the official SNMP++ 2.84 from HP were
          merged into snmp++v3.

- Changed: The snmpEngineBoots counters for different
           snmpEntities can now be saved in one file. For this
           the function mpInit had to be changed. See
           include/v3.h for more information about the new functions
           getBootCounter, saveBootCounter and decodeEngineId.
           Example:

           char *filename = "snmpv3_boot_counter";
           unsigned int snmpEngineBoots = 0;
           OctetStr engineId("exampleId");

           // you may use your own methods to load/store this counter
           status = getBootCounter(filename, engineId, snmpEngineBoots);
           if ((status != SNMPv3_OK) && (status < SNMPv3_FILEOPEN_ERROR))
             cerr << "Error getBootCounter: " << status << endl;

           snmpEngineBoots++;
           status = saveBootCounter(filename, engineId, snmpEngineBoots);
           if (status != SNMPv3_OK)
             cerr << "Error saveBootCounter: " << status << endl;

           mpInit(&snmp, engineId, snmpEngineBoots);

- Fixed: Reports for encryption error were sent with a
         securityLevel authPriv, now authNoPriv is used.
         Reports for unknown security name were sent with
         user 'initial', now the user name of the request
         is used.

- Fixed: Snmp::trap now sets the timestamp of traps for WIN32
         and for non WIN32 to the same value if the user didn't
         set it with pdu::set_notify_timestamp().
         Note: Snmp::trap does not set the timestamp to the
         uptime of the system or the application. The timestamp
	 is computed from the time elapsed since 1970/1/1.

- Fixed: msec::refresh() now sets the correct time for WIN32 

- Changed: mpAddToEngineIDTable now replaces host and port
           when adding an engineID that is already in the table

- Fixed: OctetStr::from_hex_string()


Changes snmp++v3.0c
===================

- Fixed: Class Address had no default constructor.

- Added: mpIncSnmpUnknownSecurityModels(),
	 mpIncSnmpInvalidMsgs(),
	 mpIncSnmpUnknownPDUHandlers().

Changes snmp++v3.0b
===================

- Fixed: SNMPv3 reports for inform requests are now sent
         through the socket that is used to listen for
         traps/informs. 

- Added the static method
  CNotifyEventQueue::set_listen_port(int port);
  to set the trap listen port. Call this method before calling
  Snmp::notify_register(...). The default port is 162.


Changes snmp++v3.0a
===================

- Internal changes in SNMPv3 implementation

- Changes in structures for SNMPv3 async requests

- Some documentation added.

- Fixed: usmDeleteUserName mixed userName and securityName.
         Changed parameter of usmDeleteUserName to userName
         and added new function usmDeleteSecurityName.

- Fixed: the SNMP version of targets created through 
         CTarget(const CTarget) was set to version1
         (same for operator=(constCTarget))

- Changed call of "delete X" to "delete [] X" where necessary

- Moved some structure definitions from header files to cpp-files.
  Changed some internal structures from unsigned char to OctetStr.


Changes snmp++v3.0:
===================

- uxsnmp.cpp: line 656-660

  Added WSACleanup() routine for NT.

- smi.h: line 141

  Changed ASN.1 tag value of UInt32 to 2 (same as Gauge32)

  #define sNMP_SYNTAX_UINT32    sNMP_SYNTAX_GAUGE32

  removed duplicate case labels in asn1.cpp, snmpmsg.cpp and gauge.cpp

- snmpmsg.cpp: line 355

  Changed snmpTrapOID to

   tempvb.set_oid("1.3.6.1.6.3.1.1.4.1.0");

- Added const to Pdu::get methods where applicable. 

- Added static function OctetStr::from_hex_string().

- Added DLLOPT to all public functions / classes.

- Using memset and memcpy instead the deprecated counterparts 
  bzero and bcopy.

- Using WinSockets on WIN32 platforms.

- When converting an oid string to an oid (Oid::StrToOid) now an
  arbitrary part of the oid can be given as a string value enclosed in
  $ characters. For example the oid string

  "1.3.6.1.6.1.12.1.3.$public0$" 

  will result to the oid

  1.3.6.1.6.1.12.1.3.112.117.98.108.105.99.95.48

- the function mpInit is now called with a pointer to an Snmp object
  and an engineID: int mpInit(Snmp *snmp, const OctetStr& snmpEngineID);

- New target (UTarget for SNMPv3):
  - Methods to get/set security_name and security_model:
    void get_security_name( OctetStr& security_name_oct);
    void set_security_name( const OctetStr& new_security_name);

    void set_security_model(int sec_model);
    int get_security_model();

  - If you know the engine_id of the target (no engine_id discovery):
    void set_engine_id( const OctetStr& new_engine_id);
    void get_engine_id( OctetStr& engine_id_oct);

  --> most methods of CTarget do exist for UTaget: see target.h

  For SNMPv3 there is only one valid security_model (SNMP_SECURITY_MODEL_USM).
  If you set the security_model to SNMP_SECURITY_MODEL_V1 (or V2) you can use
  te UTarget to send SNMPv1 (v2c) requests.

- New methods for Pdu objects:

  void set_security_level( const int level);
  int get_security_level();

  void set_context_name(const OctetStr &name);
  void get_context_name(OctetStr &name);

  void set_context_engine_id(const OctetStr &id);
  void get_context_engine_id(OctetStr &id);

  valid security_levels are: SNMP_SECURITY_LEVEL_NOAUTH_NOPRIV,
  SNMP_SECURITY_LEVEL_AUTH_NOPRIV and SNMP_SECURITY_LEVEL_AUTH_PRIV


- The CTarget can no longer be used as a SNMPv3 target. The methods
  mpBuildCommunity and mpParseCommunity don't exist any longer.


- The consoleExamples now use a CTarget for SNMPv1/v2c requests and
  UTarget for SNMPv3 requests. There are new examples: snmpInform
  (to send inform Requests) and receive_trap.