summaryrefslogtreecommitdiff
path: root/toxcore/Messenger.c
diff options
context:
space:
mode:
authorzugz (tox) <mbays+tox@sdf.org>2018-09-25 21:37:21 +0200
committerzugz (tox) <mbays+tox@sdf.org>2018-10-11 00:21:39 +0200
commit4dd86f1f29886772cf19d12acbd8cd7b35fb1d07 (patch)
treed7e909b448a7b24c45b6b3a5b32405473fd59ec2 /toxcore/Messenger.c
parent605dfe882c52bfad4dee9678a69e4b816d93431d (diff)
ensure save data unchanged after save and load
Diffstat (limited to 'toxcore/Messenger.c')
-rw-r--r--toxcore/Messenger.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c
index 594fc79a..e092a9f2 100644
--- a/toxcore/Messenger.c
+++ b/toxcore/Messenger.c
@@ -2593,12 +2593,12 @@ void do_messenger(Messenger *m, void *userdata)
2593 if (!m->has_added_relays) { 2593 if (!m->has_added_relays) {
2594 m->has_added_relays = true; 2594 m->has_added_relays = true;
2595 2595
2596 int i; 2596 for (uint16_t i = 0; i < m->num_loaded_relays; ++i) {
2597
2598 for (i = 0; i < NUM_SAVED_TCP_RELAYS; ++i) {
2599 add_tcp_relay(m->net_crypto, m->loaded_relays[i].ip_port, m->loaded_relays[i].public_key); 2597 add_tcp_relay(m->net_crypto, m->loaded_relays[i].ip_port, m->loaded_relays[i].public_key);
2600 } 2598 }
2601 2599
2600 m->num_loaded_relays = 0;
2601
2602 if (m->tcp_server) { 2602 if (m->tcp_server) {
2603 /* Add self tcp server. */ 2603 /* Add self tcp server. */
2604 IP_Port local_ip_port; 2604 IP_Port local_ip_port;
@@ -3035,6 +3035,7 @@ static uint8_t *friends_list_save(const Messenger *m, uint8_t *data)
3035 temp.info_size = net_htons(m->friendlist[i].info_size); 3035 temp.info_size = net_htons(m->friendlist[i].info_size);
3036 temp.friendrequest_nospam = m->friendlist[i].friendrequest_nospam; 3036 temp.friendrequest_nospam = m->friendlist[i].friendrequest_nospam;
3037 } else { 3037 } else {
3038 temp.status = 3;
3038 memcpy(temp.name, m->friendlist[i].name, m->friendlist[i].name_length); 3039 memcpy(temp.name, m->friendlist[i].name, m->friendlist[i].name_length);
3039 temp.name_length = net_htons(m->friendlist[i].name_length); 3040 temp.name_length = net_htons(m->friendlist[i].name_length);
3040 memcpy(temp.statusmessage, m->friendlist[i].statusmessage, m->friendlist[i].statusmessage_length); 3041 memcpy(temp.statusmessage, m->friendlist[i].statusmessage, m->friendlist[i].statusmessage_length);
@@ -3193,7 +3194,13 @@ static uint8_t *save_tcp_relays(const Messenger *m, uint8_t *data)
3193 Node_format relays[NUM_SAVED_TCP_RELAYS]; 3194 Node_format relays[NUM_SAVED_TCP_RELAYS];
3194 uint8_t *temp_data = data; 3195 uint8_t *temp_data = data;
3195 data = state_write_section_header(temp_data, MESSENGER_STATE_COOKIE_TYPE, 0, MESSENGER_STATE_TYPE_TCP_RELAY); 3196 data = state_write_section_header(temp_data, MESSENGER_STATE_COOKIE_TYPE, 0, MESSENGER_STATE_TYPE_TCP_RELAY);
3196 unsigned int num = copy_connected_tcp_relays(m->net_crypto, relays, NUM_SAVED_TCP_RELAYS); 3197 uint32_t num = copy_connected_tcp_relays(m->net_crypto, relays, NUM_SAVED_TCP_RELAYS);
3198
3199 if (m->num_loaded_relays > 0) {
3200 memcpy(relays, m->loaded_relays, sizeof(Node_format) * m->num_loaded_relays);
3201 num = min_u32(num + m->num_loaded_relays, NUM_SAVED_TCP_RELAYS);
3202 }
3203
3197 int l = pack_nodes(data, NUM_SAVED_TCP_RELAYS * packed_node_size(net_family_tcp_ipv6), relays, num); 3204 int l = pack_nodes(data, NUM_SAVED_TCP_RELAYS * packed_node_size(net_family_tcp_ipv6), relays, num);
3198 3205
3199 if (l > 0) { 3206 if (l > 0) {
@@ -3208,7 +3215,7 @@ static uint8_t *save_tcp_relays(const Messenger *m, uint8_t *data)
3208static State_Load_Status load_tcp_relays(Messenger *m, const uint8_t *data, uint32_t length) 3215static State_Load_Status load_tcp_relays(Messenger *m, const uint8_t *data, uint32_t length)
3209{ 3216{
3210 if (length != 0) { 3217 if (length != 0) {
3211 unpack_nodes(m->loaded_relays, NUM_SAVED_TCP_RELAYS, nullptr, data, length, 1); 3218 m->num_loaded_relays = unpack_nodes(m->loaded_relays, NUM_SAVED_TCP_RELAYS, nullptr, data, length, 1);
3212 m->has_added_relays = false; 3219 m->has_added_relays = false;
3213 } 3220 }
3214 3221