From: Guus Sliepen Date: Thu, 8 Aug 2019 13:20:42 +0000 (+0200) Subject: Add the MESHLINK_CHANNEL_NO_PARTIAL flag. X-Git-Url: http://git.meshlink.io/?p=meshlink;a=commitdiff_plain;h=3e675d73bc4d524a0a68a1ec782fe7e3960af398 Add the MESHLINK_CHANNEL_NO_PARTIAL flag. This ensures that calls to meshlink_channel_send() either succeed with all data sent, or no data sent at all. --- diff --git a/src/meshlink++.h b/src/meshlink++.h index 8287e038..2dcac002 100644 --- a/src/meshlink++.h +++ b/src/meshlink++.h @@ -113,6 +113,7 @@ public: static const uint32_t ORDERED = MESHLINK_CHANNEL_ORDERED; static const uint32_t FRAMED = MESHLINK_CHANNEL_FRAMED; static const uint32_t DROP_LATE = MESHLINK_CHANNEL_DROP_LATE; + static const uint32_t NO_PARTIAL = MESHLINK_CHANNEL_NO_PARTIAL; static const uint32_t TCP = MESHLINK_CHANNEL_TCP; static const uint32_t UDP = MESHLINK_CHANNEL_UDP; }; @@ -714,6 +715,8 @@ public: * @param len The length of the data. * * @return The amount of data that was queued, which can be less than len, or a negative value in case of an error. + * If MESHLINK_CHANNEL_NO_PARTIAL is set, then the result will either be len, + * 0 if the buffer is currently too full, or -1 if len is too big even for an empty buffer. */ ssize_t channel_send(channel *channel, void *data, size_t len) { return meshlink_channel_send(handle, channel, data, len); diff --git a/src/meshlink.h b/src/meshlink.h index 6a1c758a..40deb5f1 100644 --- a/src/meshlink.h +++ b/src/meshlink.h @@ -94,6 +94,7 @@ static const uint32_t MESHLINK_CHANNEL_RELIABLE = 1; // Data is retransmitted static const uint32_t MESHLINK_CHANNEL_ORDERED = 2; // Data is delivered in-order to the application. static const uint32_t MESHLINK_CHANNEL_FRAMED = 4; // Data is delivered in chunks of the same length as data was originally sent. static const uint32_t MESHLINK_CHANNEL_DROP_LATE = 8; // When packets are reordered, late packets are ignored. +static const uint32_t MESHLINK_CHANNEL_NO_PARTIAL = 16; // Calls to meshlink_channel_send() will either send all data or nothing. static const uint32_t MESHLINK_CHANNEL_TCP = 3; // Select TCP semantics. static const uint32_t MESHLINK_CHANNEL_UDP = 0; // Select UDP semantics. @@ -1119,6 +1120,8 @@ extern void meshlink_channel_close(meshlink_handle_t *mesh, meshlink_channel_t * * @param len The length of the data, or 0 if there is no data to send. * * @return The amount of data that was queued, which can be less than len, or a negative value in case of an error. + * If MESHLINK_CHANNEL_NO_PARTIAL is set, then the result will either be len, + * 0 if the buffer is currently too full, or -1 if len is too big even for an empty buffer. */ extern ssize_t meshlink_channel_send(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len); diff --git a/src/utcp b/src/utcp index fa93ca75..3bc56405 160000 --- a/src/utcp +++ b/src/utcp @@ -1 +1 @@ -Subproject commit fa93ca75a603758e00781f2e9acb52bdbe6695b7 +Subproject commit 3bc564058072a79a22320f8c5bc50e8844896114