update: add path section to MPTP packet

This commit is contained in:
ngn
2024-08-09 22:13:43 +03:00
parent f5d8514a27
commit 1404da3c6c
16 changed files with 382 additions and 221 deletions

View File

@ -152,6 +152,7 @@ typedef enum lm_error {
LM_ERR_MPTPListenFail = 150,
LM_ERR_PoolInfoBadName = 151,
LM_ERR_PoolInfoUnknown = 152,
LM_ERR_MPTPBadPath = 153,
} lm_error_t;
typedef struct lm_error_desc {

View File

@ -13,9 +13,12 @@
#####################################
# FLAGS #
#####################################
# HOST SIZE | DATA SIZE #
# HOST SIZE | PATH SIZE #
#####################################
# DATA SIZE #
#####################################
# HOST #
# PATH #
# DATA #
#...................................#
@ -82,7 +85,8 @@
#define MPTP_VERSION_SUPPORTED 0
#define MPTP_CODE_MAX 3
#define MPTP_DATA_MAX UINT8_MAX
#define MPTP_DATA_MAX 4096 // generally this is the page size on x86_64 linux
#define MPTP_PATH_MAX UINT8_MAX
#define MPTP_HOST_MAX UINT8_MAX
#define MPTP_TIMEOUT 10
@ -106,13 +110,13 @@ typedef enum lm_mptp_response {
typedef struct lm_mptp_header {
uint16_t flags;
uint8_t host_size;
uint8_t data_size;
uint8_t path_size;
uint16_t data_size;
} __attribute__((packed)) lm_mptp_header_t;
typedef struct lm_mptp {
lm_mptp_header_t header;
char host[MPTP_DATA_MAX];
char data[MPTP_DATA_MAX];
char *host, *path, *data;
} lm_mptp_t;
typedef bool (*lm_mptp_transfer_callback_t)(char *path, size_t current, size_t total, void *data);
@ -125,17 +129,26 @@ typedef bool (*lm_mptp_transfer_callback_t)(char *path, size_t current, size_t t
#define MPTP_IS_REQUEST(m) (MPTP_FLAGS_TYPE(m) == 0)
#define MPTP_IS_LAST(m) (MPTP_FLAGS_LAST(m) == 1)
bool lm_mptp_init(lm_mptp_t *packet, bool is_request, uint8_t code, bool is_last);
bool lm_mptp_set_data(lm_mptp_t *packet, char *data, size_t size);
bool lm_mptp_set_host(lm_mptp_t *packet, char *host);
bool lm_mptp_get_host(lm_mptp_t *packet, char *host);
bool lm_mptp_get_data(lm_mptp_t *packet, char *data);
void lm_mptp_init(lm_mptp_t *packet);
bool lm_mptp_new(lm_mptp_t *packet, bool is_request, uint8_t code, bool is_last);
void lm_mptp_free(lm_mptp_t *packet);
int lm_mptp_socket(char *addr, uint16_t port, struct sockaddr *saddr);
bool lm_mptp_socket_opts(int sock);
void lm_mptp_copy(lm_mptp_t *dst, lm_mptp_t *src);
bool lm_mptp_verify(lm_mptp_t *packet);
void lm_mptp_close(int sock);
bool lm_mptp_recv(int sock, lm_mptp_t *packet);
void lm_mptp_free(lm_mptp_t *packet);
bool lm_mptp_set_data(lm_mptp_t *packet, char *data, size_t size);
bool lm_mptp_get_data(lm_mptp_t *packet, char *data);
bool lm_mptp_set_host(lm_mptp_t *packet, char *host);
bool lm_mptp_get_host(lm_mptp_t *packet, char *host);
bool lm_mptp_set_path(lm_mptp_t *packet, char *path);
bool lm_mptp_get_path(lm_mptp_t *packet, char *path);
int lm_mptp_client_connect(char *addr, uint16_t port);
bool lm_mptp_client_verify(lm_mptp_t *packet);

View File

@ -30,6 +30,7 @@ bool exists(char *path, struct stat *st);
bool is_empty(char *p);
bool is_dir_empty(char *p);
bool rmrf(char *p);
int digits(int n);
bool package_parse(char *package, char *name, char *version);
bool package_version_valid(char *name);