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

2019 November 14; version 1.11.1
	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
	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).

