
API and build change  and fix summaries. Doc correctsions
and/or changes are not mentioned here; see the commit messages.

2020 January 21; verison 3.0.2
	Fix bug in SI95 (missing reallocate payload function).

2020 January 20; verison 3.0.1
	Enable support for dynamic route table updates via RMR session.

2020 January 16; version 3.0.0
	Introduce support for SI95 transport library to replace NNG.
	(RMR library versions will use leading odd numbers to avoid tag collisions
	 with the wrapper tags which will use even numbers.)

2019 December 9; version 1.13.1
	Correct documentation and missing rel-notes update for RTD.

2019 December 6; version 1.13.0
	Add ability to route messages based on the MEID in a message combined
	with the message type/subscription-ID.


2019 November 14; version 1.11.1 (Amber)
	Fix bug in payload reallocation function; correct length of payload
	was not always copied.

2019 November 13; version 1.12.1
	New message type constants added to support A1.

2019 November 4; version 1.11.0 (Amber)
	Version bump to move away from the 1.10.* to distinguish between
	release A and the trial.

2019 November 7; version 1.12.0
	Version cut to support continued development for next release
	preserving the 1.11.* versions for release 1 (Amber) and 
	related fixes.

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).

