update: recvfile and sendfile callbacks and more ctx function implementations
This commit is contained in:
@ -26,15 +26,26 @@ typedef struct lm_ctx_update_list {
|
||||
size_t index;
|
||||
} lm_ctx_update_list_t;
|
||||
|
||||
typedef enum lm_ctx_sync_state {
|
||||
SYNC_DOWNLOADING_INFO = 0,
|
||||
SYNC_INFO_SUCCESS = 1,
|
||||
SYNC_INFO_FAIL = 2,
|
||||
SYNC_DOWNLOADING_LIST = 3,
|
||||
SYNC_LIST_SUCCESS = 4,
|
||||
SYNC_LIST_FAIL = 5,
|
||||
} lm_ctx_sync_state_t;
|
||||
|
||||
/* ###################
|
||||
## ctx callbacks ##
|
||||
################### */
|
||||
typedef bool (*lm_ctx_database_callback_t)(lm_ctx_t *ctx, lm_pkg_t *pkg, void *data);
|
||||
typedef bool (*lm_ctx_download_callback_t)(lm_ctx_t *ctx, lm_pkg_t *pkg, size_t current, size_t total, void *data);
|
||||
typedef bool (*lm_ctx_download_callback_t)(
|
||||
lm_ctx_t *ctx, lm_pkg_t *pkg, bool is_archive, size_t current, size_t total, void *data);
|
||||
typedef bool (*lm_ctx_install_callback_t)(
|
||||
lm_ctx_t *ctx, lm_pkg_t *pkg, char *file, size_t current, size_t total, void *data);
|
||||
typedef bool (*lm_ctx_sync_callback_t)(
|
||||
lm_ctx_t *ctx, lm_pool_t *pool, bool status, size_t current, size_t total, void *data);
|
||||
lm_ctx_t *ctx, lm_pool_t *pool, lm_ctx_sync_state_t state, size_t current, size_t total, void *data);
|
||||
typedef bool (*lm_ctx_ping_callback_t)(lm_ctx_t *ctx, lm_pool_t *pool, bool status, void *data);
|
||||
typedef lm_ctx_install_callback_t lm_ctx_remove_callback_t;
|
||||
typedef lm_ctx_install_callback_t lm_ctx_check_callback_t;
|
||||
|
||||
@ -63,7 +74,7 @@ lm_pkg_t *lm_ctx_update_next(lm_ctx_t *ctx, lm_ctx_update_list_t *list); // retu
|
||||
void lm_ctx_update_free(lm_ctx_t *ctx, lm_ctx_update_list_t *list); // frees the update list returned by lm_ctx_update
|
||||
|
||||
bool lm_ctx_download(lm_ctx_t *ctx, lm_pkg_t *pkg, lm_ctx_download_callback_t callback,
|
||||
void *data); // downloads a single package if its not already downloaded
|
||||
void *data); // downloads a single package
|
||||
bool lm_ctx_install(
|
||||
lm_ctx_t *ctx, lm_pkg_t *pkg, lm_ctx_install_callback_t callback, void *data); // installs/updates a single package
|
||||
bool lm_ctx_remove(
|
||||
@ -71,21 +82,16 @@ bool lm_ctx_remove(
|
||||
bool lm_ctx_check(
|
||||
lm_ctx_t *ctx, lm_pkg_t *pkg, lm_ctx_check_callback_t callback, void *data); // checks a single package
|
||||
bool lm_ctx_sync(lm_ctx_t *ctx, bool do_update, lm_ctx_sync_callback_t callback, void *data); // syncs all the pools
|
||||
bool lm_ctx_serve(lm_ctx_t *ctx, char *add, uint8_t threads); // serves all the pools
|
||||
void lm_ctx_ping(lm_ctx_t *ctx, lm_ctx_ping_callback_t callback, void *data); // pings all the pools
|
||||
bool lm_ctx_serve(lm_ctx_t *ctx, char *addr, uint8_t threads); // serves all the pools
|
||||
|
||||
/* ####################
|
||||
## pool fucntions ##
|
||||
#################### */
|
||||
lm_pool_t *lm_ctx_pool_add(lm_ctx_t *ctx, char *name, char *url); // add a pool to the ctx pool list
|
||||
bool lm_ctx_pool_del(lm_ctx_t *ctx, char *name); // remove a pool from the ctx pool list
|
||||
void lm_ctx_pool_clear(lm_ctx_t *ctx); // clear all the pools in the ctx pool list
|
||||
bool lm_ctx_pool_serve(
|
||||
lm_ctx_t *ctx, char *addr, uint8_t threads); // serve all the pools on a MPTP server hosted at the given address
|
||||
void lm_ctx_pool_test(lm_ctx_t *ctx); // test (ping) all the pool connetions
|
||||
void lm_ctx_pool_get_info(lm_ctx_t *ctx, bool do_update, lm_ctx_sync_callback_t callback,
|
||||
void *data); // get pool info of all the pools in the ctx list
|
||||
void lm_ctx_pool_get_list(lm_ctx_t *ctx, bool do_update, lm_ctx_sync_callback_t callback,
|
||||
void *data); // get pool list of all the pools in the ctx list
|
||||
lm_pool_t *lm_ctx_pool_add(lm_ctx_t *ctx, char *name, char *url); // add a pool to the ctx pool list
|
||||
bool lm_ctx_pool_del(lm_ctx_t *ctx, char *name); // remove a pool from the ctx pool list
|
||||
void lm_ctx_pool_clear(lm_ctx_t *ctx); // clear all the pools in the ctx pool list
|
||||
lm_pool_t *lm_ctx_pool_by_url(lm_ctx_t *ctx, char *host, char *path); // find pool by URL
|
||||
|
||||
/* ########################
|
||||
## database fucntions ##
|
||||
|
@ -98,6 +98,23 @@ typedef enum lm_error {
|
||||
LM_ERR_InstallDownloadFail = 90,
|
||||
LM_ERR_PkgNotDownloaded = 91,
|
||||
LM_ERR_PkgRemoveDownloadFail = 92,
|
||||
LM_ERR_CtxTempNULL = 93,
|
||||
LM_ERR_CtxRootNULL = 94,
|
||||
LM_ERR_DstOpenFail = 95,
|
||||
LM_ERR_SrcOpenFail = 96,
|
||||
LM_ERR_DstWriteFail = 97,
|
||||
LM_ERR_CtxTempFailMkdir = 98,
|
||||
LM_ERR_PkgBadArchive = 99,
|
||||
LM_ERR_PkgDataNotMatch = 100,
|
||||
LM_ERR_PkgChangesUpdateFail = 101,
|
||||
LM_ERR_PkgHashesOpenFail = 102,
|
||||
LM_ERR_PkgNoPool = 103,
|
||||
LM_ERR_DbChangesUnlinkFail = 104,
|
||||
LM_ERR_SendStatFail = 105,
|
||||
LM_ERR_SendSnprintfFail = 106,
|
||||
LM_ERR_SendReadFail = 107,
|
||||
LM_ERR_RecvBadSize = 108,
|
||||
LM_ERR_RecvNotCompleted = 109,
|
||||
} lm_error_t;
|
||||
|
||||
typedef struct lm_error_desc {
|
||||
|
@ -114,6 +114,8 @@ typedef struct lm_mptp {
|
||||
char data[MPTP_DATA_MAX];
|
||||
} lm_mptp_t;
|
||||
|
||||
typedef bool (*lm_mptp_transfer_callback_t)(char *path, size_t current, size_t total, void *data);
|
||||
|
||||
#define MPTP_FLAGS_VERSION(m) (((m)->header.flags & 0xFF00) >> 8)
|
||||
#define MPTP_FLAGS_TYPE(m) (((m)->header.flags & 0x0080) >> 1)
|
||||
#define MPTP_FLAGS_CODE(m) (((m)->header.flags & 0x0070) >> 4)
|
||||
@ -142,5 +144,5 @@ bool lm_mptp_server_verify(lm_mptp_t *packet);
|
||||
bool lm_mptp_server_recv(int sock, lm_mptp_t *packet, struct sockaddr *addr);
|
||||
bool lm_mptp_server_send(int sock, lm_mptp_t *packet, struct sockaddr *addr);
|
||||
|
||||
bool lm_mptp_sendfile(int sock, struct sockaddr *addr, char *path);
|
||||
bool lm_mptp_recvfile(int sock, char *path);
|
||||
bool lm_mptp_sendfile(int sock, struct sockaddr *addr, char *path, lm_mptp_transfer_callback_t callback, void *data);
|
||||
bool lm_mptp_recvfile(int sock, char *path, lm_mptp_transfer_callback_t callback, void *data);
|
||||
|
@ -21,20 +21,16 @@ void lm_pool_test(lm_pool_t *pool);
|
||||
void lm_pool_free(lm_pool_t *pool);
|
||||
|
||||
lm_pkg_t *lm_pool_package_find(lm_pool_t *pool, char *name, char *version);
|
||||
bool lm_pool_package_download(lm_pool_t *pool, lm_pkg_t *pkg);
|
||||
bool lm_pool_package_add(lm_pool_t *pool, lm_pkg_t *pkg);
|
||||
|
||||
bool lm_pool_path_set_dir(lm_pool_t *pool, char *dir);
|
||||
bool lm_pool_path_is_empty(lm_pool_t *pool);
|
||||
void lm_pool_path_free(lm_pool_t *pool);
|
||||
|
||||
bool lm_pool_info_download(lm_pool_t *pool, lm_mptp_transfer_callback_t callback, void *data);
|
||||
bool lm_pool_info_load(lm_pool_t *pool);
|
||||
bool lm_pool_info_download(lm_pool_t *pool);
|
||||
void lm_pool_info_free(lm_pool_t *pool);
|
||||
|
||||
bool lm_pool_list_download(lm_pool_t *pool, lm_mptp_transfer_callback_t callback, void *data);
|
||||
bool lm_pool_list_load(lm_pool_t *pool);
|
||||
bool lm_pool_list_download(lm_pool_t *pool);
|
||||
void lm_pool_list_free(lm_pool_t *pool);
|
||||
|
||||
void lm_pool_serve(lm_pool_t *pool, lm_mptp_t *packet, int sock, struct sockaddr *addr);
|
||||
void lm_pool_serve_thread(void *arg);
|
||||
|
Reference in New Issue
Block a user