 
.. 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 November 14; version 1.11.1 
-------------------------------------------------------------------------------------------- 
 
Fix bug in payload reallocation function; correct length of 
payload was not always copied. 
 
 
2019 November 4; version 1.11.0 
-------------------------------------------------------------------------------------------- 
 
Version bump to move away from the 1.10.* to distinguish 
between release A and the trial. 
 
 
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). 
 
