diff options
-rw-r--r-- | core/Messenger.c | 35 | ||||
-rw-r--r-- | testing/toxic/prompt.c | 19 | ||||
-rw-r--r-- | testing/toxic/windows.c | 2 |
3 files changed, 51 insertions, 5 deletions
diff --git a/core/Messenger.c b/core/Messenger.c index d88fe51a..04e4626a 100644 --- a/core/Messenger.c +++ b/core/Messenger.c | |||
@@ -850,8 +850,15 @@ void doMessenger(Messenger *m) | |||
850 | /* returns the size of the messenger data (for saving) */ | 850 | /* returns the size of the messenger data (for saving) */ |
851 | uint32_t Messenger_size(Messenger *m) | 851 | uint32_t Messenger_size(Messenger *m) |
852 | { | 852 | { |
853 | return crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES + sizeof(uint32_t) | 853 | return crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES |
854 | + sizeof(uint32_t) + DHT_size() + sizeof(uint32_t) + sizeof(Friend) * m->numfriends; | 854 | + sizeof(uint32_t) // nospam |
855 | + sizeof(uint32_t) // DHT size | ||
856 | + DHT_size() // DHT itself | ||
857 | + sizeof(uint32_t) // Friendlist size | ||
858 | + sizeof(Friend) * m->numfriends // Friendlist itself | ||
859 | + sizeof(uint16_t) // Own nickname length | ||
860 | + m->name_length // Own nickname | ||
861 | ; | ||
855 | } | 862 | } |
856 | 863 | ||
857 | /* save the messenger in data of size Messenger_size() */ | 864 | /* save the messenger in data of size Messenger_size() */ |
@@ -871,6 +878,11 @@ void Messenger_save(Messenger *m, uint8_t *data) | |||
871 | memcpy(data, &size, sizeof(size)); | 878 | memcpy(data, &size, sizeof(size)); |
872 | data += sizeof(size); | 879 | data += sizeof(size); |
873 | memcpy(data, m->friendlist, sizeof(Friend) * m->numfriends); | 880 | memcpy(data, m->friendlist, sizeof(Friend) * m->numfriends); |
881 | data += size; | ||
882 | uint16_t small_size = m->name_length; | ||
883 | memcpy(data, &small_size, sizeof(small_size)); | ||
884 | data += sizeof(small_size); | ||
885 | memcpy(data, m->name, small_size); | ||
874 | } | 886 | } |
875 | 887 | ||
876 | /* load the messenger from data of size length. */ | 888 | /* load the messenger from data of size length. */ |
@@ -905,7 +917,7 @@ int Messenger_load(Messenger *m, uint8_t *data, uint32_t length) | |||
905 | memcpy(&size, data, sizeof(size)); | 917 | memcpy(&size, data, sizeof(size)); |
906 | data += sizeof(size); | 918 | data += sizeof(size); |
907 | 919 | ||
908 | if (length != size || length % sizeof(Friend) != 0) | 920 | if (length < size || size % sizeof(Friend) != 0) |
909 | return -1; | 921 | return -1; |
910 | 922 | ||
911 | Friend *temp = malloc(size); | 923 | Friend *temp = malloc(size); |
@@ -931,6 +943,23 @@ int Messenger_load(Messenger *m, uint8_t *data, uint32_t length) | |||
931 | } | 943 | } |
932 | } | 944 | } |
933 | 945 | ||
946 | data += size; | ||
947 | length -= size; | ||
948 | |||
949 | uint16_t small_size; | ||
950 | |||
951 | if (length < sizeof(small_size)) | ||
952 | return -1; | ||
953 | |||
954 | memcpy(&small_size, data, sizeof(small_size)); | ||
955 | data += sizeof(small_size); | ||
956 | length -= sizeof(small_size); | ||
957 | |||
958 | if (length != small_size) | ||
959 | return -1; | ||
960 | |||
961 | setname(m, data, small_size); | ||
962 | |||
934 | free(temp); | 963 | free(temp); |
935 | return 0; | 964 | return 0; |
936 | } | 965 | } |
diff --git a/testing/toxic/prompt.c b/testing/toxic/prompt.c index f6d3e21f..a37fdaaa 100644 --- a/testing/toxic/prompt.c +++ b/testing/toxic/prompt.c | |||
@@ -13,6 +13,9 @@ | |||
13 | #include "windows.h" | 13 | #include "windows.h" |
14 | #include "prompt.h" | 14 | #include "prompt.h" |
15 | 15 | ||
16 | extern char *DATA_FILE; | ||
17 | extern int store_data(Messenger *m, char *path); | ||
18 | |||
16 | uint8_t pending_requests[MAX_STR_SIZE][CLIENT_ID_SIZE]; // XXX | 19 | uint8_t pending_requests[MAX_STR_SIZE][CLIENT_ID_SIZE]; // XXX |
17 | uint8_t num_requests = 0; // XXX | 20 | uint8_t num_requests = 0; // XXX |
18 | 21 | ||
@@ -29,11 +32,12 @@ void cmd_help(ToxWindow *, Messenger *m, char **); | |||
29 | void cmd_msg(ToxWindow *, Messenger *m, char **); | 32 | void cmd_msg(ToxWindow *, Messenger *m, char **); |
30 | void cmd_myid(ToxWindow *, Messenger *m, char **); | 33 | void cmd_myid(ToxWindow *, Messenger *m, char **); |
31 | void cmd_nick(ToxWindow *, Messenger *m, char **); | 34 | void cmd_nick(ToxWindow *, Messenger *m, char **); |
35 | void cmd_mynick(ToxWindow *, Messenger *m, char **); | ||
32 | void cmd_quit(ToxWindow *, Messenger *m, char **); | 36 | void cmd_quit(ToxWindow *, Messenger *m, char **); |
33 | void cmd_status(ToxWindow *, Messenger *m, char **); | 37 | void cmd_status(ToxWindow *, Messenger *m, char **); |
34 | void cmd_statusmsg(ToxWindow *, Messenger *m, char **); | 38 | void cmd_statusmsg(ToxWindow *, Messenger *m, char **); |
35 | 39 | ||
36 | #define NUM_COMMANDS 13 | 40 | #define NUM_COMMANDS 14 |
37 | 41 | ||
38 | static struct { | 42 | static struct { |
39 | char *name; | 43 | char *name; |
@@ -49,6 +53,7 @@ static struct { | |||
49 | { "msg", 2, cmd_msg }, | 53 | { "msg", 2, cmd_msg }, |
50 | { "myid", 0, cmd_myid }, | 54 | { "myid", 0, cmd_myid }, |
51 | { "nick", 1, cmd_nick }, | 55 | { "nick", 1, cmd_nick }, |
56 | { "mynick", 0, cmd_mynick }, | ||
52 | { "q", 0, cmd_quit }, | 57 | { "q", 0, cmd_quit }, |
53 | { "quit", 0, cmd_quit }, | 58 | { "quit", 0, cmd_quit }, |
54 | { "status", 2, cmd_status }, | 59 | { "status", 2, cmd_status }, |
@@ -222,6 +227,7 @@ void cmd_help(ToxWindow *self, Messenger *m, char **args) | |||
222 | wprintw(self->window, " status <type> <message> : Set your status\n"); | 227 | wprintw(self->window, " status <type> <message> : Set your status\n"); |
223 | wprintw(self->window, " statusmsg <message> : Set your status\n"); | 228 | wprintw(self->window, " statusmsg <message> : Set your status\n"); |
224 | wprintw(self->window, " nick <nickname> : Set your nickname\n"); | 229 | wprintw(self->window, " nick <nickname> : Set your nickname\n"); |
230 | wprintw(self->window, " mynick : Print your current nickname\n"); | ||
225 | wprintw(self->window, " accept <number> : Accept friend request\n"); | 231 | wprintw(self->window, " accept <number> : Accept friend request\n"); |
226 | wprintw(self->window, " myid : Print your ID\n"); | 232 | wprintw(self->window, " myid : Print your ID\n"); |
227 | wprintw(self->window, " quit/exit : Exit program\n"); | 233 | wprintw(self->window, " quit/exit : Exit program\n"); |
@@ -267,6 +273,17 @@ void cmd_nick(ToxWindow *self, Messenger *m, char **args) | |||
267 | char *nick = args[1]; | 273 | char *nick = args[1]; |
268 | setname(m, (uint8_t *) nick, strlen(nick) + 1); | 274 | setname(m, (uint8_t *) nick, strlen(nick) + 1); |
269 | wprintw(self->window, "Nickname set to: %s\n", nick); | 275 | wprintw(self->window, "Nickname set to: %s\n", nick); |
276 | if (store_data(m, DATA_FILE)) { | ||
277 | wprintw(self->window, "\nCould not store Messenger data\n"); | ||
278 | } | ||
279 | } | ||
280 | |||
281 | void cmd_mynick(ToxWindow *self, Messenger *m, char **args) | ||
282 | { | ||
283 | uint8_t *nick = malloc(m->name_length); | ||
284 | getself_name(m, nick, m->name_length); | ||
285 | wprintw(self->window, "Current nickname: %s\n", nick); | ||
286 | free(nick); | ||
270 | } | 287 | } |
271 | 288 | ||
272 | void cmd_status(ToxWindow *self, Messenger *m, char **args) | 289 | void cmd_status(ToxWindow *self, Messenger *m, char **args) |
diff --git a/testing/toxic/windows.c b/testing/toxic/windows.c index 183c0f9b..11396e2c 100644 --- a/testing/toxic/windows.c +++ b/testing/toxic/windows.c | |||
@@ -83,7 +83,7 @@ void on_friendadded(Messenger *m, int friendnumber) | |||
83 | { | 83 | { |
84 | friendlist_onFriendAdded(m, friendnumber); | 84 | friendlist_onFriendAdded(m, friendnumber); |
85 | 85 | ||
86 | if (store_data(m, DATA_FILE) != 0) { | 86 | if (store_data(m, DATA_FILE)) { |
87 | wprintw(prompt->window, "\nCould not store Messenger data\n"); | 87 | wprintw(prompt->window, "\nCould not store Messenger data\n"); |
88 | } | 88 | } |
89 | } | 89 | } |