 
.. This work is licensed under a Creative Commons Attribution 4.0 International License. 
.. SPDX-License-Identifier: CC-BY-4.0 
.. CAUTION: this document is generated from source in doc/src/rtd. 
.. To make changes edit the source and recompile the document. 
.. Do NOT make changes directly to .rst or .md files. 
 
 
RMR Release Notes 
============================================================================================ 
 
The following is a list of release highlights for the core 
RMR library. These are extracted directly from the CHANGES 
file at the repo root; please refer to that file for a 
completely up to date listing of API changes. 
 
 
2019 October 31; version 1.10.2 
-------------------------------------------------------------------------------------------- 
 
Provide the means to increase the payload size of a received 
message without losing the data needed to use the 
rmr_rts_msg() funciton. 
 
 
2019 October 21; version 1.10.1 
-------------------------------------------------------------------------------------------- 
 
Fix to prevent null message buffer from being returned by the 
timeout receive function if the function is passed one to 
reuse. 
 
 
2019 October 21; version 1.10.1 
-------------------------------------------------------------------------------------------- 
 
Add periodic dump of send count info to stderr. 
 
 
2019 September 27; version 1.9.0 
-------------------------------------------------------------------------------------------- 
 
Python bindings added receive all queued function and 
corrected a unit test 
 
 
2019 September 25; version 1.8.3 
-------------------------------------------------------------------------------------------- 
 
Correct application level test issue causing timing problems 
during jenkins verification testing at command and merge 
 
Handle the NNG connection shutdown status which may now be 
generated when a connection throug a proxy is reset. 
 
 
2019 September 25; version 1.8.2 
-------------------------------------------------------------------------------------------- 
 
Correct bug in rmr_torcv_msg() when timeout set to zero (0). 
 
 
2019 September 19; version 1.8.1 
-------------------------------------------------------------------------------------------- 
 
Correct missing constant for wrappers. 
 
2019 September 19; version 1.8.0 
-------------------------------------------------------------------------------------------- 
 
New message types added: RAN_CONNECTED, RAN_RESTARTED, 
RAN_RECONFIGURED 
 
 
2019 September 17; version 1.7.0 
-------------------------------------------------------------------------------------------- 
 
Initial connection mode now defaults to asynchronous. Set 
RMR_ASYNC_CONN=0 in the environment before rmr_init() is 
invoked to revert to synchronous first TCP connections. 
(Recovery connection attempts have always been asynchronous). 
 
 
2019 September 3; version 1.6.0 
-------------------------------------------------------------------------------------------- 
 
Fix bug in the rmr_rts_msg() function. If a return to sender 
message failed, the source IP address was not correctly 
adjusted and could cause the message to be "reflected" back 
to the sender on a retry. 
 
Added the ability to set the source "ID" via an environment 
var (RMR_SRC_ID). When present in the environment, the string 
will be placed in to the message header as the source and 
thus be used by an application calling rmr_rts_smg() to 
return a response to the sender. If this environment variable 
is not present, the host name (original behaviour) is used. 
 
 
2019 August 26; version 1.4.0 
-------------------------------------------------------------------------------------------- 
 
New message types were added. 
 
 
2019 August 16; version 1.3.0 
-------------------------------------------------------------------------------------------- 
 
New mesage types added. 
 
 
2019 August 13; version 1.2.0 (API change, non-breaking) 
-------------------------------------------------------------------------------------------- 
 
The function rmr_get_xact() was added to proide a convenient 
way to extract the transaction field from a message. 
 
 
2019 August 8; version 1.1.0 (API change) 
-------------------------------------------------------------------------------------------- 
 
This change should be backward compatable/non-breaking A new 
field has been added to the message buffer (rmr_mbuf_t). This 
field (tp_state) is used to communicate the errno value that 
the transport mechanism might set during send and/or receive 
operations. C programmes should continue to use errno 
directly, but in some environments wrappers may not be able 
to access errno and this provides the value to them. See the 
rmr_alloc_msg manual page for more details. 
 
2019 August 6; version 1.0.45 (build changes) 
-------------------------------------------------------------------------------------------- 
 
Support for the Nanomsg transport library has been dropped. 
The library librmr.* will no longer be included in packages. 
 
Packages will install RMR libraries into the system preferred 
target directory. On some systems this is /usr/local/lib and 
on others it is /usr/local/lib64. The diretory is determined 
by the sytem on which the package is built and NOT by the 
system installing the package, so it's possible that the RMR 
libraries end up in a strange location if the .deb or .rpm 
file was generated on a Linux flavour that has a different 
preference than the one where the package is installed. 
 
 
2019 August 6; version 1.0.44 (API change) 
-------------------------------------------------------------------------------------------- 
 
Added a new message type constant. 
 
 
2019 July 15; Version 1.0.39 (bug fix) 
-------------------------------------------------------------------------------------------- 
 
Prevent unnecessary usleep in retry loop. 
 
 
2019 July 12; Version 1.0.38 (API change) 
-------------------------------------------------------------------------------------------- 
 
Added new message types to RIC_message_types.h. 
 
 
2019 July 11; Version 1.0.37 
-------------------------------------------------------------------------------------------- 
 
 
librmr and librmr_nng - Add message buffer API function 
rmr_trace_ref() (see rmr_trace_ref.3 manual page in dev 
package). 
 
