mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-20 05:23:12 -07:00
Add Takion data send function
This commit is contained in:
parent
46aa24d130
commit
44c40e7612
2 changed files with 28 additions and 1 deletions
|
@ -58,9 +58,11 @@ typedef struct chiaki_takion_t
|
||||||
uint32_t seq_num_local;
|
uint32_t seq_num_local;
|
||||||
} ChiakiTakion;
|
} ChiakiTakion;
|
||||||
|
|
||||||
|
|
||||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_connect(ChiakiTakion *takion, ChiakiTakionConnectInfo *info);
|
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_connect(ChiakiTakion *takion, ChiakiTakionConnectInfo *info);
|
||||||
CHIAKI_EXPORT void chiaki_takion_close(ChiakiTakion *takion);
|
CHIAKI_EXPORT void chiaki_takion_close(ChiakiTakion *takion);
|
||||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_raw(ChiakiTakion *takion, uint8_t *buf, size_t buf_size);
|
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_raw(ChiakiTakion *takion, uint8_t *buf, size_t buf_size);
|
||||||
|
CHIAKI_EXPORT ChiakiErrorCode chiaki_send_message_data(ChiakiTakion *takion, uint8_t *buf, size_t buf_size);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@ typedef enum takion_packet_type_t {
|
||||||
#define TAKION_LOCAL_MIN 0x64
|
#define TAKION_LOCAL_MIN 0x64
|
||||||
#define TAKION_LOCAL_MAX 0x64
|
#define TAKION_LOCAL_MAX 0x64
|
||||||
|
|
||||||
|
#define MESSAGE_HEADER_SIZE 0x10
|
||||||
|
|
||||||
typedef struct takion_message_t
|
typedef struct takion_message_t
|
||||||
{
|
{
|
||||||
|
@ -78,6 +79,7 @@ static void *takion_thread_func(void *user);
|
||||||
static void takion_handle_packet(ChiakiTakion *takion, uint8_t *buf, size_t buf_size);
|
static void takion_handle_packet(ChiakiTakion *takion, uint8_t *buf, size_t buf_size);
|
||||||
static void takion_handle_packet_message(ChiakiTakion *takion, uint8_t *buf, size_t buf_size);
|
static void takion_handle_packet_message(ChiakiTakion *takion, uint8_t *buf, size_t buf_size);
|
||||||
static ChiakiErrorCode takion_parse_message(ChiakiTakion *takion, uint8_t *buf, size_t buf_size, TakionMessage *msg);
|
static ChiakiErrorCode takion_parse_message(ChiakiTakion *takion, uint8_t *buf, size_t buf_size, TakionMessage *msg);
|
||||||
|
static void takion_write_message_header(uint8_t *buf, uint32_t tag, uint32_t key_pos, uint8_t type_a, uint8_t type_b, size_t payload_data_size);
|
||||||
static ChiakiErrorCode takion_send_message_init(ChiakiTakion *takion, TakionMessagePayloadInit *payload);
|
static ChiakiErrorCode takion_send_message_init(ChiakiTakion *takion, TakionMessagePayloadInit *payload);
|
||||||
static ChiakiErrorCode takion_send_message_cookie(ChiakiTakion *takion, uint8_t *cookie);
|
static ChiakiErrorCode takion_send_message_cookie(ChiakiTakion *takion, uint8_t *cookie);
|
||||||
static ChiakiErrorCode takion_recv(ChiakiTakion *takion, uint8_t *buf, size_t *buf_size, struct timeval *timeout);
|
static ChiakiErrorCode takion_recv(ChiakiTakion *takion, uint8_t *buf, size_t *buf_size, struct timeval *timeout);
|
||||||
|
@ -249,6 +251,30 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_raw(ChiakiTakion *takion, uint8
|
||||||
return CHIAKI_ERR_SUCCESS;
|
return CHIAKI_ERR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_message_data(ChiakiTakion *takion, uint32_t key_pos, uint8_t type_b, uint16_t channel, uint8_t *buf, size_t buf_size)
|
||||||
|
{
|
||||||
|
// TODO: can we make this more memory-efficient?
|
||||||
|
// TODO: split packet if necessary?
|
||||||
|
|
||||||
|
size_t packet_size = 1 + MESSAGE_HEADER_SIZE + 9 + buf_size;
|
||||||
|
uint8_t *packet_buf = malloc(packet_size);
|
||||||
|
if(!packet_buf)
|
||||||
|
return CHIAKI_ERR_MEMORY;
|
||||||
|
packet_buf[0] = TAKION_PACKET_TYPE_MESSAGE;
|
||||||
|
takion_write_message_header(packet_buf + 1, takion->tag_remote, key_pos, 0, type_b, 9 + buf_size);
|
||||||
|
|
||||||
|
uint8_t *msg_payload = packet_buf + 1 + MESSAGE_HEADER_SIZE;
|
||||||
|
*((uint32_t *)(msg_payload + 0)) = htonl(takion->seq_num_local++);
|
||||||
|
*((uint16_t *)(msg_payload + 4)) = htons(channel);
|
||||||
|
*((uint16_t *)(msg_payload + 6)) = 0;
|
||||||
|
*(msg_payload + 8) = 0;
|
||||||
|
memcpy(msg_payload + 9, buf, buf_size);
|
||||||
|
|
||||||
|
// TODO: instead of just sending and forgetting about it, make sure to receive data ack, resend if necessary, etc.
|
||||||
|
ChiakiErrorCode err = chiaki_takion_send_raw(takion, packet_buf, packet_size);
|
||||||
|
free(packet_buf);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *takion_thread_func(void *user)
|
static void *takion_thread_func(void *user)
|
||||||
|
@ -331,7 +357,6 @@ static void takion_handle_packet(ChiakiTakion *takion, uint8_t *buf, size_t buf_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MESSAGE_HEADER_SIZE 0x10
|
|
||||||
|
|
||||||
static void takion_handle_packet_message(ChiakiTakion *takion, uint8_t *buf, size_t buf_size)
|
static void takion_handle_packet_message(ChiakiTakion *takion, uint8_t *buf, size_t buf_size)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue