mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-21 14:03:11 -07:00
Add Test for Takion Send Buffer
This commit is contained in:
parent
8914ac5f0b
commit
03b81e9509
6 changed files with 192 additions and 4 deletions
|
@ -23,6 +23,8 @@
|
|||
#include "thread.h"
|
||||
#include "seqnum.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
@ -47,12 +49,18 @@ typedef struct chiaki_takion_send_buffer_t
|
|||
} ChiakiTakionSendBuffer;
|
||||
|
||||
|
||||
/**
|
||||
* Init a Send Buffer and start a thread that automatically re-sends packets on takion.
|
||||
*
|
||||
* @param takion if NULL, the Send Buffer thread will effectively do nothing (for unit testing)
|
||||
* @param size number of packet slots
|
||||
*/
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_init(ChiakiTakionSendBuffer *send_buffer, ChiakiTakion *takion, size_t size);
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_start(ChiakiTakionSendBuffer *send_buffer);
|
||||
CHIAKI_EXPORT void chiaki_takion_send_buffer_fini(ChiakiTakionSendBuffer *send_buffer);
|
||||
|
||||
/**
|
||||
* @param buf ownership of this is taken by the ChiakiTakionSendBuffer, which will free it automatically later!
|
||||
* On error, buf is freed immediately.
|
||||
*/
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_push(ChiakiTakionSendBuffer *send_buffer, ChiakiSeqNum32 seq_num, uint8_t *buf, size_t buf_size);
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_ack(ChiakiTakionSendBuffer *send_buffer, ChiakiSeqNum32 seq_num);
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
* along with Chiaki. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CHIAKI_UNIT_TEST
|
||||
|
||||
#include <chiaki/takionsendbuffer.h>
|
||||
#include <chiaki/takion.h>
|
||||
#include <chiaki/time.h>
|
||||
|
@ -22,11 +24,11 @@
|
|||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
#define TAKION_DATA_RESEND_TIMEOUT_MS 200
|
||||
#define TAKION_DATA_RESEND_WAKEUP_TIMEOUT_MS (TAKION_DATA_RESEND_TIMEOUT_MS/2)
|
||||
#define TAKION_DATA_RESEND_TRIES_MAX 10
|
||||
|
||||
#endif
|
||||
|
||||
struct chiaki_takion_send_buffer_packet_t
|
||||
{
|
||||
|
@ -37,12 +39,14 @@ struct chiaki_takion_send_buffer_packet_t
|
|||
size_t buf_size;
|
||||
}; // ChiakiTakionSendBufferPacket
|
||||
|
||||
#ifndef CHIAKI_UNIT_TEST
|
||||
|
||||
static void *takion_send_buffer_thread_func(void *user);
|
||||
|
||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_init(ChiakiTakionSendBuffer *send_buffer, ChiakiTakion *takion, size_t size)
|
||||
{
|
||||
send_buffer->takion = takion;
|
||||
send_buffer->log = takion->log;
|
||||
send_buffer->log = takion ? takion->log : NULL;
|
||||
|
||||
send_buffer->packets = calloc(size, sizeof(ChiakiTakionSendBufferPacket));
|
||||
if(!send_buffer->packets)
|
||||
|
@ -132,6 +136,8 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_push(ChiakiTakionSendBuf
|
|||
}
|
||||
|
||||
beach:
|
||||
if(err != CHIAKI_ERR_SUCCESS)
|
||||
free(buf);
|
||||
chiaki_mutex_unlock(&send_buffer->mutex);
|
||||
return err;
|
||||
}
|
||||
|
@ -214,6 +220,9 @@ static void *takion_send_buffer_thread_func(void *user)
|
|||
|
||||
static void takion_send_buffer_resend(ChiakiTakionSendBuffer *send_buffer)
|
||||
{
|
||||
if(!send_buffer->takion)
|
||||
return;
|
||||
|
||||
uint64_t now = chiaki_time_now_monotonic_ms();
|
||||
|
||||
for(size_t i=0; i<send_buffer->packets_count; i++)
|
||||
|
@ -229,3 +238,5 @@ static void takion_send_buffer_resend(ChiakiTakionSendBuffer *send_buffer)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue