diff options
Diffstat (limited to 'toxcore/Messenger.c')
-rw-r--r-- | toxcore/Messenger.c | 140 |
1 files changed, 1 insertions, 139 deletions
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c index 7da77541..be3d82e0 100644 --- a/toxcore/Messenger.c +++ b/toxcore/Messenger.c | |||
@@ -1890,144 +1890,6 @@ void wait_cleanup_messenger(Messenger *m, uint8_t *data, uint16_t len) | |||
1890 | networking_wait_cleanup(m->net, data, len); | 1890 | networking_wait_cleanup(m->net, data, len); |
1891 | } | 1891 | } |
1892 | 1892 | ||
1893 | /* return size of the messenger data (for saving) */ | ||
1894 | uint32_t Messenger_size_old(Messenger *m) | ||
1895 | { | ||
1896 | return crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES | ||
1897 | + sizeof(uint32_t) // nospam. | ||
1898 | + sizeof(uint32_t) // DHT size. | ||
1899 | + DHT_size(m->dht) // DHT itself. | ||
1900 | + sizeof(uint32_t) // Friendlist size. | ||
1901 | + sizeof(Friend) * m->numfriends // Friendlist itself. | ||
1902 | + sizeof(uint16_t) // Own nickname length. | ||
1903 | + m->name_length // Own nickname. | ||
1904 | ; | ||
1905 | } | ||
1906 | |||
1907 | /* Save the messenger in data of size Messenger_size(). Old version without cookies. */ | ||
1908 | static void Messenger_save_old(Messenger *m, uint8_t *data) | ||
1909 | { | ||
1910 | save_keys(m->net_crypto, data); | ||
1911 | data += crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES; | ||
1912 | |||
1913 | uint32_t nospam = get_nospam(&(m->fr)); | ||
1914 | memcpy(data, &nospam, sizeof(nospam)); | ||
1915 | data += sizeof(nospam); | ||
1916 | |||
1917 | uint32_t size = DHT_size(m->dht); | ||
1918 | memcpy(data, &size, sizeof(size)); | ||
1919 | data += sizeof(size); | ||
1920 | DHT_save(m->dht, data); | ||
1921 | data += size; | ||
1922 | |||
1923 | size = sizeof(Friend) * m->numfriends; | ||
1924 | memcpy(data, &size, sizeof(size)); | ||
1925 | data += sizeof(size); | ||
1926 | memcpy(data, m->friendlist, sizeof(Friend) * m->numfriends); | ||
1927 | data += size; | ||
1928 | |||
1929 | uint16_t small_size = m->name_length; | ||
1930 | memcpy(data, &small_size, sizeof(small_size)); | ||
1931 | data += sizeof(small_size); | ||
1932 | memcpy(data, m->name, small_size); | ||
1933 | } | ||
1934 | |||
1935 | /* Load the messenger from data of size length. Old version without cookies. */ | ||
1936 | static int Messenger_load_old(Messenger *m, uint8_t *data, uint32_t length) | ||
1937 | { | ||
1938 | if (length == ~((uint32_t)0)) | ||
1939 | return -1; | ||
1940 | |||
1941 | /* BLOCK1: PUBKEY, SECKEY, NOSPAM, SIZE */ | ||
1942 | if (length < crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES + sizeof(uint32_t) * 2) | ||
1943 | return -1; | ||
1944 | |||
1945 | load_keys(m->net_crypto, data); | ||
1946 | data += crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES; | ||
1947 | length -= crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES; | ||
1948 | |||
1949 | uint32_t nospam; | ||
1950 | memcpy(&nospam, data, sizeof(nospam)); | ||
1951 | set_nospam(&(m->fr), nospam); | ||
1952 | data += sizeof(nospam); | ||
1953 | length -= sizeof(nospam); | ||
1954 | |||
1955 | uint32_t size; | ||
1956 | |||
1957 | if (length < sizeof(size)) | ||
1958 | return -1; | ||
1959 | |||
1960 | memcpy(&size, data, sizeof(size)); | ||
1961 | data += sizeof(size); | ||
1962 | length -= sizeof(size); | ||
1963 | |||
1964 | if (length < size) | ||
1965 | return -1; | ||
1966 | |||
1967 | if (DHT_load_old(m->dht, data, size) == -1) { | ||
1968 | #ifdef DEBUG | ||
1969 | fprintf(stderr, "Data file: Something wicked happened to the stored connections...\n"); | ||
1970 | /* DO go on, friends/name still might be intact */ | ||
1971 | #endif | ||
1972 | } | ||
1973 | |||
1974 | data += size; | ||
1975 | length -= size; | ||
1976 | |||
1977 | if (length < sizeof(size)) | ||
1978 | return -1; | ||
1979 | |||
1980 | memcpy(&size, data, sizeof(size)); | ||
1981 | data += sizeof(size); | ||
1982 | length -= sizeof(size); | ||
1983 | |||
1984 | if (length < size) | ||
1985 | return -1; | ||
1986 | |||
1987 | if (!(size % sizeof(Friend))) { | ||
1988 | uint16_t num = size / sizeof(Friend); | ||
1989 | Friend *friend_list = (Friend *)data; | ||
1990 | |||
1991 | uint32_t i; | ||
1992 | |||
1993 | for (i = 0; i < num; ++i) { | ||
1994 | if (friend_list[i].status >= 3) { | ||
1995 | int fnum = m_addfriend_norequest(m, friend_list[i].client_id); | ||
1996 | setfriendname(m, fnum, friend_list[i].name, friend_list[i].name_length); | ||
1997 | /* set_friend_statusmessage(fnum, temp[i].statusmessage, temp[i].statusmessage_length); */ | ||
1998 | } else if (friend_list[i].status != 0) { | ||
1999 | /* TODO: This is not a good way to do this. */ | ||
2000 | uint8_t address[FRIEND_ADDRESS_SIZE]; | ||
2001 | id_copy(address, friend_list[i].client_id); | ||
2002 | memcpy(address + crypto_box_PUBLICKEYBYTES, &(friend_list[i].friendrequest_nospam), sizeof(uint32_t)); | ||
2003 | uint16_t checksum = address_checksum(address, FRIEND_ADDRESS_SIZE - sizeof(checksum)); | ||
2004 | memcpy(address + crypto_box_PUBLICKEYBYTES + sizeof(uint32_t), &checksum, sizeof(checksum)); | ||
2005 | m_addfriend(m, address, friend_list[i].info, friend_list[i].info_size); | ||
2006 | } | ||
2007 | } | ||
2008 | } | ||
2009 | |||
2010 | data += size; | ||
2011 | length -= size; | ||
2012 | |||
2013 | uint16_t small_size; | ||
2014 | |||
2015 | if (length < sizeof(small_size)) | ||
2016 | return -1; | ||
2017 | |||
2018 | memcpy(&small_size, data, sizeof(small_size)); | ||
2019 | data += sizeof(small_size); | ||
2020 | length -= sizeof(small_size); | ||
2021 | |||
2022 | if (length < small_size) | ||
2023 | return -1; | ||
2024 | |||
2025 | setname(m, data, small_size); | ||
2026 | |||
2027 | return 0; | ||
2028 | } | ||
2029 | |||
2030 | |||
2031 | /* new messenger format for load/save, more robust and forward compatible */ | 1893 | /* new messenger format for load/save, more robust and forward compatible */ |
2032 | 1894 | ||
2033 | #define MESSENGER_STATE_COOKIE_GLOBAL 0x15ed1b1e | 1895 | #define MESSENGER_STATE_COOKIE_GLOBAL 0x15ed1b1e |
@@ -2176,7 +2038,7 @@ int messenger_load(Messenger *m, uint8_t *data, uint32_t length) | |||
2176 | return load_state(messenger_load_state_callback, m, data + cookie_len, | 2038 | return load_state(messenger_load_state_callback, m, data + cookie_len, |
2177 | length - cookie_len, MESSENGER_STATE_COOKIE_TYPE); | 2039 | length - cookie_len, MESSENGER_STATE_COOKIE_TYPE); |
2178 | else /* old state file */ | 2040 | else /* old state file */ |
2179 | return Messenger_load_old(m, data, length); | 2041 | return -1; |
2180 | } | 2042 | } |
2181 | 2043 | ||
2182 | /* Return the number of friends in the instance m. | 2044 | /* Return the number of friends in the instance m. |