aboutsummaryrefslogtreecommitdiff
path: root/src/pack.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/pack.h')
-rw-r--r--src/pack.h80
1 files changed, 41 insertions, 39 deletions
diff --git a/src/pack.h b/src/pack.h
index dce0eeb..76b50ad 100644
--- a/src/pack.h
+++ b/src/pack.h
@@ -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);