From c8697ccc20e12b0f4a2394c10f01ce147eeca269 Mon Sep 17 00:00:00 2001 From: iphydf Date: Mon, 9 Jul 2018 13:40:36 +0000 Subject: Move `load_state` and its helper functions to their own module. --- toxcore/state.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 toxcore/state.h (limited to 'toxcore/state.h') diff --git a/toxcore/state.h b/toxcore/state.h new file mode 100644 index 00000000..3f7ff043 --- /dev/null +++ b/toxcore/state.h @@ -0,0 +1,49 @@ +/** + * The state module is responsible for parsing the Tox save data format and for + * saving state in that format. + * + * This module provides functions for iterating over serialised data sections + * and reading/writing numbers in the correct format (little endian). + * + * Note that unlike the Tox network protocol, the save data stores its values in + * little endian, which is native to most desktop and server architectures in + * 2018. + */ +#ifndef C_TOXCORE_TOXCORE_STATE_H +#define C_TOXCORE_TOXCORE_STATE_H + +#include "logger.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Returned by the state_load_cb to instruct the loader on what to do next. +typedef enum State_Load_Status { + // Continue loading state data sections. + STATE_LOAD_STATUS_CONTINUE, + // An error occurred. Stop loading sections. + STATE_LOAD_STATUS_ERROR, + // We're at the end of the save data, terminate loading successfully. + STATE_LOAD_STATUS_END, +} State_Load_Status; + +typedef State_Load_Status state_load_cb(void *outer, const uint8_t *data, uint32_t len, uint16_t type); + +// state load/save +int state_load(const Logger *log, state_load_cb *state_load_callback, void *outer, + const uint8_t *data, uint32_t length, uint16_t cookie_inner); + +// Utilities for state data serialisation. + +uint16_t lendian_to_host16(uint16_t lendian); +#define host_tolendian16(x) lendian_to_host16(x) + +void host_to_lendian32(uint8_t *dest, uint32_t num); +void lendian_to_host32(uint32_t *dest, const uint8_t *lendian); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // C_TOXCORE_TOXCORE_STATE_H -- cgit v1.2.3