summaryrefslogtreecommitdiff
path: root/toxcore/Messenger.h
diff options
context:
space:
mode:
Diffstat (limited to 'toxcore/Messenger.h')
-rw-r--r--toxcore/Messenger.h44
1 files changed, 42 insertions, 2 deletions
diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h
index d306da45..09f631ff 100644
--- a/toxcore/Messenger.h
+++ b/toxcore/Messenger.h
@@ -29,6 +29,7 @@
29#include "friend_requests.h" 29#include "friend_requests.h"
30#include "logger.h" 30#include "logger.h"
31#include "net_crypto.h" 31#include "net_crypto.h"
32#include "state.h"
32 33
33#define MAX_NAME_LENGTH 128 34#define MAX_NAME_LENGTH 128
34/* TODO(irungentoo): this must depend on other variable. */ 35/* TODO(irungentoo): this must depend on other variable. */
@@ -50,6 +51,36 @@ typedef enum Message_Type {
50 MESSAGE_ACTION 51 MESSAGE_ACTION
51} Message_Type; 52} Message_Type;
52 53
54typedef struct Messenger Messenger;
55
56// Returns the size of the data
57typedef uint32_t m_state_size_cb(const Messenger *m);
58
59// Returns the new pointer to data
60typedef uint8_t *m_state_save_cb(const Messenger *m, uint8_t *data);
61
62// Returns if there were any erros during loading
63typedef State_Load_Status m_state_load_cb(Messenger *m, const uint8_t *data, uint32_t length);
64
65typedef enum Messenger_State_Type {
66 MESSENGER_STATE_TYPE_NOSPAMKEYS = 1,
67 MESSENGER_STATE_TYPE_DHT = 2,
68 MESSENGER_STATE_TYPE_FRIENDS = 3,
69 MESSENGER_STATE_TYPE_NAME = 4,
70 MESSENGER_STATE_TYPE_STATUSMESSAGE = 5,
71 MESSENGER_STATE_TYPE_STATUS = 6,
72 MESSENGER_STATE_TYPE_TCP_RELAY = 10,
73 MESSENGER_STATE_TYPE_PATH_NODE = 11,
74 MESSENGER_STATE_TYPE_END = 255,
75} Messenger_State_Type;
76
77typedef struct Messenger_State_Plugin {
78 Messenger_State_Type type;
79 m_state_size_cb *size;
80 m_state_save_cb *save;
81 m_state_load_cb *load;
82} Messenger_State_Plugin;
83
53typedef struct Messenger_Options { 84typedef struct Messenger_Options {
54 bool ipv6enabled; 85 bool ipv6enabled;
55 bool udp_disabled; 86 bool udp_disabled;
@@ -63,6 +94,9 @@ typedef struct Messenger_Options {
63 logger_cb *log_callback; 94 logger_cb *log_callback;
64 void *log_context; 95 void *log_context;
65 void *log_user_data; 96 void *log_user_data;
97
98 Messenger_State_Plugin *state_plugins;
99 uint8_t state_plugins_length;
66} Messenger_Options; 100} Messenger_Options;
67 101
68 102
@@ -156,8 +190,6 @@ typedef enum Filekind {
156} Filekind; 190} Filekind;
157 191
158 192
159typedef struct Messenger Messenger;
160
161typedef void m_self_connection_status_cb(Messenger *m, unsigned int connection_status, void *user_data); 193typedef void m_self_connection_status_cb(Messenger *m, unsigned int connection_status, void *user_data);
162typedef void m_friend_status_cb(Messenger *m, uint32_t friend_number, unsigned int status, void *user_data); 194typedef void m_friend_status_cb(Messenger *m, uint32_t friend_number, unsigned int status, void *user_data);
163typedef void m_friend_connection_status_cb(Messenger *m, uint32_t friend_number, unsigned int connection_status, 195typedef void m_friend_connection_status_cb(Messenger *m, uint32_t friend_number, unsigned int connection_status,
@@ -758,6 +790,14 @@ uint32_t messenger_run_interval(const Messenger *m);
758 790
759/* SAVING AND LOADING FUNCTIONS: */ 791/* SAVING AND LOADING FUNCTIONS: */
760 792
793/* Registers a state plugin for saving, loadding, and getting the size of a section of the save
794 *
795 * returns true on success
796 * returns false on error
797 */
798bool m_register_state_plugin(Messenger *m, Messenger_State_Type type, m_state_size_cb size_callback,
799 m_state_load_cb load_callback, m_state_save_cb save_callback);
800
761/* return size of the messenger data (for saving). */ 801/* return size of the messenger data (for saving). */
762uint32_t messenger_size(const Messenger *m); 802uint32_t messenger_size(const Messenger *m);
763 803