
Version 3.5.1 of OpenDDS.

Notes: Due to addition control messages in the 3.5.1 release, mixing 3.5.0
  and 3.5.1 releases should work properly, but the 3.5.0 data readers can emit
  the following error message when associating with a durable 3.5.1 data
  writer:

  ERROR: DataReaderImpl::data_received unexpected message_id = 11

  Upgrade all endpoints to 3.5.1 to remove this error message.

Additions:
- Support later (>= 4.7) versions of GCC compilers, and later (>= 2.0a)
  builds of TAO. Configure script now downloads 2.2a by default.

- Added IDL compiler support for typedef of string fields within unions.
  Added Java IDL compiler support for struct forward declarations.

- Updated UML design diagrams to reflect current code base.

Fixes:

- DCPSInfoRepo no longer informs a subscriber about a crashed or killed
  publisher.  This made associations of current publishers and subscribers
  delayed until timeout was reached.

- Fixed deadlock condition in send_delayed_notifications() resulting from
  multiple datawriters.

- Fixed deadlock in DataLinkSet::send_control().

- Fixed deadlock in WaitSet::wait() and DataReaderImpl::data_received().

- Fixed multicast transport with multiple participants in a single process.

- Fixed parsing of -ReassociateDelay argument by DCPSInfoRepo.

- Fixed crash of long-lived zero-copy sequence when it is destroyed and
  crash of zero-copy sequence accessing released instances.

- Fixed unprotected access to DataWriterImpl::reader_info_,  and
  TransportSendStrategy::pkt_chain_.

- Fixed multiple RTPS crashes when participant is being deleted.

- Fixed RTPS crash when a data reader is being deleted.

- Fixed problem for non-unique repo ids for multicast when multiple
  (non-federated) DCPSInfoRepos are used on the same network.

- Fixed crash caused by back-pressure in transport causing the most recent
  sample for an instance to be dropped.

- Fixed error in reconstruction logic for fragmentation of udp and multicast
  transport packets.

- Fixed PublisherImpl and SubscriberImpl to properly set a DataWriterImpl
  or DataReaderImpl entity's deleted flag during deletion to allow
  association checks to properly identify entities that are being deleted and
  not proceed in association.

- Fixed problem for persisted DCPSInfoRepo where persisted participants
  were never dissociating.

- Fixed activity improperly occuring when a partipant is being deleted
  that caused pure virtual function calls. In one case, waiting now takes
  place during deletion of a data writer until all control messages sent during
  unregistration of instances are account for. In another case fixed so
  TransportSendControlElement will delete itself before it reports to the listener
  that the message has been delivered/dropped.

Tests:

- Many updates to make test results more deterministic.

- Added Reliability test.

- Added ManyToMany test to test associations with additional participants,
  publishers, subcribers, data readers and data writers.

- Added PersistentInfoRepo test.

- Restored thrasher medium and high test cases.

- Rewrite Priority test to make it verify proper QOS functionality.

- Rewrite LargeSample test to make it verify message contents are as expected.

========================================================================

Version 3.5 of OpenDDS.

- Updates to RTPS support resulting from both interoperability
  testing (March 2013 OMG meeting) and user feedback.

- Fixed a bug in the DataReader relating to the Deadline timer.

- Generated TypeSupportImpl classes now contain nested typedefs that
  facilitate programming with C++ templates.
  See tests/DCPS/ManyTopicTest for an example of usage.

- Added config options to bind RTPS-related multicast sockets to
  specific network interfaces.  See the ChangeLog for details.

- Fixed an opendds_idl code generated bug when typedefs of basic
  types are used as fields of structs.

- Corrected a number of other bugs related to discovery and scaling.

========================================================================

Version 3.4.1 of OpenDDS.

- Added a new option to opendds_idl, -Wb,v8, which generates type support
  for copying DCPS structs from C++ objects to JavaScript objects -- requires
  the V8 JavaScript engine.  See https://npmjs.org/package/opendds for OpenDDS
  integration with Node.js.

- Fixed a bug in serialization with misaligned reads.  It only impacts
  certain platforms with strict alignment requirements such as SPARC/SunCC.

- Clang 3.2 is now a supported compiler.

- Fixed a bug in the rtps_udp transport, in certain cases an invalid Gap
  submessage was sent which can result in data samples not being received.


========================================================================

Version 3.4 of OpenDDS.

- Added new OpenDDS-specific APIs for sending and receiving untyped data,
  (does not require code generation from IDL data structures).  See the
  Recorder and Replayer classes and the test in tests/DCPS/RecorderReplayer.

- Implemented the ability to send fragmented data with the rtps_udp transport.

- Fixed a bug in copy_from_topic_qos(): the Ownership policy is now copied.

- The optimization of publisher-side content filtering now applies to durable
  data in addition to newly written data samples.

- As with versions before 3.2, the DCPSInfoRepo object reference is allowed to
  fail to resolve.  If it fails, the current operation can be re-tried at a
  later time when the DCPSInfoRepo server is available.

- Added a new option for per-domain default transport configurations.

- Corrected IDL string constants for QoS policy names which were wrong in the
  DDS spec (GROUPDATA and TRANSPORTPRIORITY ..._QOS_POLICY_NAME).  These are
  not used anywhere in OpenDDS.


========================================================================

Version 3.3 of OpenDDS.

- If an instance of a transport can't be set up, an exception is thrown so
  that different configuration parameters can be attempted by the user.

- Corrected the mapping of Priority QoS to DiffServ CodePoint DS subfield.

- For thread-per-connection send, if no explicit scheduling policy has been
  configured, OpenDDS will now inherit the current thread's policy/priority.

- Fixed a possible deadlock of RTPS discovery on Windows.

- Added non-blocking I/O setting to tcp sockets, VxWorks 6.4 required it.

- Fixed various bugs in deadline and ownership QoS.

- Improved multicast transport's robustness during handshaking when many
  connections are set up at the same time, and also allow for multicast
  to skip over recieved datagrams that don't have the expcted header values.

- Multicast transport configuration can now specify a local network interface
  which will be used to join the multicast group.

- The support for the generation of the DDS4CCM needed LEM library has been
  moved to CIAO DDS4CCM. This removed the optional dependency on CIAO.


========================================================================

Version 3.2 of OpenDDS.

- Added a new transport type: Shared Memory
  Use "shmem" as the short name (in place of "tcp", "udp", "multicast", etc.).
  See dds/DCPS/transport/shmem/ShmemInst.h for configurable parameters.

- The udp transport now supports setting IP DSCP (DiffServ CodePoint) based on
  the writer's TRANSPORT_PRIORITY QoS value.

- Fixed bugs in udp and multicast transports, including reassembly of fragments.

- Made several changes in order to support CIAO 1.1.2 with DDS4CCM. From
  this version DDS4CCM has support for OpenDDS as DDS vendor. Check the CIAO
  release notes for details on what has been ported.

- Added new QOS_XML library with which QoS settings can be done through an XML
  file. Used at this moment by the CIAO DDS4CCM implementation.

- Implemented rejection of samples due to exceeding max_instances and
  max_samples.

- Made the RTPS discovery and transport code more robust.

- Refactored InfoRepo-based discovery into its own library. This reduces the
  dependency on TAO such that certain TAO libraries will no longer be loaded
  unless they are needed for InfoRepo-based discovery.

- For IDL files that only contain local interfaces, the generation of
  server-side TAO code was suppressed. The suppression applies to DdsDcps*.idl.
  This means, for example, that code that was including DdsDcpsSubscriptionS.h
  needs to be changed to include DdsDcpsSubscriptionC.h.

- To reduce library size, OpenDDS can now be conditionally compiled to exclude
  profiles discussed in the Compliance section of the DDS spec. See
  section 1.3.3 in the Developer's Guide for more information.


========================================================================

Version 3.1 of OpenDDS.

- This release includes the initial implementation of DDS Interoperability
  in OpenDDS, using the DDS-RTPS spec v2.1 from the OMG (formal/2010-11-01).
  RTPS support in OpenDDS consists of two main features:
    - A pluggable transport implementation, known as "rtps_udp" because it
      implements the UDP PSM of the DDS-RTPS spec.  This is a peer of the
      existing OpenDDS-native transports: "tcp", "udp", and "multicast".
    - A new discovery mechanism for RTPS's distributed discovery.  This can
      replace the DCPSInfoRepo in existing OpenDDS deployments.
  Neither of these features is enabled by default.  See the OpenDDS Developer's
  Guide chapter 7 for configuration details.  Also, note that not every OpenDDS
  feature (for example, certain QoS values) is supported with RTPS in the
  initial implementation.  These exceptions are documented in the Developer's
  Guide sections 7.3.3 and 7.4.5.5.

- Changed set_qos() of DataWriter, DataReader, Publisher and Subscriber so
  when provided a QoS value incompatible with an existing association, that the
  value will be changed, association will be broken, and RETCODE_OK returned.
  Previously, if any association would be broken, no change would take place
  and false would be returned.  New version is compatible with DDS spec.

- OpenDDS udp transport enhancements:
    - Added send_buffer_size and rcv_buffer_size parameters to the udp
      transport configuration.
    - The default local address will use DNS host names instead of IP
      addresses.
    - Added support for IPv6 when ACE is built with IPv6 support.

- OpenDDS multicast transport enhancements:
    - Added a configuration parameter "async_send" (defaults to false)
      that will send multicast datagrams using async I/O if supported
      by the platform.  As of now this is only implemented on Windows.
      It could be extended to Unix aio_*() functions in theory, but these
      are generally not preferred and the regular socket functions are
      sufficiently fast.

- Removed DataReaderQosExt from DdsDcpsSubscriptionExt.idl.  This was only
  being used to provide a non-standard-compliant backwards-compatibility
  setting to get the DURABILITY QoS behavior matching that of OpenDDS v1.2
  and earlier.  It was not being used in any OpenDDS code.


========================================================================

Version 3.0.1 of OpenDDS.

- The DCPSInfoRepo reassociates Built in Topic connections for existing
  datareaders and datawriters when restarted from persistence.

- The opendds_idl compiler will now print a warning about not including TAO's
  orb.idl file when a file named orb.idl is included.

- Fixed a bug where the timeout for passive_connect_duration was ignored.

- Fixed multiple bugs in fragmentation/reassembly used for udp and multicast.

- Fixed multicast loopback and session re-use problems.

- Fixed a bug with memory management for the TransportCustomizedElement
  used in publisher-side content filtering.

- New example Messenger.minimal - which is like messenger, but streamlined
  for new users to understand the whole easier.


========================================================================

Version 3.0 of OpenDDS.

- Transport configuration has undergone a major redesign and any existing
  transport application code or transport configuration files need to be
  updated.  See the Developer's Guide for details of the design.  See
  $DDS_ROOT/docs/OpenDDS_3.0_Transition.txt for a description on how
  to migrate your applications to the OpenDDS 3.0 design.  As a part of
  this design OpenDDS gains the following capabilities:
    - Most applications can do all transport configuration via
      configuration files (no transport source code required).
    - Individual writers and readers can now support multiple
      transports.

- The simpleTcp transport was renamed to tcp (the directory containing
  its source code was also renamed).

- The udp transport no longer required a local_address when being
  configured.  If not specified, the property defaults to a value
  selected by the operating system (similar to the tcp transport).

- Details of the OpenDDS Modeling SDK changes in this release are documented
  in the Eclipse-based help, see OpenDDS Modeling SDK Guide -> Getting
  Started -> Introduction to the OpenDDS Modeling SDK.

- First release of OpenDDS Real-Time Data (RTD) for Excel an Excel Add-in
  and RTD Server.  It allows visualization of an operating OpenDDS system
  from within Excel. It gives a tree view of a repository that mirrors the
  stand-alone OpenDDS Monitor application's tree view, but with the
  additional capabilities to automatically restart monitoring of a repository
  when a saved workbook is opened, monitoring multiple repositories
  simultaneously, and snapshot a repository monitor tree view.

- Wireshark dissector improvements include removal of the restriction
  that inforepo IOR be placed in a special file.  Dissector config
  files can now be generated by opendds_idl.

- The monitor tool has a new view which is an alternate to the Graphviz
  view.  The Node view uses Qt gui elements to model the OpenDDS system.
  Users can manipulate Node view graphs before saving them to PNG files.


========================================================================

Version 2.4 of OpenDDS.

- This will be the final release of OpenDDS that will build with the current
  patch level of TAO 1.5a.  This release is compatible with (the current patch
  levels of) TAO 1.5a, and 1.6a, as well as the current DOC Group release.
  Future releases will be compatible with TAO 1.6a and the DOC group -- see
  the README file for details on TAO versions.

- The implementation of ContentFilteredTopics now defaults to evaluating
  the filter expression at the publisher so that data samples which would
  be ignored by the subscriber can be dropped before getting to the transport.
  This feature can be turned off with "-DCPSPublisherContentFilter 0" or the
  equivalent setting in the [common] section of the configuration file.
  When using non-default DEADLINE or LIVELINESS QoS policy values, special
  consideration needs to be given to how these "missing" samples impact the
  QoS behavior, see the document in docs/design/CONTENT_SUBSCRIPTION.

- DisjointSequence, an internal class used to track sequence numbers for both
  multicast and wait_for_acks, was enhanced to store contiguous ranges instead
  of individual values.  Thus it will not require so much memory in cases where
  there are gaps in the sequence numbers.

- Began implementing the DDS Interoperabiltiy specification aka "RTPS"
  (see OMG formal/2010-11-01).  Changes in this release include fragmentation
  and reassembly for udp and multicast, 64-bit sequence numbers, and the ability
  to transmit only the key fields for the instance-control messages (register,
  unregister, dispose).

- The monitor tool, an instrumentation viewer application for OpenDDS,
  has new options for generating and viewing directed graphs.  The tool
  generates Graphviz-readable .dot files, manages converting the files to
  representative .png files, and displays the generated .png files in its
  GUI.  Monitor executes Graphviz command-line tools in a separate process.
  There are no compile-time or run-time dependencies on Graphviz.  The
  monitor tool will run on systems without Graphviz installed but will
  not be able to generate .png files.

- Enhanced the Wireshark packet dissector to inspect SAMPLE_DATA message
  contents. This requires a data model expressed in an .ini file (documented
  in tools/dissector/README).  In order to associate a SAMPLE_DATA message
  with a type, the publication ID is harvested from InfoRepo GIOP messages.
  In order to detect InfoRepo GIOP messages, the IOR for the InfoRepo must
  be written in a file called "IOR.txt" in the current working directory when
  wireshark is invoked.

- Enhancements and fixes of OpenDDS Modeling SDK.  Version: 1.1.0.
    * Topic types from a DcpsLib shown in Project Explorer can be
      dragged to diagram for another DcpsLib. This allows the same
      Topic to be used in multiple DcpsLibs.
    * For more, see the Eclipse online help, under "OpenDDS Modeling
      SDK Guide > Getting Started"

- Enhancements and fixes of OpenDDS Modeling SDK.  Version: 1.0.1.
    * For more, see the Eclipse online help, under "OpenDDS Modeling
      SDK Guide > Getting Started"


========================================================================

Version 2.3 of OpenDDS.

- First release of the OpenDDS Modeling SDK, a modeling tool that can be
  used by the application developer to define the required middleware
  components and data structures as a UML model and then generate the
  code to implement the model using OpenDDS.  The generated code can
  then be compiled and linked with the application to provide seamless
  middleware support to the application.  UML models are manipulated using
  a graphical editor based on Eclipse.  See the OpenDDS Developer's Guide
  <http://download.ociweb.com/OpenDDS/OpenDDS-latest.pdf> for
  installation instructions.

- DCPSInfoRepo no longer requires an -ORBSvcConf argument when using
  Built-In Topics.  The DCPSInfoRepo process will take care of loading
  SimpleTCP (if it's not already loaded).

- Fixed method signature of DataWriter::register_instance_w_timestamp()
  to have two arguments per the latest spec, not three.

- "make install" is now available on platforms using GNU Make and when
  building with OCI TAO 1.6a or DOC Group TAO.

- Added support for Microsoft Visual Studio 2010 (vc10).


========================================================================

Version 2.2 of OpenDDS.

- Completed the implementation of the Content-Subscription Profile (which
  was begun in version 1.3 of OpenDDS).  This includes:
  - QueryCondition (previously OpenDDS had a partial implementation)
  - ContentFilteredTopic
  - MultiTopic
  The content-subscription profile can be disabled at compile-time in order
  to reduce footprint: set the MPC feature "content_subscription" to 0.

- The code generation tools for OpenDDS have changed in this release.  The
  Perl script "dcps_ts.pl" is no longer used and instead the OpenDDS IDL
  Compiler "opendds_idl" takes its place.  opendds_idl also includes the
  functionality which used to be in tao_idl and enabled with -Gdcps.
  Existing applications that use MPC do not need to make any changes unless
  they happen to depend on some rarely-used arguments to dcps_ts.pl.  See the
  OpenDDS Developer's Guide for the list of arguments accepted by opendds_idl.

- Renamed odds_repoctl command to repoctl.  Add a decorator if needed when
  installing external to the OpenDDS directories.

- Renamed odds_monitor command to monitor.  Add a decorator if needed when
  installing external to the OpenDDS directories.

- Renamed Wireshark dissector 'odds' library to 'OpenDDS_Dissector'.
  The source directory was renamed from $DDS_ROOT/tools/odds_dissector
  to $DDS_ROOT/tools/dissector.

- Fixed transport so it now allows associations between datareaders and
  datawriters attached to the same transport to work.

- Fixed a bug that causes samples larger than 64K to not work correctly with
  the SimpleTCP transport.

- Added nak_delay_intervals and nak_max configuration options for reliable
  multicast to help reduce naks.

- Added support for Ownership qos.

- Added support for GROUP presentation.

- Changed the default DataWriterQos reliability max_blocking_time from infinite
  to be 100ms to be consistent with spec 1.2.

- A new "configure" script is available to assist with setting up prerequisites
  for OpenDDS compilation, including optionally downloading ACE+TAO.  See the
  INSTALL file for details.


========================================================================

Version 2.1.3 of OpenDDS.

- Various fixes for memory management issue on transport framework.

- Fixed duplicate message issue caused by a lost link.

- Memory leak fixes.

- Fixed deadlocks on reliable multicast transport during association
  and shutdown periods.

- Improved reliable multicast transport and reduced nak overflow.

- Extended the capabilities of the OpenDDS-Bench performance test
  framework.  This consists mostly of expanded pre-configured tests as
  well as additional execution and plotting scripts.  The user guide at
  performance-tests/Bench/doc/user_guide.html contains the details.

- Masked interrupts in threads created by OpenDDS to avoid failures
  while in system calls.
  Example: ERROR: ACE::handle_write_ready return -1 while waiting
                  to unclog. handle_write_ready: Interrupted system call

- Added support to set the TTL for multicast transports.


========================================================================

Version 2.1.2 of OpenDDS.

* This is a bugfix release to account for issues introduced by the
  previous version.

New to this version are the following changes:

- Various bugfixes for locking issues during sample removal.

- Fixed a bug in obtain_buffer() that did not return the TIMEOUT error
  code when max_blocking_time is 0 or a very small period.

- Fixed a deadlock in the new IP multicast transport caused when data
  is received while a reliable session is handshaking.

- Fixed an issue which caused spurious synch threads to be created for
  connectionless transports (i.e. UDP/IP, IP multicast).

- Enhanced the experimental UDP/IP transport to support multiplexing
  samples to unique endpoints rather than unique entities.


========================================================================

Version 2.1.1 of OpenDDS.

* This is a bugfix release to account for issues introduced by the
  previous version.

New to this version are the following changes:

- Various bugfixes have been applied to the new IP multicast transport
  and the Extensible Transport Framework (ETF) to improve stability.

- Added IDL for ContentFilteredTopic and MultiTopic, but they are not yet
  implemented (operations will return NULL or RETCODE_UNSUPPORTED).

- A Wireshark 1.2.x compatible dissector is included in this release.
  See $DDS_ROOT/tools/odds_dissector/README for details.


========================================================================

Version 2.1 of OpenDDS.

New to this version are the following changes:

- The OpenDDS-Bench performance testing framework has been enhanced to
  include the following:
    * extended to allow fixed rate testing;
    * added predefined latency test configuration files;
    * added data reduction scripts to post process test results;
    * added data visualization scripts using gnuplot to create charts
      from reduced test data.
  Documentation is located at: $DDS_ROOT/performance-tests/Bench/doc.

- The monitor library introduces a new instrumentation mechanism for
  reporting OpenDDS run-time information.  This information is
  intended to supplement that provided by the standard-defined
  Built-In-Topics.  See $DDS_ROOT/dds/monitor/README for further
  details.

- A new instrumentation application is available to view executing
  OpenDDS service Entities.  This is located at: $DDS_ROOT/tools/odds_monitor.

- The opendds_repo_ctl tool has been moved from $DDS_ROOT/dds/tools to
  $DDS_ROOT/tools.  The name has also been changed to odds_repoctl to
  reflect changes in naming conventions in this release.

- A new multicast transport is available which replaces the older
  ReliableMulticast and SimpleMcast transports.  For a detailed description
  of the design, configuration, known issues, and potential enhancements,
  see: $DDS_ROOT/docs/html/multicast/multicast.html.

- A new udp transport is available which replaces the older SimpleUdp
  transport.  Like SimpleUdp, udp provides best-effort reliablity only;
  its use should be considered experimental.

- Numerous bugs in the Extensible Transport Framework (ETF) have been
  addressed to improve the stability of new and existing transports.

- Formal ranges of DDS::DomainId_t values are now specified; users have
  full access to all DomainId values between 0x0 and 0x7fffffff.  All other
  values are reserved for use by the implementation.


=========================================================================

Version 2.0.1 of OpenDDS.

* This is a bugfix release to account for issues introduced by the 2.0
  integration process.  No new features have been added in this release.

New to this version are the following changes:

- Bugfixes for STLport support using Sun CC compilers.

- Corrected default ReliablityQoS policy for DataWriter entities.

- Bugfixes to Java language bindings including TAO_IDL interface changes
  introduced in DOC TAO 1.7.4 and incorrectly generated project files.


=========================================================================

Version 2.0 of OpenDDS.

* This is the first release of OpenDDS that conforms to the minimum
  compliance profile as documented in formal/07-01-01 (version 1.2).
  Near-complete support for the persistence profile and initial support
  for the content-subscription profile is also provided in this release.

New to this version are the following changes:

- Updated support for DataWriter::unregister() and DataWriter::dispose()
  to properly release resources after all samples in a marked instance
  are removed.

- Implemented Publisher::wait_for_acknowledgments() as defined in
  formal/07-01-01.

- Fixed an issue in QueryCondition where applying filters on non-valid
  data samples caused a SEGV; these samples are now implicitly filtered
  out.

- Implemented PRESENTATION QoS policy as defined in formal/07-01-01.
  Currently, GROUP access is not supported.

- Implemented MANUAL_BY_TOPIC and MANUAL_BY_PARTICIPANT LIVELINESS QoS
  policy kinds.

- Implemented BY_SOURCE_TIMESTAMP DESTINATION_ORDER QoS policy kind.
  Samples may now be ordered based on reception or source times on a per
  instance basis.

- Implemented ENTITY_FACTORY auto_enable support in formal/07-01-01.
  Entities may now be enabled manually by setting this value to false.

- Implemented WRITER_DATA_LIFECYCLE as defined in formal/07-01-01.
  Instances will now be properly unregistered/disposed when a DataWriter
  is deleted.

- Implemented READER_DATA_LIFECYCLE as defined in formal/07-01-01.

- Implemented TIME_BASED_FILTER as defined in formal/07-01-01.

- create_*() functions now take a StatusMask argument.  A new constant
  named OpenDDS::DCPS::DEFAULT_STATUS_MASK has been introduced as a
  convenience to indicate interest in all status changes.

- Implemented the following new methods on DomainParticipant as defined
  in formal/07-01-01:
    * get_discovered_participants()
    * get_discovered_participant_data()
    * get_discovered_topics()
    * get_discovered_topic_data()

- Constant name changes:
    * PUBLICATION_MATCH_STATUS  => PUBLICATION_MATCHED_STATUS
    * DURATION_INFINITY_SEC     => DURATION_INFINITE_SEC
    * DURATION_INFINITY_NSEC    => DURATION_INFINITE_NSEC
    * TIMESTAMP_INVALID_SEC     => TIME_INVALID_SEC
    * TIMESTAMP_INVALID_NSEC    => TIME_INVALID_NSEC

- Removed constants:
    * TRANSPORTPRIORITY_QOS_POLICY_NAME

- Type name changes:
    * StatusKindMask            => StatusMask
    * SubscriptionMatchStatus   => SubscriptionMatchedStatus
    * PublicationMatchStatus    => PublicationMatchedStatus

- Removed types:
    * SampleStateSeq
    * ViewStateSeq
    * OctetSeq

- Other type changes:
    * BuiltinTopicKey_t is now a struct containing an array rather
      than a bare array type.  This allows passing a BuiltinTopicKey_t
      by reference.
    * Ownership is now indicated in DataReaderQos and DataWriterQos as
      well as PublicationBuiltinTopicData and SubscriptionBuiltinTopicData.
    * Removed sevice_cleanup_delay from DurabilityQosPolicy.

- Method name changes:
    * register()/_cxx_register()  => register_instance()
    * register_w_timestamp()      => register_instance_w_timestamp()
    * unregister()                => unregister_instance()
    * unregister_w_timestamp()    => unregister_instance_w_timestamp()
    * on_subscription_match()     => on_subscription_matched()
    * on_publication_match()      => on_publication_matched()

- Other method changes:
    * set_qos(), get_qos(), get_*_status() and assert_liveliness() now
      return error codes as specified in formal/07-01-01.
    * Subscriber::get_datareaders() reader parameter has changed from out
      to inout.


=========================================================================

Version 1.3 of OpenDDS.

* This will be the final release of OpenDDS that will build with the current
  patch level of TAO 1.4a.  This release is compatible with (the current patch
  levels of) TAO 1.4a, 1.5a, and 1.6a, as well as the current DOC Group
  beta/micro release.  Future releases will be compatible with TAO 1.5a, 1.6a
  and the DOC group -- see the README file for details on TAO versions.

New to this version are the following changes:

- Implemented the Communication Status entity structures and behaviors to
  conform with the version 1.2 specification (formal/07-01-01).  This
  includes member name changes and additions to LivelinessChangedStatus;
  modifying and extending the SampleRejectedStatusKind enumeration; and,
  adding new members to the PublicationMatchStatus and
  SubscriptionMatchStatus structures.

- Implemented the TRANSPORT_PRIORITY Quality of service policy using the
  policy value to set thread priorities and DiffServ codepoint values.
  The current implementation does not honor the Changeable behavior of
  the policy.  Only the intially established policy value is honored for
  any given DataWriter Entity.  Thread priorities are not currently set
  on Windows systems.

- Implemented the LATENCY_BUDGET Quality of service policy as a
  monitoring feature with an extended listener callback for exceeded
  budget values.  Statistics for latency are made available via an
  OpenDDS-specific extended API as well.

- Implemented the ReadCondition interface and associated operations
  on the DataReader (such as read_w_condition).

- Implemented the QueryCondition interface, but only queries of the form
  "ORDER BY a[, b, c...]" have any effect.  In other words, it's a mechanism
  that controls the order of the data-set received from any given read or
  take operation.  The ORDER BY fields can be either primitive types
  (including strings) or primitive types in nested structs (using a.b).

- Corrected a bug in the LIFESPAN QoS implementation where the Topic QoS
  was used.  Now the DataWriter QoS takes effect.

- The PARTITION QoS policy now accepts character class wildcards using [].

- Corrected a bug in the PARTITION QoS implementation where the default
  QoS would not match against the '*' wildcard.

- The DURABILITY QoS implementation was corrected so that readers requesting
  the VOLATLIE kind will not receive historic samples from writers.  Since
  there were some use-cases for the old behavior, it is available through an
  OpenDDS-specific interface -- see $DDS_ROOT/dds/DdsDcpsSubscriptionExt.idl.

- When the writer's DURABILITY QoS is PERSISTENT, the format of the
  data stored on the filesystem has changed.  Instead of a single file in the
  current working directory, a directory is now used.  This is configurable
  using the option -DCPSPersistentDataDir.

- A Java Message Service 1.1 (JMS) provider built on top of OpenDDS is now
  available in $DDS_ROOT/java/jms.  JMS Topics are supported (not queuing).
  See the README in that directory for more info.

- The $DDS_ROOT/bin/federation utility has been renamed to opendds_repo_ctl
  and now supports shutting down a remote non-federated DCPSInfoRepo process.

- Deleting a DataWriter from a Publisher now blocks until pending samples have
  been delivered by the underlying transport.  By default, the DataWriter will
  block indefinitely.  To change the default blocking behavior, you may
  specify a number of seconds to block with the -DCPSPendingTimeout option.

- Instance handles are now compliant with version 1.2 of the DDS
  specification.  Additionally, the contains_entity and get_instance_handle
  operations have been implemented.

- Implemented DataWriter::wait_for_acknowledgments() from formal/07-01-01.

- Added support for Windows Mobile 6 (WinCE) Standard SDK, and ACE_USES_WCHAR
  builds in general.  See docs/design/wchar.txt.

=========================================================================

Version 1.2 of OpenDDS.

New to this version are the following changes:

- Implemented the WaitSet, GuardCondition, and StatusCondition interfaces
  from the OMG DDS specification.

- Implemented DomainParticipant::get_current_time() from formal/07-01-01.

- Added the ability for using multiple repositories to provide redundant
  service metadata management.

  The ability to federate repositories and redirect applications to
  attach to a new repository in the event a repository fails or becomes
  unreachable.  This is an experimental feature.

- Removed requirement for repository domain specification files.

  Repositories will manage DomainParticipants and their contained
  Entities in any domain without requiring the domain to be prespecified
  in a configuration file.  This removes the '-d' command line argument
  from the repositories as well.

- Internal service Entity identifiers have been expanded to 128 bits.

  These internal identifiers were previously 32 bits.  The 128 format
  follows the format of OMG Specification formal/08-04-09 (The Real-time
  Publish-Subscribe Wire Protocol DDS Interoperability Wire Protocol
  Specification, Version 2.0) GUID_t unique identifier type.

  OpenDDS places the identifier value for the DataWriter Entity of a
  publication on the wire to identify the source of data samples.  This
  means that this version of OpenDDS WILL NOT INTEROPERATE with previous
  versions since the 128 values are not compatible with the previous 32
  bit values.

- Java Bindings for OpenDDS

  See $DDS_ROOT/java/README, $DDS_ROOT/java/INSTALL, $DDS_ROOT/java/FAQ

- dcps_ts.pl changes

  Modified this script to create a single idl, header, and source file
  no matter how many types are contained within the input idl file.  This
  allows the output file names to be based upon the input file name (instead
  of the types found in the idl file).  Users of prior OpenDDS versions can
  use the script $DDS_ROOT/bin/update_dcps.pl to assist with this transition.

  Added a command line argument to allow an output directory to be
  specified.  All output files will be placed into this directory if
  present.  They will continue to be placed in the current directory if
  this argument is not present.

- DCPSInfoRepo changes

  A new library has been introduced (libDCPSInfoRepoServ) which provides
  the neccessary hooks for running the DCPSInfoRepo within another process.
  For example usage, see: $DDS_ROOT/dds/InfoRepo/DCPSInfoRepo.cpp.

- Fixed bug in DCPSInfoRepo that did not re-evaluate the compatibility and
  associations when QoS change is made.

- Fixed bugs that affected connection establishment.

  Fixed DataWriterImpl to handle the case that remove_association is called
  before fully_associated is called.

  Fixed a race condition that connection delay deletion removes new assocaitions.

  Corrected fully association ack verification to fix issues when multiple
  associations of a datalink are added simultaneously.

- Added datalink_release_delay and removed keep_link configuration.

  The datalink_release_delay is the delay for datalink release after no
  associations. It defaults to 10 seconds. This is to fix disconnect
  problem happened when removing and adding association related to
  same datalink during short period.

  Removed keep_link which can be replaced with a big value of
  datalink_release_delay.

- Fixed a potential deadlock in reliable multicast transport.

=========================================================================

Version 1.1 of OpenDDS.

New to this version are the following changes:

- Added support for PARTITION QoS policy.

  This QoS policy allows publishers and subscribers to belong to one
  or more logical partitions.  Partition names may contain wildcards.
  However, only wildcards containing "*" or "?" are currently
  supported.

- Added support for DEADLINE QoS policy.

  The DEADLINE QoS policy allows the application to detect when data
  is not written or read within a specified amount of time.  The
  {Offered,Requested}DeadlineMissesStatus::last_instance_handle is
  currently not updated.

- Added support for LIFESPAN QoS policy.

  This policy allows the application to specify when data expires,
  meaning invalid.  Expired data will not be delivered to
  subscribers.

- Added support for the TRANSIENT kind of DURABILITY QoS policy.

  Data will outlive DataWriters when TRANSIENT DURABILITY is
  configured, and will be sent once a new DataWriter is created within
  the same domain for the same topic and type.  The cached data will
  only last as long as the process.

- Added support for the PERSISTENT kind of DURABILITY QoS policy.

  PERSISTENT DURABILITY provides basically the same functionality as
  TRANSIENT DURABILITY, except that cached data will survive process
  destruction.

- Added support for the DURABILITY_SERVICE QoS policy.

  This QoS policy provides a way to specify resource limits for
  domain/topic/type-specific data in a TRANSIENT or PERSISTENT
  DURABILITY cache.  The resource limits in question are analogous to,
  although independent of, those found in the HISTORY and
  RESOURCE_LIMITS policies.

- Added a new command-line option, "-DCPSTransportDebugLevel".

  This can be used to specify a debug level for the OpenDDS
  transport layer at run-time. OpenDDS debug statements range
  from 0 to 5 in increasing order of verbosity.

- Added the ability to attach to multiple DCPSInfoRepo processes.

  Applications which communicate using DDS are no longer restricted to
  communicating using domains controlled by a single DCPSInfoRepo
  process.  Individual domain publications and subscriptions within a
  process can be attached to a designated repository.  Each domain is
  controlled by a single repository and this association may not be
  changed for the lifetime of the repository or the application.

- Added QoS propagation.

  The client applications can change the qos of DCPS entity via
  set_qos() call. The qos updates are propagated to DCPSInfoRepo which
  publishes the updated qos to corresponding BIT datawriter and also
  save it to persistent repository.

- Fixed a few bugs in persistent DCPSInfoRepo support.

  Fixed incorrect actor type and qos type for subscriber/datareader
  problem in UpdateManager::add(const UA& actor). This bug causes the
  reloading from persistent file maps the subscriber/datareader as
  publisher/datawriter.

  Fixed a bug in qos serialization. The TAO_OutputCDR stream was not
  fully copied to buffer when the qos contains sequence data. The
  TAO_OutputCDR stream needs be consolidated before memcpy.

- Fixed compliance with qos RxO.

  Fixed compliance with the DDS specification that qos parameters that
  Durability kind and Deadline.period be compatible between the
  subscriber and the publisher (RxO - Received x Offered)

- Improved Memory Mangament.

  Fixed issues with reference counting for classes derived from
  LocalObject.  If a user defined application is crashing on exit or
  cleanup, see the OpenDDS FAQ.

- Added support for IPv6.

  The requirement for using IPv6 is the fully qualified domain name (FQDN)
  needs be resolved as IPv6 address as it is used by default configuration
  to support BuiltInTopic.

  The local_address in the configuration file should use IPv6 decimal
  address or hostname that can be resolved as IPv6 address.

- Used the address string instead of 4-byte IP address and port number
  for pub/sub endpoint address advertisement.

  The address string in the configuration can use decimal IPv4/IPv6 address
  or hostname that can be resolved on both pub and sub sides.

  The default address string is "host:port". The "host" is the fully qualified
  domain name and the "port" is picked randomly by OS.

- Fixed a problem that the default local_address does not work when hostname
  is resolved as the loopback ip address.

  With the default local_address, the acceptor now is listening on IPv4/IPv6
  ANY, but use the fully qualified hostname for address advertisement.

- Added default configuration for the reliable multicast transport type.

  The multicast_group_address defaults to the ACE default multicast address
  (224.9.9.2:20001 for IPv4 and ff05:0::ff01:1:20001 for IPv6) and the
  local_address defaults to ANY with a random port picked by the OS.

- Fixed a bug in DataReaderImpl::remove_associations() and
  DataWriterImpl::remove_associations() that should not attempt to remove
  the already removed writer/reader.

- Fixed a bug in SimpleTCP that an active disconnect due to the peer
  graceful disconnect does not terminate send. This bug made the re-established
  connection fail on send strategy state check.

- Added dispose() and unregister() notifications.  When dispose()
  is explicitly called on the DataWriter side, the DataReader listener
  on_data_available() callback should receive a sample with the valid_data
  flag == 0 and the instance state == NOT_ALIVE_DISPOSED_INSTANCE_STATE.

  When unregister() is explicitly called on the DataWriter side,
  the DataReader listener on_data_available() callback should receive a
  sample with the valid_data flag == 0 and the instance state ==
  NOT_ALIVE_NO_WRITERS_INSTANCE_STATE.

- Moved TRANSPORTTYPE_QOS_POLICY_NAME and TRANSPORTTYPE_QOS_POLICY_ID
  from DDS namespace to OpenDDS namespace since they are specific to
  OpenDDS.

=========================================================================

Version 1.0 of OpenDDS.

New to this version are the following changes:

- This product has been renamed to OpenDDS from "TAO DDS"

  Namespace and module names have been changed accordingly, except for a few
  cases where we are counting on certain names being generated by the TAO_IDL
  compiler.


- The default participant setting for BITs is now "on"

  This change was actually part of 0.12 but the release notes were not updated
  to include it.  Please see the entry with the same title under the "Version
  0.12" section below for more details.


- Simplified .mpc and .mpb files

  Projects that use DDS no longer need to explicitly list "portableserver" as a
  base project.  It will be included by the "dcps*" base projects such as
  "dcpsexe" and "dcpsexe_with_tcp".  Also, an .mpb file is provided for each of
  the transport libraries (dcps_tcp.mpb, dcps_unreliable_dgram.mpb,
  dcps_reliable_multicast.mpb).


- Supported built-in sequences (the CORBA::*Seq sequences).

  Implementation details:

    DDS keeps copies of the $TAO_ROOT/tao/*Seq.pidl in
    $DDS_ROOT/dds/CorbaSeq directory and renamed to *.idl files.
    These idl files are compiled with a new IDL option -Gdcpsonly to
    just generate the DDS specific code for built in sequences. The
    DDS CORBA::*Seq generated code will include the TAO CORBA::*Seq
    generated code so both TAO and DDS functions will be available.

    When a DDS application contains an idl file that includes
    $TAO_ROOT/tao/*Seq*.pidl, the generated code will include the DDS
    specific built in sequences code(under $DDS_ROOT/dds/ directory)
    instead of TAO specific built in sequences code(under
    $TAO_ROOT/tao/ directory).

  Notes:

    - The idl files in $DDS_ROOT/dds/CorbaSeq directory are internally
      used by DDS and CAN NOT be included in your idl files.

    - Currently the CORBA::AnySeq is not supported since DDS does not
      support serialization of Any type data.


- The DDS entities (e.g. DomainParticipant, FooDataReader) have changed from
  *remote* IDL types to *local* IDL types and the data sequence and info
  sequence types have changed from normal IDL sequences to types with extra
  functionality required to support zero-copy reads.

   *** This change requires changes to DDS user code. ***

   --- impacts on user code ---
   1) The <Foo>ZCSeq and ::TAO::DCPS::SampleInfoZCSeq no longer exist.
        The <Foo>Seq and DDS::SampleInfoSeq have been changed
        to support both single-copy reads (as before) and zero-copy reads
        (like <Foo>ZCSeq should have).

        Change ::TAO::DCPS::SampleInfoZCSeq to ::DDS::SampleInfoSeq.
        Change <Foo>ZCSeq to [Modlue::]<Foo>Seq.

        The default constructor for <Foo>Seq enables zero-copy reads.
        Constructing a <Foo>Seq(num) with num > 0 enables single-copy reads.

   2) Listeners will now inherit from DDS::<enity>Listner instead of
        POA_DDS::<entity> or POA_TAO::DCPS::DataReader/WriterListener and
        should inherit as a local object (not a servant).  DDS provides a
        helper template that adds reference counting.  Use of this template
        (as shown below) is highly recommended.

        for example:

                class DataReaderListenerImpl
                : public virtual POA_DDS::DataReaderListener,
                        public virtual PortableServer::RefCountServantBase
                {...};

        will become:

                class DataReaderListenerImpl
                : public virtual TAO::DCPS::LocalObject<DDS::DataReaderListener>
                {...};

        but the header and implementation should require no other changes.

        NOTE: if you are implementing the TAO specific reconnection callbacks,
        on*disconnected, on_*_reconnected, on_*_lost, on_connection_deleted
        then you should change inheritance from
                POA_TAO::DCPS::DataReaderListener
                       to
                TAO::DCPS::LocalObject<TAO::DCPS::DataReaderListener>
        and remove inheritance from PortableServer::RefCountServantBase

   3) Implemenation reference counting cleanup code is no longer used

       For example:
                SimpleTypeSupportImpl sts_servant = new SimpleTypeSupportImpl;
                PortableServer::ServantBase_var safe_servant = sts_servant;

                SimpleTypeSupport_var fts =
                        TAO::DCPS::servant_to_reference (sts_servant);

                if (::DDS::RETCODE_OK != fts->register_type(dp.in (), MY_TYPE))

       becomes:

                SimpleTypeSupport_var fts = new SimpleTypeSupportImpl;

                if (::DDS::RETCODE_OK != fts->register_type(dp.in (), MY_TYPE))

       although the old style is discurraged it will still work.


    4) Since the DCPS interfaces are now local, there is very little
       performance gain to convert from _var to a servant pointer (using
       reference_to_servant).

       For example:
           ::DDS::DataWriter_var dw =
                 pub->create_datawriter(topic.in (),
                                        dw_qos,
                                        ::DDS::DataWriterListener::_nil());

                        Test::SimpleDataWriter_var foo_dw
                                = Test::SimpleDataWriter::_narrow(dw.in ());

                        // This is unnesesary but will still work.
                        // Previously fast_dw was used to increase the
                        // performance of writing samples.
                        Test::SimpleDataWriterImpl* fast_dw =
                            TAO::DCPS::reference_to_servant<Test::SimpleDataWriterImpl>
                            (foo_dw.in ());

                Also, a pointer to the servant is no longer needed for making
                calls on zero-copy read supporting overloaded methods.

   5) If the user defined DDS type is in a module then the generated types will
      also be in that same module.

                        Given a "Foo" DDS type defined in the module "Test":
                                  old           new
                                  --------      ------------
                        type      Test::Foo     Test::Foo
                        sequence  FooSeq        Test::FooSeq
                        reader    FooDataReader Test::FooDataReader
                        writer    FooDataWriter Test::FooDataWriter

   6) The --module option to dcps_ts.pl is no longer supported.
           The module is set as described in point #5 above.

   7) What did not change.
        You may use the following:
        <entity>_var, <entity>_ptr
        <entity>::_narrrow()    // might use this for a listener
        <entity>::_duplicate()
        TAO::DCPS::servant_to_reference()
        TAO::DCPS::reference_to_servant()
        TAO::DCPS::deactivate() // now a no-op

        Note: if you used
                                        TAO::DCPS::servant_to_reference(),
                                        TAO::DCPS::reference_to_servant(), or
                                        TAO::DCPS::deactivate_object
                for non-DDS interfaces then you may change to:
                                        remote_reference_to_servant
                                        servant_to_remote_reference
                                        deactivate_remote_object

        --- end of local interface impact to users ---


  - Made the sub/pub repo id generated by DCPSInfoRepo to be unique
    per DCPSInfoRepo instance instead of being unique per domain.
    This would allow multiple domains in the same process(connect
    to the same DCPSInfoRepo instance) share the same transport.

=========================================================================
Version 0.12 of TAO DDS.

New to this version are the following changes:

- The default participant setting for BITs is now "on".

   BIT settings need to be synchronized across all participants (including
   the InfoRepo) in a domain. A mixed setting environment may not operate
   correctly.

- DCPSInfoRepo service now has a file based persistence mechanism. This
  can be configured to actively persist the InfoRepo's current state
  and in cause of a fatal failure to resurrect the same into the
  saved state.

- Fixed a bug on registration sample marshalling when data type has
  unbounded size and registers with variable size data. The problem is
  the serialization buffer does not allocate enough memory for the
  registered sample.

- It is now possible to build DDS without Built-In-Topic (BIT) support in order
  to reduce the footprint of DDS.
    # Generate the makefiles/projects like:
    mwc.pl -type <yourtype> -features built_in_topics=0 DDS.mwc
  Also, if <yourtype> happens to be gnuace, add "built_in_topics=0" to the
  platform_macros.GNU file or the MAKEFLAGS environment variable.

  If you are building against TAO 1.5a (patch level "0") and are NOT disabling
  the built_in_topics, you will need to add "built_in_topics=1" to the
  platform_macros.GNU file or the MAKEFLAGS environemnt variable since the
  inclusion of rules.dds.GNU does not work with that version of ACE+TAO.

- The reliable multicast transport was added.  See the DDS developers guide
  for details.
  NOTE: The reliable multicast (unlike the unreliable multicast) transport
        currently doesn't provide a default configuration.  The use of the
        transport IDs TAO::DCPS::DEFAULT_RELIABLE_MULTICAST_SUB_ID and
        TAO::DCPS::DEFAULT_RELIABLE_MULTICAST_PUB_ID is unsupported.

- Fixed an issue with GCC 4 "hidden visibility" for shared libraries.

- Support for Built-In-Topics and the TRANSIENT_LOCAL value for DURABILITY QoS
  is now complete.  This means that BITs will now work as specified.

- Implemented support for zero-copy read.

  Per the spec, when the sequences given to read/take have max_len = 0
  the samples are not copied but are loaned to the application.

  Each data type has a <type>Seq and a <type>ZCSeq sequence.
  The <type>ZCSeq supports zero-copy reads but the <type>Seq does not.

  The default <type>ZCSeq constructor enables zero-copy read/take.
  The first parameter of the constructor defines the max_len.
  If max_len == 0 then zero-copy reading/taking is enabled.
  If max_len > 0 then single-copy reading/taking is enabled.
  See dds/DCPS/ZeroCopySeq_T.h for more details.

  In the next release there will be just one data sequence type
  per DDS type, <type>Seq, that supports single-copy and
  zero-copy reads (like <type>ZCSeq).  This will simplify the
  implementation of application code and make zero-copy read
  the default read/take implementation.

  Performance note: Testing has shown that samples of size 8KB or
  less do not benefit from using zero-copy reads but there is no
  negative impact on performance when using zero-copy reads for
  smaller sized samples.

  Note: zero-copy read is supported by the read and take methods but
  it should also be supported by the read_instance and take_instance
  methods.  This will be fixed in the next release.

=========================================================================

Version 0.11 of TAO DDS.

New to this version are the following changes:

- None, Version 0.11 was just a re-release of 0.10 with the version numbers
  corrected.

=========================================================================

Version 0.10 of TAO DDS.

New to this version are the following changes:

- The DCPSInfoRepo executable is now moved to $DDS_ROOT/bin.  It was previously
  located in $DDS_ROOT/dds/InfoRepo.

- Allow configurations to specify a transport that is not in a loaded
  library.  This will print a warning to ACE_ERROR but will not fail
  until the user attempts to attach the transport to a reader/writer.
  This is useful for tests, we can now unify sub.ini and sub_udp.ini,
  for example.

- Fix a deadlock in the DCPSInfoRepo server related to
  nested CORBA upcalls.

- Several memory leak fixes.

- A new dedicated task to cleanup resources upon remote DataLink
  disconnection. This is used among other places for cleaning
  up resources upon remote side crash.

- New configuration option 'passive_connect_duration' to set
  timeout on initial passive connection establishment. Setting
  this prevents deadlock when the InfoRepo directs subscriber
  to connect with a bogus/dead publisher. See the DDS Programmer's
  Guide for details.

- Fix compile issues on Green Hills compiler.

- Decrease core DDS library footprint by breaking up SimpleTCP transport
  into a separate library.

- Enhance the previous logging mechanism. Add log levels. Logging
  can be entirely compiled out for increased performance. See the
  DDS Programmer's Guide for details.

- Fix race condition involving Reconnection task.
  Fix race-condition in sending graceful disconnect message.
  Fix race condition in 'send_delayed_notifications'.

- Increase performance by making thread synchronization more
  fine grained.

- Supported an unreliable multicast transport -  SimpleMcast.

- Refactored SimpleUdp and SimpleMcast and now the SimpleUnreliableDgram
  library supports both SimpleUdp and SimpleMcast transports.

- Moved mpb files from the top-level DDS directory,
  into MPC/config, to make them consistent with
  the location of similar files in TAO and CIAO.
  Now the TAO version has to have an
  $ACE_wrappers/bin/MakeProjectCreator/config/MPC.cfg to
  make MPC run success for DDS.

- Fixed memory grow in the thread-per-connection when datawriter writes too
  fast and continuously requests remove_sample. The problem is the samples
  in thread-per-connection queue are not removed and cause memory grow.

- Supported the datareader and datawriter restart up without shutdown transport.

  Made the DCPS entity servants deleted upon delete_*()
  call instead of upon orb shutdown. This would make the create/delete
  DCPS entity multiple times in a single process without shutdown
  Service Participant.

  The reconnect thread and connection object memory leaking problem was fixed.
  A dedicated task belonging to the TransportImpl object is used to clean up
  any resources associated with the DataLink.

  Added keep_link configuration to indicate whether a datalink should
  be maintained when all associations are removed. This would allow
  the datareader/datawriter restart in same endpoint reconnect reuse
  the same connection.

- Fixed a problem that the send_start could send on a nil datalink.
  The problem is a datalink insertion and finding are not sychnorized.

- Supported the default transport id for SimpleTcp and SimpleUdp.
  The range 0xFFFFFF00 to 0xFFFFFFFF is reserved for
  DEFAULT_<transport>_CONFIG values. Each specific transport
  has its default id in that range such as DEFAULT_SIMPLE_TCP_ID = 0xFFFFFF00
  and DEFAULT_SIMPLE_UDP_ID = 0xFFFFFF01. Note the default transports can not
  be configured by the users.

- Added on_connection_deleted to TAO::DCPS::DataWriterListener/DataReaderListener
  for testing connection object memory leak.

- Fixed a bug that uses a platform dependent type - size_t in FULLY_ASSOICIATION
  message. This would make publisher and subscriber not fully associated
  in inter-host test such as tests between windowsXP and Linux.

=== known problem ===
1. $DDS_ROOT/DevGuideExamples/DDS/Messenger/run_*_test.pl is not configured
correctly for SimpleTCP.
$DDS_ROOT/DevGuideExamples/DDS/Messenger/run_test.pl, however, is set up for
the new SimpleTCP implementation.

2. With certain combinations of DDS version, TAO version, and compiler
version, singletons stopped working across shared-lib boundaries (code from
each shared lib would get a different singleton).

Note: #1 and #2 are resolved in the next release.

=========================================================================

Version 0.9 of TAO DDS.

New to this version are the following changes:

  - Supported DDS build on VS6, gcc 4.1 and gcc 3.3.3.

  - Fixed a potential deadlock in SimpleTcpReconnectTask which could
    happen when shutdown() is invoked by the reconnect thread.

  - Fixed a deadlock situation on linux when the direct_send()
    detects a lost connection and calls the relink(). The problem is
    a non-recursive lock in send strategy is recursively acquired.

  - Added fully association establishment support. This should fix the
    problem:
      "create_meteorite() does not wait for full association establishment
      so even if there are waiting subscribers,  a write shortly after
      creating the datawriter may be dropped on the publisher side because
      add_associations() has not completed on the publisher side.
      The sample may also be dropped on the subscriber side because the
      connection exists between the publisher and subscriber but the
      associations have not been mapped on the subscriber side."

  - Supported thread-per-connection send. A new configuration
     "thread_per_connection" is added to turn on and turn off(default) this
     new feature. With this new feature, the samples are sent to different
     connections in parallel.

      # Determine if the transport needs create a new thread for a
      # datalink/connection to send samples under normal traffic (no backpressure).
      # If thread_per_connection is 1, the publisher creates a supered thread
      # for each datalink/connection to send samples instead of using the same
      # thread to send to different dealing's/connections sequentially.
      # The default value is 0 (using same thread send to all datalinks)
      thread_per_connection=

--- more notes and limitations ---

    - Current transport on receiving side does not handle a packet with
      a single control message with no data such as GRACEFUL_DISCONNECT
      message. To work around with this problem, some bogus data is sent
      with the message.

--- status of nightly build tests ---

    - The built-in topic tests failure are expected since the builtin topic was not
      supported and tested.

    - tests failed intermittently

      tests/DCPS/Compiler/idl_test1_main/run_test.pl
      [Details] ERROR: <idl_test1> exited with coredump from signal 11 : SEXY

      tests/DCPS/FooTest5_0/run_test.pl udp
      [Details] (24994|1084229984) DataReaderImpl::remove_associations: ERROR: Unable to remove writer publisher_id 5.
      [Details] (24994|1084229984) ERROR: DataReaderImpl::add_associations, invalid liveliness_changed_status inactive count.

      tests/DCPS/Reconnect/run_test.pl bp_timeout
      [Details] test FAILED. Please see the /tao_builds/taoadmin/BETA/ACE_wrappers/TAO/DDS/tests/DCPS/Reconnect/test.log for details.
      [Details] Error: tests/DCPS/Reconnect/run_test.pl bp_timeout returned with status 2

=========================================================================

Version 0.8 of TAO DDS.

New to this version are the following changes:

  - Added configuration of DCPS and transports via configuration files.
    This also simplified the code related to creating and configuring
    transports.
    See file://TAO_DDS_Configuration_Settings.html for more information.

  - fixed a possible deadlock.
    The scenario it was found in was:
    * Start a subscriber with two readers.
    * start a publisher with two corresponding writers.
    * the subscriber would deadlock between the ORB and transport
      threads.
    * If the publisher started first, it would not deadlock.

  - changed some heap allocations to cached allocator allocations.
    No heap allocations are in the write -> read code path for
    value types containing scalars (no arrays, sequences or strings).

  - Uninlined some unnecessary inlines to reduce the footprint.

  - Added DDS_HAS_MINIMUM_BIT macro to build without Built In Topic
    support. Defining the macro will NOT build BIT support.

  - Made the DCPSInfoRepo register with IOR table as well as providing
    the ior file to provide alternate schemes of distributing the object
    reference and made the DCPSInfoRepo object reference to be persistent
    to simplify deployment.

  - Added an option -DCPSInfoRepo to replace -DCPSInfo option and deprecated
    -DCPSInfo option.

  - Fixed a bug in Registered_Data_Types that caused multiple domain participants
    within the same domain in a process to not register same data types.

  - Fixed DDS application failure between the publisher and subscriber
    on different endianess machines. The byte order is set upon data
    serializing and de-serializing.
    The swap_bytes configuration value per TransportImpl instance is now
    appropriately used to allow different transports use different setting
    of swap_bytes.

  - Added TypeSupport::get_type_name() support. If a nil type name is supplied
    by user to register type support then the default type name - the interface
    repository id is used.

  - Supported the SimpleTCP connection re-establishment and
    disconnected/lost/reconnected publication and subscription callbacks.
    The disconnected callback is called just before reconnect is attempted.
    If reconnect fails, the connection lost callback is called.
    If reconnect succeeds, the reconnected callback is called. During
    reconnecting, the messages are queued until the reconnecting is done.
    If the reconnecting succeeds, the queued messages are sent out.
    Otherwise the messages are discarded.

    The main changes are:

    1) Added new idl interfaces - TAO::DataReaderListener and
       TAO::DataWriterListener to support on_*_disconnected,
       on_*_lost and on_*_reconnected callbacks.

    2) New configuration values are added to support the
       reconnect strategy.

        ###=== Configurations for connector side during reconnecting===

        # The initial retry delay in milliseconds.
        # The first connection retry will be when the loss of connection
        # is detected.  The second try will be after this delay.
        # The default is 500 miliseconds.
        conn_retry_initial_delay=

        # The backoff multiplier for reconnection strategy.
        # The third and so on reconnect will be this value * the previous delay.
        # Hence with conn_retry_initial_delay=500 and conn_retry_backoff_multiplier=1.5
        # the second reconnect attempt will be at 0.5 seconds after first retry connect
        # fails; the third attempt will be 0.75 seconds after the second retry connect
        # fails; the fourth attempt will be 1.125 seconds after the third retry connect
        # fails.
        # The default value is 2.0.
        conn_retry_backoff_multiplier=

        # Number of attemps to reconnect before giving up and calling
        # on_publication_lost() and on_subscription_lost() callbacks.
        # The default is 3.
        conn_retry_attempts=

        # Maximum period (in milliseconds) of not being able to send queued
        # messages. If there are samples queued and no output for longer
        # than this period then the connection will be closed and on_*_lost()
        # callbacks will be called. If the value is zero, the default, then
        # this check will not be made.
        max_output_pause_period=

        ###=== Configurations for acceptor side during reconnecting===

        # The time period in milliseconds for the acceptor side
        # of a connection to wait for the connection to be reconnected.
        # If not reconnected within this period then
        # on_publication_lost() and on_subscription_lost() callbacks
        # will be called.
        # The default is 2 seconds (2000 millseconds).
        passive_reconnect_duration=

    Implemenation details:
     a) A new interface - relink() is added to both receive
       and send strategy. The relink () is called whenever send or
       recv call fails. The acceptor/connector role of a connection
       object represents does not change during reconnecting. The
       connector side actively tries to reconnect and the acceptor
       side passively waits for the new connection coming.


     b) Added a new test $DDS_ROOT/tests/DCPS/Reconnect to test
        the on_*_lost callback and the connection re-establishment.

  - Fixed a problem that add_association() failed when multiple
    publishers/subscribers start simultaneously. Added a lock
    to protect the internal map in DataLinkSetMap to fix the
    problem.

--- more notes and limitations ---
  This section adds on to the "KNOWN LIMITATIONS" section at the bottom
  of this document.

  - A transport instance may only be used by publications and subscriptions
    of a single domain because the pub & sub ids are only unique within
    a domain and the transport uses this ids to map associations to
    links/connections.

  - The current transport implementation does not allow associations between
    datareaders and datawriters associated with the same transport in the same
    process. To work around this limitation, the datareader and the datawriter
    need use different TransportImpl objects. Otherwise, there are such errors:

    (1428|2740) ERROR: RepoId (9) already exists in RepoIdSet for RepoId (8).
    (1428|2740) ERROR: Failed to insert local subscriber_id (8) to remote publisher_id (9)

=========================================================================

Version 0.7 of TAO DDS.

New to this version are the following changes:
  - Added a configuration parameter to control the use of the Nagle
    algorithm for the SimpleTCP protocol.  By default, the Nagle
    algorithm is now disabled.
  - Improved VC6 support.
  - Fixed some memory leaks.
  - Added support for 64 bit architectures.

=========================================================================

Version 0.6 of TAO DDS.

New to this version are the following changes:
  - Changed the default ior file name for DCPSInfoRepo from dcps_ir.ior
    to repo.ior.
  - Changed the packet and sample length fields to 32 bit integers so
    we can support samples larger than 64 KB.
  - Improved support for MS VC6

=========================================================================

Version 0.5 of TAO DDS.

New to this version are the following changes:
  - Many memory leaks have been removed.
  - A memory allocation bug has been corrected.
  - The -a option of DCPSInfoRepo now works as documented.

=========================================================================

This is the first release of a Data Distribution Service (DDS).

See the User's Guide for an user introduction to the service.

TAO's DDS implementation consists of the following:
* Implementation of the interfaces in the DDS spec and
  $DDS_ROOT/dds/DCPS

* A service repository driver in $DDS_ROOT/dds/InfoRepo

* Type support generator, dcps_ts.pl, is in $DDS_ROOT/bin
  and its templates are in $DDS_ROOT/bin/DCPS.

* You must use DDS with a version of TAO that has had its
  TAO_IDL compiler modified to support DDS type definition
  using the -Gdcps option.  Any OCI version later than
  TAO 1.4a P4 or DOC group version later than 1.4.6 should
  work.

* An example in $DDS_ROOT/DevGuideExamples/DDS

* Functional tests in $DDS_ROOT/tests

* Performance tests in $DDS_ROOT/performance-tests
