transport: Handle read operations less strict.
commitc3cd9879e7488332db3ec44339324fe137eb223e
authorMarc Schink <jaylink-dev@marcschink.de>
Thu, 27 Nov 2014 20:19:58 +0000 (27 15:19 -0500)
committerMarc Schink <jaylink-dev@marcschink.de>
Mon, 2 Mar 2015 08:20:30 +0000 (2 03:20 -0500)
tree978272048a9448361a1ad1c59fe792d133cdb879
parenta86642621172d41428ab478acae903f5ca3f613b
transport: Handle read operations less strict.

The current implementation of a read operation does not allow that
the number of bytes received from a device exceeds the length a read
operation was started with.

A few commands can't be implemented with such a strict approach
because the number of received bytes is not known in advance. For
such commands, the device for example, returns the size of the
payload and, if available, the payload itself at one go. Therefore
the amount of data, and thus the length of a read operation, is not
known at the moment the read operation is started.

With this patch a read operation keeps exceeding bytes in the
internal buffer whereby they can be read with an additional read
operation. Thus it is possible to start a read operation just to
receive the size of the potential payload first. If no payload is
present, the read operation behaves as before. Otherwise the
exceeding payload will be kept in the internal buffer and can
afterwards be read with an additional read operation.
libjaylink/libjaylink-internal.h
libjaylink/transport.c