Skip to content

Commit

Permalink
Merge 2bf5288 into c0b4cd1
Browse files Browse the repository at this point in the history
  • Loading branch information
iphydf committed Jul 15, 2018
2 parents c0b4cd1 + 2bf5288 commit b2c339d
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 14 deletions.
5 changes: 3 additions & 2 deletions auto_tests/monolith_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,9 @@ int main(int argc, char *argv[]) {
// toxcore/Messenger
CHECK_SIZE(File_Transfers, 72);
CHECK_SIZE(Friend, 39264);
CHECK_SIZE(Messenger, 2008);
CHECK_SIZE(Messenger_Options, 72);
CHECK_SIZE(Messenger, 2024);
CHECK_SIZE(Messenger_State_Plugin, 32);
CHECK_SIZE(Messenger_Options, 88);
CHECK_SIZE(Receipts, 16);
// toxcore/net_crypto
#ifdef __linux__
Expand Down
29 changes: 19 additions & 10 deletions toxcore/Messenger.c
Original file line number Diff line number Diff line change
Expand Up @@ -2748,15 +2748,6 @@ void do_messenger(Messenger *m, void *userdata)
#define MESSENGER_STATE_COOKIE_GLOBAL 0x15ed1b1f

#define MESSENGER_STATE_COOKIE_TYPE 0x01ce
#define MESSENGER_STATE_TYPE_NOSPAMKEYS 1
#define MESSENGER_STATE_TYPE_DHT 2
#define MESSENGER_STATE_TYPE_FRIENDS 3
#define MESSENGER_STATE_TYPE_NAME 4
#define MESSENGER_STATE_TYPE_STATUSMESSAGE 5
#define MESSENGER_STATE_TYPE_STATUS 6
#define MESSENGER_STATE_TYPE_TCP_RELAY 10
#define MESSENGER_STATE_TYPE_PATH_NODE 11
#define MESSENGER_STATE_TYPE_END 255

#define SAVED_FRIEND_REQUEST_SIZE 1024
#define NUM_SAVED_PATH_NODES 8
Expand Down Expand Up @@ -2973,10 +2964,27 @@ static int friends_list_load(Messenger *m, const uint8_t *data, uint32_t length)
return num;
}

static uint32_t m_state_plugins_size(const Messenger *m)
{
const uint32_t size32 = sizeof(uint32_t);
const uint32_t sizesubhead = size32 * 2;

uint32_t size = 0;

for (const Messenger_State_Plugin *plugin = m->options.state_plugins;
plugin != m->options.state_plugins + m->options.state_plugins_length;
++plugin) {
size += sizesubhead + plugin->size(m);
}

return size;
}

/* return size of the messenger data (for saving) */
uint32_t messenger_size(const Messenger *m)
{
uint32_t size32 = sizeof(uint32_t), sizesubhead = size32 * 2;
const uint32_t size32 = sizeof(uint32_t);
const uint32_t sizesubhead = size32 * 2;
return size32 * 2 // global cookie
+ sizesubhead + sizeof(uint32_t) + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_SECRET_KEY_SIZE
+ sizesubhead + dht_size(m->dht) // DHT
Expand All @@ -2986,6 +2994,7 @@ uint32_t messenger_size(const Messenger *m)
+ sizesubhead + 1 // status
+ sizesubhead + NUM_SAVED_TCP_RELAYS * packed_node_size(net_family_tcp_ipv6) // TCP relays
+ sizesubhead + NUM_SAVED_PATH_NODES * packed_node_size(net_family_tcp_ipv6) // saved path nodes
+ m_state_plugins_size(m)
+ sizesubhead;
}

Expand Down
30 changes: 28 additions & 2 deletions toxcore/Messenger.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,31 @@ typedef enum Message_Type {
#define PACKET_ID_LOSSLESS_RANGE_SIZE 32
#define PACKET_LOSSY_AV_RESERVED 8 // Number of lossy packet types at start of range reserved for A/V.

typedef struct Messenger Messenger;

typedef uint32_t m_state_size_cb(const Messenger *m);
typedef void m_state_save_cb(const Messenger *m, uint8_t *data);
typedef void m_state_load_cb(Messenger *m, const uint8_t *data, uint32_t length);

typedef enum Messenger_State_Type {
MESSENGER_STATE_TYPE_NOSPAMKEYS = 1,
MESSENGER_STATE_TYPE_DHT = 2,
MESSENGER_STATE_TYPE_FRIENDS = 3,
MESSENGER_STATE_TYPE_NAME = 4,
MESSENGER_STATE_TYPE_STATUSMESSAGE = 5,
MESSENGER_STATE_TYPE_STATUS = 6,
MESSENGER_STATE_TYPE_TCP_RELAY = 10,
MESSENGER_STATE_TYPE_PATH_NODE = 11,
MESSENGER_STATE_TYPE_END = 255,
} Messenger_State_Type;

typedef struct Messenger_State_Plugin {
Messenger_State_Type type;
m_state_size_cb *size;
m_state_save_cb *save;
m_state_load_cb *load;
} Messenger_State_Plugin;

typedef struct Messenger_Options {
bool ipv6enabled;
bool udp_disabled;
Expand All @@ -85,6 +110,9 @@ typedef struct Messenger_Options {

logger_cb *log_callback;
void *log_user_data;

const Messenger_State_Plugin *state_plugins;
uint8_t state_plugins_length;
} Messenger_Options;


Expand Down Expand Up @@ -178,8 +206,6 @@ typedef enum Filekind {
} Filekind;


typedef struct Messenger Messenger;

typedef void m_self_connection_status_cb(Messenger *m, unsigned int connection_status, void *user_data);
typedef void m_friend_status_cb(Messenger *m, uint32_t friend_number, unsigned int status, void *user_data);
typedef void m_friend_connection_status_cb(Messenger *m, uint32_t friend_number, unsigned int connection_status,
Expand Down

0 comments on commit b2c339d

Please sign in to comment.