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

