diff options
author | irungentoo <irungentoo@gmail.com> | 2013-08-20 12:08:55 -0400 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2013-08-20 12:08:55 -0400 |
commit | a1c40d753ee8faf15aa0dd314bd4249aa3750b2e (patch) | |
tree | fb52c5cffcb897afa709e2d4a9882e89e9c90b5d /core/Messenger.c | |
parent | 9f0efe920170472a4f757f7d8dc84f41e794f945 (diff) |
More refactoring done.
Diffstat (limited to 'core/Messenger.c')
-rw-r--r-- | core/Messenger.c | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/core/Messenger.c b/core/Messenger.c index cb3d2551..25a4ff98 100644 --- a/core/Messenger.c +++ b/core/Messenger.c | |||
@@ -108,9 +108,8 @@ static uint16_t address_checksum(uint8_t *address, uint32_t len) | |||
108 | */ | 108 | */ |
109 | void getaddress(Messenger *m, uint8_t *address) | 109 | void getaddress(Messenger *m, uint8_t *address) |
110 | { | 110 | { |
111 | //memcpy(address, m->public_key, crypto_box_PUBLICKEYBYTES); //TODO | 111 | memcpy(address, m->net_crypto->self_public_key, crypto_box_PUBLICKEYBYTES); |
112 | memcpy(address, self_public_key, crypto_box_PUBLICKEYBYTES); | 112 | uint32_t nospam = get_nospam(&(m->fr)); |
113 | uint32_t nospam = get_nospam(); | ||
114 | memcpy(address + crypto_box_PUBLICKEYBYTES, &nospam, sizeof(nospam)); | 113 | memcpy(address + crypto_box_PUBLICKEYBYTES, &nospam, sizeof(nospam)); |
115 | uint16_t checksum = address_checksum(address, FRIEND_ADDRESS_SIZE - sizeof(checksum)); | 114 | uint16_t checksum = address_checksum(address, FRIEND_ADDRESS_SIZE - sizeof(checksum)); |
116 | memcpy(address + crypto_box_PUBLICKEYBYTES + sizeof(nospam), &checksum, sizeof(checksum)); | 115 | memcpy(address + crypto_box_PUBLICKEYBYTES + sizeof(nospam), &checksum, sizeof(checksum)); |
@@ -150,7 +149,7 @@ int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length) | |||
150 | if (length < 1) | 149 | if (length < 1) |
151 | return FAERR_NOMESSAGE; | 150 | return FAERR_NOMESSAGE; |
152 | 151 | ||
153 | if (memcmp(client_id, self_public_key, crypto_box_PUBLICKEYBYTES) == 0) | 152 | if (memcmp(client_id, m->net_crypto->self_public_key, crypto_box_PUBLICKEYBYTES) == 0) |
154 | return FAERR_OWNKEY; | 153 | return FAERR_OWNKEY; |
155 | 154 | ||
156 | int friend_id = getfriend_id(m, client_id); | 155 | int friend_id = getfriend_id(m, client_id); |
@@ -176,7 +175,7 @@ int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length) | |||
176 | 175 | ||
177 | for (i = 0; i <= m->numfriends; ++i) { | 176 | for (i = 0; i <= m->numfriends; ++i) { |
178 | if (m->friendlist[i].status == NOFRIEND) { | 177 | if (m->friendlist[i].status == NOFRIEND) { |
179 | DHT_addfriend(client_id); | 178 | DHT_addfriend(m->dht, client_id); |
180 | m->friendlist[i].status = FRIEND_ADDED; | 179 | m->friendlist[i].status = FRIEND_ADDED; |
181 | m->friendlist[i].crypt_connection_id = -1; | 180 | m->friendlist[i].crypt_connection_id = -1; |
182 | m->friendlist[i].friendrequest_lastsent = 0; | 181 | m->friendlist[i].friendrequest_lastsent = 0; |
@@ -216,7 +215,7 @@ int m_addfriend_norequest(Messenger *m, uint8_t *client_id) | |||
216 | 215 | ||
217 | for (i = 0; i <= m->numfriends; ++i) { | 216 | for (i = 0; i <= m->numfriends; ++i) { |
218 | if (m->friendlist[i].status == NOFRIEND) { | 217 | if (m->friendlist[i].status == NOFRIEND) { |
219 | DHT_addfriend(client_id); | 218 | DHT_addfriend(m->dht, client_id); |
220 | m->friendlist[i].status = FRIEND_CONFIRMED; | 219 | m->friendlist[i].status = FRIEND_CONFIRMED; |
221 | m->friendlist[i].crypt_connection_id = -1; | 220 | m->friendlist[i].crypt_connection_id = -1; |
222 | m->friendlist[i].friendrequest_lastsent = 0; | 221 | m->friendlist[i].friendrequest_lastsent = 0; |
@@ -245,7 +244,7 @@ int m_delfriend(Messenger *m, int friendnumber) | |||
245 | if (friendnumber >= m->numfriends || friendnumber < 0) | 244 | if (friendnumber >= m->numfriends || friendnumber < 0) |
246 | return -1; | 245 | return -1; |
247 | 246 | ||
248 | DHT_delfriend(m->friendlist[friendnumber].client_id); | 247 | DHT_delfriend(m->dht, m->friendlist[friendnumber].client_id); |
249 | crypto_kill(m->net_crypto, m->friendlist[friendnumber].crypt_connection_id); | 248 | crypto_kill(m->net_crypto, m->friendlist[friendnumber].crypt_connection_id); |
250 | free(m->friendlist[friendnumber].statusmessage); | 249 | free(m->friendlist[friendnumber].statusmessage); |
251 | memset(&(m->friendlist[friendnumber]), 0, sizeof(Friend)); | 250 | memset(&(m->friendlist[friendnumber]), 0, sizeof(Friend)); |
@@ -522,7 +521,7 @@ void m_set_sends_receipts(Messenger *m, int friendnumber, int yesno) | |||
522 | /* set the function that will be executed when a friend request is received. */ | 521 | /* set the function that will be executed when a friend request is received. */ |
523 | void m_callback_friendrequest(Messenger *m, void (*function)(uint8_t *, uint8_t *, uint16_t, void *), void *userdata) | 522 | void m_callback_friendrequest(Messenger *m, void (*function)(uint8_t *, uint8_t *, uint16_t, void *), void *userdata) |
524 | { | 523 | { |
525 | callback_friendrequest(function, userdata); | 524 | callback_friendrequest(&(m->fr), function, userdata); |
526 | } | 525 | } |
527 | 526 | ||
528 | /* set the function that will be executed when a message from a friend is received. */ | 527 | /* set the function that will be executed when a message from a friend is received. */ |
@@ -617,7 +616,7 @@ int write_cryptpacket_id(Messenger *m, int friendnumber, uint8_t packet_id, uint | |||
617 | /*Send a LAN discovery packet every LAN_DISCOVERY_INTERVAL seconds*/ | 616 | /*Send a LAN discovery packet every LAN_DISCOVERY_INTERVAL seconds*/ |
618 | int LANdiscovery(timer *t, void *arg) | 617 | int LANdiscovery(timer *t, void *arg) |
619 | { | 618 | { |
620 | send_LANdiscovery(htons(PORT)); | 619 | send_LANdiscovery(htons(PORT), temp_net_crypto); |
621 | timer_start(t, LAN_DISCOVERY_INTERVAL); | 620 | timer_start(t, LAN_DISCOVERY_INTERVAL); |
622 | return 0; | 621 | return 0; |
623 | } | 622 | } |
@@ -637,19 +636,26 @@ Messenger *initMessenger(void) | |||
637 | } | 636 | } |
638 | m->net_crypto = new_net_crypto(m->net); | 637 | m->net_crypto = new_net_crypto(m->net); |
639 | if (m->net_crypto == NULL) { | 638 | if (m->net_crypto == NULL) { |
639 | kill_networking(m->net); | ||
640 | free(m); | ||
641 | return NULL; | ||
642 | } | ||
643 | m->dht = new_DHT(m->net_crypto); | ||
644 | if (m->dht == NULL) { | ||
645 | kill_net_crypto(m->net_crypto); | ||
646 | kill_networking(m->net); | ||
640 | free(m); | 647 | free(m); |
641 | free(m->net); | ||
642 | return NULL; | 648 | return NULL; |
643 | } | 649 | } |
644 | new_keys(m->net_crypto); | 650 | new_keys(m->net_crypto); |
645 | m_set_statusmessage(m, (uint8_t *)"Online", sizeof("Online")); | 651 | m_set_statusmessage(m, (uint8_t *)"Online", sizeof("Online")); |
646 | 652 | ||
647 | DHT_init(); | 653 | friendreq_init(&(m->fr), m->net_crypto); |
648 | friendreq_init(); | 654 | LANdiscovery_init(m->dht); |
649 | LANdiscovery_init(); | 655 | set_nospam(&(m->fr), random_int()); |
650 | set_nospam(random_int()); | 656 | init_cryptopackets(m->dht); |
651 | 657 | ||
652 | send_LANdiscovery(htons(PORT)); | 658 | send_LANdiscovery(htons(PORT), m->net_crypto); |
653 | timer_single(&LANdiscovery, 0, LAN_DISCOVERY_INTERVAL); | 659 | timer_single(&LANdiscovery, 0, LAN_DISCOVERY_INTERVAL); |
654 | 660 | ||
655 | return m; | 661 | return m; |
@@ -661,7 +667,9 @@ void cleanupMessenger(Messenger *m) | |||
661 | /* FIXME TODO ideally cleanupMessenger will mirror initMessenger | 667 | /* FIXME TODO ideally cleanupMessenger will mirror initMessenger |
662 | * this requires the other modules to expose cleanup functions | 668 | * this requires the other modules to expose cleanup functions |
663 | */ | 669 | */ |
670 | kill_DHT(m->dht); | ||
664 | kill_net_crypto(m->net_crypto); | 671 | kill_net_crypto(m->net_crypto); |
672 | kill_networking(m->net); | ||
665 | free(m->friendlist); | 673 | free(m->friendlist); |
666 | free(m); | 674 | free(m); |
667 | } | 675 | } |
@@ -677,7 +685,7 @@ void doFriends(Messenger *m) | |||
677 | 685 | ||
678 | for (i = 0; i < m->numfriends; ++i) { | 686 | for (i = 0; i < m->numfriends; ++i) { |
679 | if (m->friendlist[i].status == FRIEND_ADDED) { | 687 | if (m->friendlist[i].status == FRIEND_ADDED) { |
680 | int fr = send_friendrequest(m->friendlist[i].client_id, m->friendlist[i].friendrequest_nospam, m->friendlist[i].info, | 688 | int fr = send_friendrequest(m->dht, m->friendlist[i].client_id, m->friendlist[i].friendrequest_nospam, m->friendlist[i].info, |
681 | m->friendlist[i].info_size); | 689 | m->friendlist[i].info_size); |
682 | 690 | ||
683 | if (fr >= 0) { | 691 | if (fr >= 0) { |
@@ -699,7 +707,7 @@ void doFriends(Messenger *m) | |||
699 | } | 707 | } |
700 | } | 708 | } |
701 | 709 | ||
702 | IP_Port friendip = DHT_getfriendip(m->friendlist[i].client_id); | 710 | IP_Port friendip = DHT_getfriendip(m->dht, m->friendlist[i].client_id); |
703 | 711 | ||
704 | switch (is_cryptoconnected(m->net_crypto, m->friendlist[i].crypt_connection_id)) { | 712 | switch (is_cryptoconnected(m->net_crypto, m->friendlist[i].crypt_connection_id)) { |
705 | case 0: | 713 | case 0: |
@@ -883,7 +891,7 @@ void doMessenger(Messenger *m) | |||
883 | { | 891 | { |
884 | networking_poll(m->net); | 892 | networking_poll(m->net); |
885 | 893 | ||
886 | doDHT(); | 894 | do_DHT(m->dht); |
887 | do_net_crypto(m->net_crypto); | 895 | do_net_crypto(m->net_crypto); |
888 | doInbound(m); | 896 | doInbound(m); |
889 | doFriends(m); | 897 | doFriends(m); |
@@ -897,7 +905,7 @@ uint32_t Messenger_size(Messenger *m) | |||
897 | return crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES | 905 | return crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES |
898 | + sizeof(uint32_t) // nospam | 906 | + sizeof(uint32_t) // nospam |
899 | + sizeof(uint32_t) // DHT size | 907 | + sizeof(uint32_t) // DHT size |
900 | + DHT_size() // DHT itself | 908 | + DHT_size(m->dht) // DHT itself |
901 | + sizeof(uint32_t) // Friendlist size | 909 | + sizeof(uint32_t) // Friendlist size |
902 | + sizeof(Friend) * m->numfriends // Friendlist itself | 910 | + sizeof(Friend) * m->numfriends // Friendlist itself |
903 | + sizeof(uint16_t) // Own nickname length | 911 | + sizeof(uint16_t) // Own nickname length |
@@ -910,13 +918,13 @@ void Messenger_save(Messenger *m, uint8_t *data) | |||
910 | { | 918 | { |
911 | save_keys(m->net_crypto, data); | 919 | save_keys(m->net_crypto, data); |
912 | data += crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES; | 920 | data += crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES; |
913 | uint32_t nospam = get_nospam(); | 921 | uint32_t nospam = get_nospam(&(m->fr)); |
914 | memcpy(data, &nospam, sizeof(nospam)); | 922 | memcpy(data, &nospam, sizeof(nospam)); |
915 | data += sizeof(nospam); | 923 | data += sizeof(nospam); |
916 | uint32_t size = DHT_size(); | 924 | uint32_t size = DHT_size(m->dht); |
917 | memcpy(data, &size, sizeof(size)); | 925 | memcpy(data, &size, sizeof(size)); |
918 | data += sizeof(size); | 926 | data += sizeof(size); |
919 | DHT_save(data); | 927 | DHT_save(m->dht, data); |
920 | data += size; | 928 | data += size; |
921 | size = sizeof(Friend) * m->numfriends; | 929 | size = sizeof(Friend) * m->numfriends; |
922 | memcpy(data, &size, sizeof(size)); | 930 | memcpy(data, &size, sizeof(size)); |
@@ -943,7 +951,7 @@ int Messenger_load(Messenger *m, uint8_t *data, uint32_t length) | |||
943 | data += crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES; | 951 | data += crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES; |
944 | uint32_t nospam; | 952 | uint32_t nospam; |
945 | memcpy(&nospam, data, sizeof(nospam)); | 953 | memcpy(&nospam, data, sizeof(nospam)); |
946 | set_nospam(nospam); | 954 | set_nospam(&(m->fr), nospam); |
947 | data += sizeof(nospam); | 955 | data += sizeof(nospam); |
948 | uint32_t size; | 956 | uint32_t size; |
949 | memcpy(&size, data, sizeof(size)); | 957 | memcpy(&size, data, sizeof(size)); |
@@ -954,7 +962,7 @@ int Messenger_load(Messenger *m, uint8_t *data, uint32_t length) | |||
954 | 962 | ||
955 | length -= size; | 963 | length -= size; |
956 | 964 | ||
957 | if (DHT_load(data, size) == -1) | 965 | if (DHT_load(m->dht, data, size) == -1) |
958 | return -1; | 966 | return -1; |
959 | 967 | ||
960 | data += size; | 968 | data += size; |