diff options
-rw-r--r-- | auto_tests/conference_test.c | 6 | ||||
-rw-r--r-- | auto_tests/encryptsave_test.c | 10 | ||||
-rw-r--r-- | auto_tests/helpers.h | 51 | ||||
-rw-r--r-- | auto_tests/messenger_test.c | 2 | ||||
-rw-r--r-- | auto_tests/tox_many_tcp_test.c | 8 | ||||
-rw-r--r-- | auto_tests/tox_many_test.c | 4 | ||||
-rw-r--r-- | auto_tests/tox_one_test.c | 9 | ||||
-rw-r--r-- | auto_tests/tox_test.c | 9 | ||||
-rw-r--r-- | auto_tests/toxav_basic_test.c | 28 | ||||
-rw-r--r-- | auto_tests/toxav_many_test.c | 32 | ||||
-rw-r--r-- | testing/Messenger_test.c | 2 | ||||
-rw-r--r-- | toxcore/Messenger.c | 15 | ||||
-rw-r--r-- | toxcore/Messenger.h | 5 | ||||
-rw-r--r-- | toxcore/tox.api.h | 109 | ||||
-rw-r--r-- | toxcore/tox.c | 23 | ||||
-rw-r--r-- | toxcore/tox.h | 134 |
16 files changed, 248 insertions, 199 deletions
diff --git a/auto_tests/conference_test.c b/auto_tests/conference_test.c index fba64bcc..aa2f8e13 100644 --- a/auto_tests/conference_test.c +++ b/auto_tests/conference_test.c | |||
@@ -7,7 +7,6 @@ | |||
7 | 7 | ||
8 | #include <check.h> | 8 | #include <check.h> |
9 | #include <inttypes.h> | 9 | #include <inttypes.h> |
10 | #include <stdio.h> | ||
11 | #include <stdlib.h> | 10 | #include <stdlib.h> |
12 | #include <time.h> | 11 | #include <time.h> |
13 | 12 | ||
@@ -91,13 +90,16 @@ group_test_restart: | |||
91 | ; | 90 | ; |
92 | 91 | ||
93 | Tox *toxes[NUM_GROUP_TOX]; | 92 | Tox *toxes[NUM_GROUP_TOX]; |
93 | uint32_t tox_index[NUM_GROUP_TOX]; | ||
94 | unsigned int i, j, k; | 94 | unsigned int i, j, k; |
95 | uint32_t to_comp = 234212; | 95 | uint32_t to_comp = 234212; |
96 | int test_run = 0; | 96 | int test_run = 0; |
97 | long long unsigned int cur_time = time(NULL); | 97 | long long unsigned int cur_time = time(NULL); |
98 | 98 | ||
99 | for (i = 0; i < NUM_GROUP_TOX; ++i) { | 99 | for (i = 0; i < NUM_GROUP_TOX; ++i) { |
100 | toxes[i] = tox_new(0, 0); | 100 | tox_index[i] = i + 1; |
101 | toxes[i] = tox_new_log(0, 0, &tox_index[i]); | ||
102 | |||
101 | ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i); | 103 | ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i); |
102 | tox_callback_friend_request(toxes[i], &g_accept_friend_request); | 104 | tox_callback_friend_request(toxes[i], &g_accept_friend_request); |
103 | tox_callback_conference_invite(toxes[i], &print_group_invite_callback); | 105 | tox_callback_conference_invite(toxes[i], &print_group_invite_callback); |
diff --git a/auto_tests/encryptsave_test.c b/auto_tests/encryptsave_test.c index 2a2827da..fcdef3e6 100644 --- a/auto_tests/encryptsave_test.c +++ b/auto_tests/encryptsave_test.c | |||
@@ -56,8 +56,8 @@ END_TEST | |||
56 | 56 | ||
57 | START_TEST(test_save_friend) | 57 | START_TEST(test_save_friend) |
58 | { | 58 | { |
59 | Tox *tox1 = tox_new(0, 0); | 59 | Tox *tox1 = tox_new_log(0, 0, 0); |
60 | Tox *tox2 = tox_new(0, 0); | 60 | Tox *tox2 = tox_new_log(0, 0, 0); |
61 | ck_assert_msg(tox1 || tox2, "Failed to create 2 tox instances"); | 61 | ck_assert_msg(tox1 || tox2, "Failed to create 2 tox instances"); |
62 | tox_callback_friend_request(tox2, accept_friend_request); | 62 | tox_callback_friend_request(tox2, accept_friend_request); |
63 | uint8_t address[TOX_ADDRESS_SIZE]; | 63 | uint8_t address[TOX_ADDRESS_SIZE]; |
@@ -82,7 +82,7 @@ START_TEST(test_save_friend) | |||
82 | options.savedata_length = size2; | 82 | options.savedata_length = size2; |
83 | 83 | ||
84 | TOX_ERR_NEW err2; | 84 | TOX_ERR_NEW err2; |
85 | Tox *tox3 = tox_new(&options, &err2); | 85 | Tox *tox3 = tox_new_log(&options, &err2, 0); |
86 | ck_assert_msg(err2 == TOX_ERR_NEW_LOAD_ENCRYPTED, "wrong error! %u. should fail with %u", err2, | 86 | ck_assert_msg(err2 == TOX_ERR_NEW_LOAD_ENCRYPTED, "wrong error! %u. should fail with %u", err2, |
87 | TOX_ERR_NEW_LOAD_ENCRYPTED); | 87 | TOX_ERR_NEW_LOAD_ENCRYPTED); |
88 | ck_assert_msg(tox3 == NULL, "tox_new with error should return NULL"); | 88 | ck_assert_msg(tox3 == NULL, "tox_new with error should return NULL"); |
@@ -92,7 +92,7 @@ START_TEST(test_save_friend) | |||
92 | ck_assert_msg(ret, "failed to decrypt save: %u", err3); | 92 | ck_assert_msg(ret, "failed to decrypt save: %u", err3); |
93 | options.savedata_data = dec_data; | 93 | options.savedata_data = dec_data; |
94 | options.savedata_length = size; | 94 | options.savedata_length = size; |
95 | tox3 = tox_new(&options, &err2); | 95 | tox3 = tox_new_log(&options, &err2, 0); |
96 | ck_assert_msg(err2 == TOX_ERR_NEW_OK, "failed to load from decrypted data: %u", err2); | 96 | ck_assert_msg(err2 == TOX_ERR_NEW_OK, "failed to load from decrypted data: %u", err2); |
97 | uint8_t address2[TOX_PUBLIC_KEY_SIZE]; | 97 | uint8_t address2[TOX_PUBLIC_KEY_SIZE]; |
98 | ret = tox_friend_get_public_key(tox3, 0, address2, 0); | 98 | ret = tox_friend_get_public_key(tox3, 0, address2, 0); |
@@ -122,7 +122,7 @@ START_TEST(test_save_friend) | |||
122 | // to remove the manual check now that it's there) | 122 | // to remove the manual check now that it's there) |
123 | options.savedata_data = out1; | 123 | options.savedata_data = out1; |
124 | options.savedata_length = size; | 124 | options.savedata_length = size; |
125 | Tox *tox4 = tox_new(&options, &err2); | 125 | Tox *tox4 = tox_new_log(&options, &err2, 0); |
126 | ck_assert_msg(err2 == TOX_ERR_NEW_OK, "failed to new the third"); | 126 | ck_assert_msg(err2 == TOX_ERR_NEW_OK, "failed to new the third"); |
127 | uint8_t address5[TOX_PUBLIC_KEY_SIZE]; | 127 | uint8_t address5[TOX_PUBLIC_KEY_SIZE]; |
128 | ret = tox_friend_get_public_key(tox4, 0, address5, 0); | 128 | ret = tox_friend_get_public_key(tox4, 0, address5, 0); |
diff --git a/auto_tests/helpers.h b/auto_tests/helpers.h index 9e8043db..99930e90 100644 --- a/auto_tests/helpers.h +++ b/auto_tests/helpers.h | |||
@@ -1,7 +1,10 @@ | |||
1 | #ifndef TOXCORE_TEST_HELPERS_H | 1 | #ifndef TOXCORE_TEST_HELPERS_H |
2 | #define TOXCORE_TEST_HELPERS_H | 2 | #define TOXCORE_TEST_HELPERS_H |
3 | 3 | ||
4 | #include "../toxcore/tox.h" | ||
5 | |||
4 | #include <check.h> | 6 | #include <check.h> |
7 | #include <stdio.h> | ||
5 | 8 | ||
6 | #define DEFTESTCASE(NAME) \ | 9 | #define DEFTESTCASE(NAME) \ |
7 | TCase *tc_##NAME = tcase_create(#NAME); \ | 10 | TCase *tc_##NAME = tcase_create(#NAME); \ |
@@ -12,4 +15,52 @@ | |||
12 | DEFTESTCASE(NAME) \ | 15 | DEFTESTCASE(NAME) \ |
13 | tcase_set_timeout(tc_##NAME, TIMEOUT); | 16 | tcase_set_timeout(tc_##NAME, TIMEOUT); |
14 | 17 | ||
18 | static const char *tox_log_level_name(TOX_LOG_LEVEL level) | ||
19 | { | ||
20 | switch (level) { | ||
21 | case TOX_LOG_LEVEL_TRACE: | ||
22 | return "TRACE"; | ||
23 | |||
24 | case TOX_LOG_LEVEL_DEBUG: | ||
25 | return "DEBUG"; | ||
26 | |||
27 | case TOX_LOG_LEVEL_INFO: | ||
28 | return "INFO"; | ||
29 | |||
30 | case TOX_LOG_LEVEL_WARNING: | ||
31 | return "WARNING"; | ||
32 | |||
33 | case TOX_LOG_LEVEL_ERROR: | ||
34 | return "ERROR"; | ||
35 | } | ||
36 | } | ||
37 | |||
38 | static void print_debug_log(Tox *m, TOX_LOG_LEVEL level, const char *path, uint32_t line, const char *func, | ||
39 | const char *message, void *user_data) | ||
40 | { | ||
41 | if (level == TOX_LOG_LEVEL_TRACE) { | ||
42 | return; | ||
43 | } | ||
44 | |||
45 | uint32_t index = user_data ? *(uint32_t *)user_data : 0; | ||
46 | const char *file = strrchr(path, '/'); | ||
47 | file = file ? file + 1 : path; | ||
48 | printf("[#%d] %s %s:%d\t%s:\t%s\n", index, tox_log_level_name(level), file, line, func, message); | ||
49 | } | ||
50 | |||
51 | Tox *tox_new_log(struct Tox_Options *options, TOX_ERR_NEW *err, void *log_user_data) | ||
52 | { | ||
53 | struct Tox_Options *my_options = tox_options_new(NULL); | ||
54 | |||
55 | if (options != NULL) { | ||
56 | *my_options = *options; | ||
57 | } | ||
58 | |||
59 | tox_options_set_log_callback(my_options, &print_debug_log); | ||
60 | tox_options_set_log_user_data(my_options, log_user_data); | ||
61 | Tox *tox = tox_new(my_options, err); | ||
62 | tox_options_free(my_options); | ||
63 | return tox; | ||
64 | } | ||
65 | |||
15 | #endif // TOXCORE_TEST_HELPERS_H | 66 | #endif // TOXCORE_TEST_HELPERS_H |
diff --git a/auto_tests/messenger_test.c b/auto_tests/messenger_test.c index 5d0be284..eed52a31 100644 --- a/auto_tests/messenger_test.c +++ b/auto_tests/messenger_test.c | |||
@@ -342,7 +342,7 @@ int main(int argc, char *argv[]) | |||
342 | /* IPv6 status from global define */ | 342 | /* IPv6 status from global define */ |
343 | Messenger_Options options = {0}; | 343 | Messenger_Options options = {0}; |
344 | options.ipv6enabled = TOX_ENABLE_IPV6_DEFAULT; | 344 | options.ipv6enabled = TOX_ENABLE_IPV6_DEFAULT; |
345 | m = new_messenger(NULL, &options, 0); | 345 | m = new_messenger(&options, 0); |
346 | 346 | ||
347 | /* setup a default friend and friendnum */ | 347 | /* setup a default friend and friendnum */ |
348 | if (m_addfriend_norequest(m, (uint8_t *)friend_id) < 0) { | 348 | if (m_addfriend_norequest(m, (uint8_t *)friend_id) < 0) { |
diff --git a/auto_tests/tox_many_tcp_test.c b/auto_tests/tox_many_tcp_test.c index 59d69c49..f802bf57 100644 --- a/auto_tests/tox_many_tcp_test.c +++ b/auto_tests/tox_many_tcp_test.c | |||
@@ -50,6 +50,7 @@ START_TEST(test_many_clients_tcp) | |||
50 | { | 50 | { |
51 | long long unsigned int cur_time = time(NULL); | 51 | long long unsigned int cur_time = time(NULL); |
52 | Tox *toxes[NUM_TOXES_TCP]; | 52 | Tox *toxes[NUM_TOXES_TCP]; |
53 | uint32_t index[NUM_TOXES_TCP]; | ||
53 | uint32_t i, j; | 54 | uint32_t i, j; |
54 | uint32_t to_comp = 974536; | 55 | uint32_t to_comp = 974536; |
55 | 56 | ||
@@ -63,7 +64,8 @@ START_TEST(test_many_clients_tcp) | |||
63 | opts.udp_enabled = 0; | 64 | opts.udp_enabled = 0; |
64 | } | 65 | } |
65 | 66 | ||
66 | toxes[i] = tox_new(&opts, 0); | 67 | index[i] = i + 1; |
68 | toxes[i] = tox_new_log(&opts, 0, &index[i]); | ||
67 | ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i); | 69 | ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i); |
68 | tox_callback_friend_request(toxes[i], accept_friend_request); | 70 | tox_callback_friend_request(toxes[i], accept_friend_request); |
69 | uint8_t dpk[TOX_PUBLIC_KEY_SIZE]; | 71 | uint8_t dpk[TOX_PUBLIC_KEY_SIZE]; |
@@ -149,6 +151,7 @@ START_TEST(test_many_clients_tcp_b) | |||
149 | { | 151 | { |
150 | long long unsigned int cur_time = time(NULL); | 152 | long long unsigned int cur_time = time(NULL); |
151 | Tox *toxes[NUM_TOXES_TCP]; | 153 | Tox *toxes[NUM_TOXES_TCP]; |
154 | uint32_t index[NUM_TOXES_TCP]; | ||
152 | uint32_t i, j; | 155 | uint32_t i, j; |
153 | uint32_t to_comp = 974536; | 156 | uint32_t to_comp = 974536; |
154 | 157 | ||
@@ -162,7 +165,8 @@ START_TEST(test_many_clients_tcp_b) | |||
162 | opts.udp_enabled = 0; | 165 | opts.udp_enabled = 0; |
163 | } | 166 | } |
164 | 167 | ||
165 | toxes[i] = tox_new(&opts, 0); | 168 | index[i] = i + 1; |
169 | toxes[i] = tox_new_log(&opts, 0, &index[i]); | ||
166 | ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i); | 170 | ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i); |
167 | tox_callback_friend_request(toxes[i], accept_friend_request); | 171 | tox_callback_friend_request(toxes[i], accept_friend_request); |
168 | uint8_t dpk[TOX_PUBLIC_KEY_SIZE]; | 172 | uint8_t dpk[TOX_PUBLIC_KEY_SIZE]; |
diff --git a/auto_tests/tox_many_test.c b/auto_tests/tox_many_test.c index fa657580..0c4c8c7d 100644 --- a/auto_tests/tox_many_test.c +++ b/auto_tests/tox_many_test.c | |||
@@ -42,11 +42,13 @@ START_TEST(test_many_clients) | |||
42 | { | 42 | { |
43 | long long unsigned int cur_time = time(NULL); | 43 | long long unsigned int cur_time = time(NULL); |
44 | Tox *toxes[NUM_TOXES]; | 44 | Tox *toxes[NUM_TOXES]; |
45 | uint32_t index[NUM_TOXES]; | ||
45 | uint32_t i, j; | 46 | uint32_t i, j; |
46 | uint32_t to_comp = 974536; | 47 | uint32_t to_comp = 974536; |
47 | 48 | ||
48 | for (i = 0; i < NUM_TOXES; ++i) { | 49 | for (i = 0; i < NUM_TOXES; ++i) { |
49 | toxes[i] = tox_new(0, 0); | 50 | index[i] = i + 1; |
51 | toxes[i] = tox_new_log(0, 0, &index[i]); | ||
50 | ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i); | 52 | ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i); |
51 | tox_callback_friend_request(toxes[i], accept_friend_request); | 53 | tox_callback_friend_request(toxes[i], accept_friend_request); |
52 | } | 54 | } |
diff --git a/auto_tests/tox_one_test.c b/auto_tests/tox_one_test.c index 1248de19..871aa443 100644 --- a/auto_tests/tox_one_test.c +++ b/auto_tests/tox_one_test.c | |||
@@ -26,8 +26,9 @@ START_TEST(test_one) | |||
26 | tox_options_free(o1); | 26 | tox_options_free(o1); |
27 | } | 27 | } |
28 | 28 | ||
29 | Tox *tox1 = tox_new(0, 0); | 29 | uint32_t index[] = { 1, 2 }; |
30 | Tox *tox2 = tox_new(0, 0); | 30 | Tox *tox1 = tox_new_log(0, 0, &index[0]); |
31 | Tox *tox2 = tox_new_log(0, 0, &index[1]); | ||
31 | 32 | ||
32 | { | 33 | { |
33 | TOX_ERR_GET_PORT error; | 34 | TOX_ERR_GET_PORT error; |
@@ -85,7 +86,7 @@ START_TEST(test_one) | |||
85 | options.savedata_type = TOX_SAVEDATA_TYPE_TOX_SAVE; | 86 | options.savedata_type = TOX_SAVEDATA_TYPE_TOX_SAVE; |
86 | options.savedata_data = data; | 87 | options.savedata_data = data; |
87 | options.savedata_length = save_size; | 88 | options.savedata_length = save_size; |
88 | tox2 = tox_new(&options, &err_n); | 89 | tox2 = tox_new_log(&options, &err_n, &index[1]); |
89 | ck_assert_msg(err_n == TOX_ERR_NEW_OK, "Load failed"); | 90 | ck_assert_msg(err_n == TOX_ERR_NEW_OK, "Load failed"); |
90 | 91 | ||
91 | ck_assert_msg(tox_self_get_name_size(tox2) == sizeof name, "Wrong name size."); | 92 | ck_assert_msg(tox_self_get_name_size(tox2) == sizeof name, "Wrong name size."); |
@@ -105,7 +106,7 @@ START_TEST(test_one) | |||
105 | options.savedata_type = TOX_SAVEDATA_TYPE_SECRET_KEY; | 106 | options.savedata_type = TOX_SAVEDATA_TYPE_SECRET_KEY; |
106 | options.savedata_data = sk; | 107 | options.savedata_data = sk; |
107 | options.savedata_length = sizeof(sk); | 108 | options.savedata_length = sizeof(sk); |
108 | tox2 = tox_new(&options, &err_n); | 109 | tox2 = tox_new_log(&options, &err_n, &index[1]); |
109 | ck_assert_msg(err_n == TOX_ERR_NEW_OK, "Load failed"); | 110 | ck_assert_msg(err_n == TOX_ERR_NEW_OK, "Load failed"); |
110 | uint8_t address3[TOX_ADDRESS_SIZE]; | 111 | uint8_t address3[TOX_ADDRESS_SIZE]; |
111 | tox_self_get_address(tox2, address3); | 112 | tox_self_get_address(tox2, address3); |
diff --git a/auto_tests/tox_test.c b/auto_tests/tox_test.c index 1bcb8d5e..2faa8cad 100644 --- a/auto_tests/tox_test.c +++ b/auto_tests/tox_test.c | |||
@@ -321,13 +321,14 @@ static void tox_connection_status(Tox *tox, TOX_CONNECTION connection_status, vo | |||
321 | 321 | ||
322 | START_TEST(test_few_clients) | 322 | START_TEST(test_few_clients) |
323 | { | 323 | { |
324 | uint32_t index[] = { 1, 2, 3 }; | ||
324 | long long unsigned int con_time = 0, cur_time = time(NULL); | 325 | long long unsigned int con_time = 0, cur_time = time(NULL); |
325 | TOX_ERR_NEW t_n_error; | 326 | TOX_ERR_NEW t_n_error; |
326 | Tox *tox1 = tox_new(0, &t_n_error); | 327 | Tox *tox1 = tox_new_log(0, &t_n_error, &index[0]); |
327 | ck_assert_msg(t_n_error == TOX_ERR_NEW_OK, "wrong error"); | 328 | ck_assert_msg(t_n_error == TOX_ERR_NEW_OK, "wrong error"); |
328 | Tox *tox2 = tox_new(0, &t_n_error); | 329 | Tox *tox2 = tox_new_log(0, &t_n_error, &index[1]); |
329 | ck_assert_msg(t_n_error == TOX_ERR_NEW_OK, "wrong error"); | 330 | ck_assert_msg(t_n_error == TOX_ERR_NEW_OK, "wrong error"); |
330 | Tox *tox3 = tox_new(0, &t_n_error); | 331 | Tox *tox3 = tox_new_log(0, &t_n_error, &index[2]); |
331 | ck_assert_msg(t_n_error == TOX_ERR_NEW_OK, "wrong error"); | 332 | ck_assert_msg(t_n_error == TOX_ERR_NEW_OK, "wrong error"); |
332 | 333 | ||
333 | ck_assert_msg(tox1 && tox2 && tox3, "Failed to create 3 tox instances"); | 334 | ck_assert_msg(tox1 && tox2 && tox3, "Failed to create 3 tox instances"); |
@@ -422,7 +423,7 @@ START_TEST(test_few_clients) | |||
422 | options.savedata_type = TOX_SAVEDATA_TYPE_TOX_SAVE; | 423 | options.savedata_type = TOX_SAVEDATA_TYPE_TOX_SAVE; |
423 | options.savedata_data = save1; | 424 | options.savedata_data = save1; |
424 | options.savedata_length = save_size1; | 425 | options.savedata_length = save_size1; |
425 | tox2 = tox_new(&options, NULL); | 426 | tox2 = tox_new_log(&options, NULL, &index[1]); |
426 | cur_time = time(NULL); | 427 | cur_time = time(NULL); |
427 | off = 1; | 428 | off = 1; |
428 | 429 | ||
diff --git a/auto_tests/toxav_basic_test.c b/auto_tests/toxav_basic_test.c index 860ad402..b5028da4 100644 --- a/auto_tests/toxav_basic_test.c +++ b/auto_tests/toxav_basic_test.c | |||
@@ -2,15 +2,7 @@ | |||
2 | #include "config.h" | 2 | #include "config.h" |
3 | #endif | 3 | #endif |
4 | 4 | ||
5 | #ifndef HAVE_LIBCHECK | 5 | #include "helpers.h" |
6 | # include <assert.h> | ||
7 | |||
8 | # define ck_assert(X) assert(X); | ||
9 | # define START_TEST(NAME) static void NAME (void) | ||
10 | # define END_TEST | ||
11 | #else | ||
12 | # include "helpers.h" | ||
13 | #endif | ||
14 | 6 | ||
15 | #include <stdint.h> | 7 | #include <stdint.h> |
16 | #include <stdio.h> | 8 | #include <stdio.h> |
@@ -149,19 +141,20 @@ START_TEST(test_AV_flows) | |||
149 | { | 141 | { |
150 | Tox *Alice, *Bob, *bootstrap; | 142 | Tox *Alice, *Bob, *bootstrap; |
151 | ToxAV *AliceAV, *BobAV; | 143 | ToxAV *AliceAV, *BobAV; |
144 | uint32_t index[] = { 1, 2, 3 }; | ||
152 | 145 | ||
153 | CallControl AliceCC, BobCC; | 146 | CallControl AliceCC, BobCC; |
154 | 147 | ||
155 | { | 148 | { |
156 | TOX_ERR_NEW error; | 149 | TOX_ERR_NEW error; |
157 | 150 | ||
158 | bootstrap = tox_new(NULL, &error); | 151 | bootstrap = tox_new_log(NULL, &error, &index[0]); |
159 | ck_assert(error == TOX_ERR_NEW_OK); | 152 | ck_assert(error == TOX_ERR_NEW_OK); |
160 | 153 | ||
161 | Alice = tox_new(NULL, &error); | 154 | Alice = tox_new_log(NULL, &error, &index[1]); |
162 | ck_assert(error == TOX_ERR_NEW_OK); | 155 | ck_assert(error == TOX_ERR_NEW_OK); |
163 | 156 | ||
164 | Bob = tox_new(NULL, &error); | 157 | Bob = tox_new_log(NULL, &error, &index[2]); |
165 | ck_assert(error == TOX_ERR_NEW_OK); | 158 | ck_assert(error == TOX_ERR_NEW_OK); |
166 | } | 159 | } |
167 | 160 | ||
@@ -591,16 +584,6 @@ START_TEST(test_AV_flows) | |||
591 | } | 584 | } |
592 | END_TEST | 585 | END_TEST |
593 | 586 | ||
594 | #ifndef HAVE_LIBCHECK | ||
595 | int main(int argc, char *argv[]) | ||
596 | { | ||
597 | (void) argc; | ||
598 | (void) argv; | ||
599 | |||
600 | test_AV_flows(); | ||
601 | return 0; | ||
602 | } | ||
603 | #else | ||
604 | static Suite *tox_suite(void) | 587 | static Suite *tox_suite(void) |
605 | { | 588 | { |
606 | Suite *s = suite_create("ToxAV"); | 589 | Suite *s = suite_create("ToxAV"); |
@@ -625,4 +608,3 @@ int main(int argc, char *argv[]) | |||
625 | 608 | ||
626 | return number_failed; | 609 | return number_failed; |
627 | } | 610 | } |
628 | #endif | ||
diff --git a/auto_tests/toxav_many_test.c b/auto_tests/toxav_many_test.c index 6f864f07..a351129a 100644 --- a/auto_tests/toxav_many_test.c +++ b/auto_tests/toxav_many_test.c | |||
@@ -2,15 +2,7 @@ | |||
2 | #include "config.h" | 2 | #include "config.h" |
3 | #endif | 3 | #endif |
4 | 4 | ||
5 | #ifndef HAVE_LIBCHECK | 5 | #include "helpers.h" |
6 | # include <assert.h> | ||
7 | |||
8 | # define ck_assert(X) assert(X); | ||
9 | # define START_TEST(NAME) static void NAME (void) | ||
10 | # define END_TEST | ||
11 | #else | ||
12 | # include "helpers.h" | ||
13 | #endif | ||
14 | 6 | ||
15 | #include <stdint.h> | 7 | #include <stdint.h> |
16 | #include <stdio.h> | 8 | #include <stdio.h> |
@@ -207,6 +199,7 @@ static void *call_thread(void *pd) | |||
207 | 199 | ||
208 | START_TEST(test_AV_three_calls) | 200 | START_TEST(test_AV_three_calls) |
209 | { | 201 | { |
202 | uint32_t index[] = { 1, 2, 3, 4, 5 }; | ||
210 | Tox *Alice, *bootstrap, *Bobs[3]; | 203 | Tox *Alice, *bootstrap, *Bobs[3]; |
211 | ToxAV *AliceAV, *BobsAV[3]; | 204 | ToxAV *AliceAV, *BobsAV[3]; |
212 | 205 | ||
@@ -215,19 +208,19 @@ START_TEST(test_AV_three_calls) | |||
215 | { | 208 | { |
216 | TOX_ERR_NEW error; | 209 | TOX_ERR_NEW error; |
217 | 210 | ||
218 | bootstrap = tox_new(NULL, &error); | 211 | bootstrap = tox_new_log(NULL, &error, &index[0]); |
219 | ck_assert(error == TOX_ERR_NEW_OK); | 212 | ck_assert(error == TOX_ERR_NEW_OK); |
220 | 213 | ||
221 | Alice = tox_new(NULL, &error); | 214 | Alice = tox_new_log(NULL, &error, &index[1]); |
222 | ck_assert(error == TOX_ERR_NEW_OK); | 215 | ck_assert(error == TOX_ERR_NEW_OK); |
223 | 216 | ||
224 | Bobs[0] = tox_new(NULL, &error); | 217 | Bobs[0] = tox_new_log(NULL, &error, &index[2]); |
225 | ck_assert(error == TOX_ERR_NEW_OK); | 218 | ck_assert(error == TOX_ERR_NEW_OK); |
226 | 219 | ||
227 | Bobs[1] = tox_new(NULL, &error); | 220 | Bobs[1] = tox_new_log(NULL, &error, &index[3]); |
228 | ck_assert(error == TOX_ERR_NEW_OK); | 221 | ck_assert(error == TOX_ERR_NEW_OK); |
229 | 222 | ||
230 | Bobs[2] = tox_new(NULL, &error); | 223 | Bobs[2] = tox_new_log(NULL, &error, &index[4]); |
231 | ck_assert(error == TOX_ERR_NEW_OK); | 224 | ck_assert(error == TOX_ERR_NEW_OK); |
232 | } | 225 | } |
233 | 226 | ||
@@ -341,16 +334,6 @@ START_TEST(test_AV_three_calls) | |||
341 | END_TEST | 334 | END_TEST |
342 | 335 | ||
343 | 336 | ||
344 | #ifndef HAVE_LIBCHECK | ||
345 | int main(int argc, char *argv[]) | ||
346 | { | ||
347 | (void) argc; | ||
348 | (void) argv; | ||
349 | |||
350 | test_AV_three_calls(); | ||
351 | return 0; | ||
352 | } | ||
353 | #else | ||
354 | static Suite *tox_suite(void) | 337 | static Suite *tox_suite(void) |
355 | { | 338 | { |
356 | Suite *s = suite_create("ToxAV"); | 339 | Suite *s = suite_create("ToxAV"); |
@@ -380,4 +363,3 @@ int main(int argc, char *argv[]) | |||
380 | 363 | ||
381 | return number_failed; | 364 | return number_failed; |
382 | } | 365 | } |
383 | #endif | ||
diff --git a/testing/Messenger_test.c b/testing/Messenger_test.c index 9f56c903..4fd81649 100644 --- a/testing/Messenger_test.c +++ b/testing/Messenger_test.c | |||
@@ -115,7 +115,7 @@ int main(int argc, char *argv[]) | |||
115 | 115 | ||
116 | Messenger_Options options = {0}; | 116 | Messenger_Options options = {0}; |
117 | options.ipv6enabled = ipv6enabled; | 117 | options.ipv6enabled = ipv6enabled; |
118 | m = new_messenger(NULL, &options, 0); | 118 | m = new_messenger(&options, 0); |
119 | 119 | ||
120 | if (!m) { | 120 | if (!m) { |
121 | fputs("Failed to allocate messenger datastructure\n", stderr); | 121 | fputs("Failed to allocate messenger datastructure\n", stderr); |
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c index 0a3c52ee..b147e698 100644 --- a/toxcore/Messenger.c +++ b/toxcore/Messenger.c | |||
@@ -1885,7 +1885,7 @@ static int friend_already_added(const uint8_t *real_pk, void *data) | |||
1885 | } | 1885 | } |
1886 | 1886 | ||
1887 | /* Run this at startup. */ | 1887 | /* Run this at startup. */ |
1888 | Messenger *new_messenger(Logger *log, Messenger_Options *options, unsigned int *error) | 1888 | Messenger *new_messenger(Messenger_Options *options, unsigned int *error) |
1889 | { | 1889 | { |
1890 | Messenger *m = (Messenger *)calloc(1, sizeof(Messenger)); | 1890 | Messenger *m = (Messenger *)calloc(1, sizeof(Messenger)); |
1891 | 1891 | ||
@@ -1893,10 +1893,20 @@ Messenger *new_messenger(Logger *log, Messenger_Options *options, unsigned int * | |||
1893 | *error = MESSENGER_ERROR_OTHER; | 1893 | *error = MESSENGER_ERROR_OTHER; |
1894 | } | 1894 | } |
1895 | 1895 | ||
1896 | if (! m) { | 1896 | if (!m) { |
1897 | return NULL; | 1897 | return NULL; |
1898 | } | 1898 | } |
1899 | 1899 | ||
1900 | Logger *log = NULL; | ||
1901 | |||
1902 | if (options && options->log_callback) { | ||
1903 | log = logger_new(); | ||
1904 | |||
1905 | if (log != NULL) { | ||
1906 | logger_callback_log(log, options->log_callback, m, options->log_user_data); | ||
1907 | } | ||
1908 | } | ||
1909 | |||
1900 | m->log = log; | 1910 | m->log = log; |
1901 | 1911 | ||
1902 | unsigned int net_err = 0; | 1912 | unsigned int net_err = 0; |
@@ -2012,6 +2022,7 @@ void kill_messenger(Messenger *m) | |||
2012 | clear_receipts(m, i); | 2022 | clear_receipts(m, i); |
2013 | } | 2023 | } |
2014 | 2024 | ||
2025 | logger_kill(m->log); | ||
2015 | free(m->friendlist); | 2026 | free(m->friendlist); |
2016 | free(m); | 2027 | free(m); |
2017 | } | 2028 | } |
diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h index 4bcd618f..23bd0009 100644 --- a/toxcore/Messenger.h +++ b/toxcore/Messenger.h | |||
@@ -76,6 +76,9 @@ typedef struct { | |||
76 | TCP_Proxy_Info proxy_info; | 76 | TCP_Proxy_Info proxy_info; |
77 | uint16_t port_range[2]; | 77 | uint16_t port_range[2]; |
78 | uint16_t tcp_server_port; | 78 | uint16_t tcp_server_port; |
79 | |||
80 | logger_cb *log_callback; | ||
81 | void *log_user_data; | ||
79 | } Messenger_Options; | 82 | } Messenger_Options; |
80 | 83 | ||
81 | 84 | ||
@@ -727,7 +730,7 @@ enum { | |||
727 | * | 730 | * |
728 | * if error is not NULL it will be set to one of the values in the enum above. | 731 | * if error is not NULL it will be set to one of the values in the enum above. |
729 | */ | 732 | */ |
730 | Messenger *new_messenger(Logger *log, Messenger_Options *options, unsigned int *error); | 733 | Messenger *new_messenger(Messenger_Options *options, unsigned int *error); |
731 | 734 | ||
732 | /* Run this before closing shop | 735 | /* Run this before closing shop |
733 | * Free all datastructures. | 736 | * Free all datastructures. |
diff --git a/toxcore/tox.api.h b/toxcore/tox.api.h index 0a651c11..fd908a49 100644 --- a/toxcore/tox.api.h +++ b/toxcore/tox.api.h | |||
@@ -376,6 +376,52 @@ enum class SAVEDATA_TYPE { | |||
376 | } | 376 | } |
377 | 377 | ||
378 | 378 | ||
379 | /** | ||
380 | * Severity level of log messages. | ||
381 | */ | ||
382 | enum class LOG_LEVEL { | ||
383 | /** | ||
384 | * Very detailed traces including all network activity. | ||
385 | */ | ||
386 | TRACE, | ||
387 | /** | ||
388 | * Debug messages such as which port we bind to. | ||
389 | */ | ||
390 | DEBUG, | ||
391 | /** | ||
392 | * Informational log messages such as video call status changes. | ||
393 | */ | ||
394 | INFO, | ||
395 | /** | ||
396 | * Warnings about internal inconsistency or logic errors. | ||
397 | */ | ||
398 | WARNING, | ||
399 | /** | ||
400 | * Severe unexpected errors caused by external or internal inconsistency. | ||
401 | */ | ||
402 | ERROR, | ||
403 | } | ||
404 | |||
405 | /** | ||
406 | * This event is triggered when the toxcore library logs an internal message. | ||
407 | * This is mostly useful for debugging. This callback can be called from any | ||
408 | * function, not just $iterate. This means the user data lifetime must at | ||
409 | * least extend between registering and unregistering it or $kill. | ||
410 | * | ||
411 | * Other toxcore modules such as toxav may concurrently call this callback at | ||
412 | * any time. Thus, user code must make sure it is equipped to handle concurrent | ||
413 | * execution, e.g. by employing appropriate mutex locking. | ||
414 | * | ||
415 | * @param level The severity of the log message. | ||
416 | * @param file The source file from which the message originated. | ||
417 | * @param line The source line from which the message originated. | ||
418 | * @param func The function from which the message originated. | ||
419 | * @param message The log message. | ||
420 | * @param user_data The user data pointer passed to $new in options. | ||
421 | */ | ||
422 | typedef void log_cb(LOG_LEVEL level, string file, uint32_t line, string func, string message, any user_data); | ||
423 | |||
424 | |||
379 | static class options { | 425 | static class options { |
380 | /** | 426 | /** |
381 | * This struct contains all the startup options for Tox. You can either | 427 | * This struct contains all the startup options for Tox. You can either |
@@ -491,6 +537,18 @@ static class options { | |||
491 | */ | 537 | */ |
492 | size_t length; | 538 | size_t length; |
493 | } | 539 | } |
540 | |||
541 | namespace log { | ||
542 | /** | ||
543 | * Logging callback for the new tox instance. | ||
544 | */ | ||
545 | log_cb *callback; | ||
546 | |||
547 | /** | ||
548 | * User data pointer passed to the logging callback. | ||
549 | */ | ||
550 | any user_data; | ||
551 | } | ||
494 | } | 552 | } |
495 | 553 | ||
496 | 554 | ||
@@ -620,57 +678,6 @@ static this new(const options_t *options) { | |||
620 | void kill(); | 678 | void kill(); |
621 | 679 | ||
622 | 680 | ||
623 | /** | ||
624 | * Severity level of log messages. | ||
625 | */ | ||
626 | enum class LOG_LEVEL { | ||
627 | /** | ||
628 | * Very detailed traces including all network activity. | ||
629 | */ | ||
630 | TRACE, | ||
631 | /** | ||
632 | * Debug messages such as which port we bind to. | ||
633 | */ | ||
634 | DEBUG, | ||
635 | /** | ||
636 | * Informational log messages such as video call status changes. | ||
637 | */ | ||
638 | INFO, | ||
639 | /** | ||
640 | * Warnings about internal inconsistency or logic errors. | ||
641 | */ | ||
642 | WARNING, | ||
643 | /** | ||
644 | * Severe unexpected errors caused by external or internal inconsistency. | ||
645 | */ | ||
646 | ERROR, | ||
647 | } | ||
648 | |||
649 | /** | ||
650 | * This event is triggered when the toxcore library logs an internal message. | ||
651 | * This is mostly useful for debugging. This callback can be called from any | ||
652 | * function, not just $iterate. This means the user data lifetime must at | ||
653 | * least extend between registering and unregistering it or $kill. | ||
654 | * | ||
655 | * Other toxcore modules such as toxav may concurrently call this callback at | ||
656 | * any time. Thus, user code must make sure it is equipped to handle concurrent | ||
657 | * execution, e.g. by employing appropriate mutex locking. The callback | ||
658 | * registration function must not be called during execution of any other Tox | ||
659 | * library function (toxcore or toxav). | ||
660 | */ | ||
661 | event log { | ||
662 | /** | ||
663 | * @param level The severity of the log message. | ||
664 | * @param file The source file from which the message originated. | ||
665 | * @param line The source line from which the message originated. | ||
666 | * @param func The function from which the message originated. | ||
667 | * @param message The log message. | ||
668 | */ | ||
669 | typedef void(LOG_LEVEL level, string file, uint32_t line, string func, | ||
670 | string message); | ||
671 | } | ||
672 | |||
673 | |||
674 | uint8_t[size] savedata { | 681 | uint8_t[size] savedata { |
675 | /** | 682 | /** |
676 | * Calculates the number of bytes required to store the tox instance with | 683 | * Calculates the number of bytes required to store the tox instance with |
diff --git a/toxcore/tox.c b/toxcore/tox.c index 29bbfba0..7898868b 100644 --- a/toxcore/tox.c +++ b/toxcore/tox.c | |||
@@ -133,6 +133,8 @@ ACCESSORS(uint16_t, , end_port) | |||
133 | ACCESSORS(uint16_t, , tcp_port) | 133 | ACCESSORS(uint16_t, , tcp_port) |
134 | ACCESSORS(TOX_SAVEDATA_TYPE, savedata_, type) | 134 | ACCESSORS(TOX_SAVEDATA_TYPE, savedata_, type) |
135 | ACCESSORS(size_t, savedata_, length) | 135 | ACCESSORS(size_t, savedata_, length) |
136 | ACCESSORS(tox_log_cb *, log_, callback) | ||
137 | ACCESSORS(void *, log_, user_data) | ||
136 | 138 | ||
137 | const uint8_t *tox_options_get_savedata_data(const struct Tox_Options *options) | 139 | const uint8_t *tox_options_get_savedata_data(const struct Tox_Options *options) |
138 | { | 140 | { |
@@ -218,6 +220,9 @@ Tox *tox_new(const struct Tox_Options *options, TOX_ERR_NEW *error) | |||
218 | m_options.port_range[1] = options->end_port; | 220 | m_options.port_range[1] = options->end_port; |
219 | m_options.tcp_server_port = options->tcp_port; | 221 | m_options.tcp_server_port = options->tcp_port; |
220 | 222 | ||
223 | m_options.log_callback = (logger_cb *)options->log_callback; | ||
224 | m_options.log_user_data = options->log_user_data; | ||
225 | |||
221 | switch (options->proxy_type) { | 226 | switch (options->proxy_type) { |
222 | case TOX_PROXY_TYPE_HTTP: | 227 | case TOX_PROXY_TYPE_HTTP: |
223 | m_options.proxy_info.proxy_type = TCP_PROXY_HTTP; | 228 | m_options.proxy_info.proxy_type = TCP_PROXY_HTTP; |
@@ -258,19 +263,11 @@ Tox *tox_new(const struct Tox_Options *options, TOX_ERR_NEW *error) | |||
258 | } | 263 | } |
259 | } | 264 | } |
260 | 265 | ||
261 | Logger *log = logger_new(); | ||
262 | |||
263 | if (log == NULL) { | ||
264 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_MALLOC); | ||
265 | return NULL; | ||
266 | } | ||
267 | |||
268 | unsigned int m_error; | 266 | unsigned int m_error; |
269 | Messenger *m = new_messenger(log, &m_options, &m_error); | 267 | Messenger *m = new_messenger(&m_options, &m_error); |
270 | 268 | ||
271 | if (!new_groupchats(m)) { | 269 | if (!new_groupchats(m)) { |
272 | kill_messenger(m); | 270 | kill_messenger(m); |
273 | logger_kill(log); | ||
274 | 271 | ||
275 | if (m_error == MESSENGER_ERROR_PORT) { | 272 | if (m_error == MESSENGER_ERROR_PORT) { |
276 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_PORT_ALLOC); | 273 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_PORT_ALLOC); |
@@ -302,16 +299,8 @@ void tox_kill(Tox *tox) | |||
302 | } | 299 | } |
303 | 300 | ||
304 | Messenger *m = tox; | 301 | Messenger *m = tox; |
305 | Logger *log = m->log; | ||
306 | kill_groupchats((Group_Chats *)m->conferences_object); | 302 | kill_groupchats((Group_Chats *)m->conferences_object); |
307 | kill_messenger(m); | 303 | kill_messenger(m); |
308 | logger_kill(log); | ||
309 | } | ||
310 | |||
311 | void tox_callback_log(Tox *tox, tox_log_cb *callback, void *user_data) | ||
312 | { | ||
313 | Messenger *m = tox; | ||
314 | m_callback_log(m, (logger_cb *)callback, tox, user_data); | ||
315 | } | 304 | } |
316 | 305 | ||
317 | size_t tox_get_savedata_size(const Tox *tox) | 306 | size_t tox_get_savedata_size(const Tox *tox) |
diff --git a/toxcore/tox.h b/toxcore/tox.h index d97d94c7..4c5266fa 100644 --- a/toxcore/tox.h +++ b/toxcore/tox.h | |||
@@ -419,6 +419,60 @@ typedef enum TOX_SAVEDATA_TYPE { | |||
419 | 419 | ||
420 | 420 | ||
421 | /** | 421 | /** |
422 | * Severity level of log messages. | ||
423 | */ | ||
424 | typedef enum TOX_LOG_LEVEL { | ||
425 | |||
426 | /** | ||
427 | * Very detailed traces including all network activity. | ||
428 | */ | ||
429 | TOX_LOG_LEVEL_TRACE, | ||
430 | |||
431 | /** | ||
432 | * Debug messages such as which port we bind to. | ||
433 | */ | ||
434 | TOX_LOG_LEVEL_DEBUG, | ||
435 | |||
436 | /** | ||
437 | * Informational log messages such as video call status changes. | ||
438 | */ | ||
439 | TOX_LOG_LEVEL_INFO, | ||
440 | |||
441 | /** | ||
442 | * Warnings about internal inconsistency or logic errors. | ||
443 | */ | ||
444 | TOX_LOG_LEVEL_WARNING, | ||
445 | |||
446 | /** | ||
447 | * Severe unexpected errors caused by external or internal inconsistency. | ||
448 | */ | ||
449 | TOX_LOG_LEVEL_ERROR, | ||
450 | |||
451 | } TOX_LOG_LEVEL; | ||
452 | |||
453 | |||
454 | /** | ||
455 | * This event is triggered when the toxcore library logs an internal message. | ||
456 | * This is mostly useful for debugging. This callback can be called from any | ||
457 | * function, not just tox_iterate. This means the user data lifetime must at | ||
458 | * least extend between registering and unregistering it or tox_kill. | ||
459 | * | ||
460 | * Other toxcore modules such as toxav may concurrently call this callback at | ||
461 | * any time. Thus, user code must make sure it is equipped to handle concurrent | ||
462 | * execution, e.g. by employing appropriate mutex locking. | ||
463 | * | ||
464 | * @param level The severity of the log message. | ||
465 | * @param file The source file from which the message originated. | ||
466 | * @param line The source line from which the message originated. | ||
467 | * @param func The function from which the message originated. | ||
468 | * @param message The log message. | ||
469 | * @param user_data The user data pointer passed to tox_new in options. | ||
470 | */ | ||
471 | typedef void tox_log_cb(Tox *tox, TOX_LOG_LEVEL level, const char *file, uint32_t line, const char *func, | ||
472 | const char *message, void *user_data); | ||
473 | |||
474 | |||
475 | /** | ||
422 | * This struct contains all the startup options for Tox. You can either | 476 | * This struct contains all the startup options for Tox. You can either |
423 | * allocate this object yourself, and pass it to tox_options_default, or call tox_options_new to get | 477 | * allocate this object yourself, and pass it to tox_options_default, or call tox_options_new to get |
424 | * a new default options object. | 478 | * a new default options object. |
@@ -540,6 +594,18 @@ struct Tox_Options { | |||
540 | */ | 594 | */ |
541 | size_t savedata_length; | 595 | size_t savedata_length; |
542 | 596 | ||
597 | |||
598 | /** | ||
599 | * Logging callback for the new tox instance. | ||
600 | */ | ||
601 | tox_log_cb *log_callback; | ||
602 | |||
603 | |||
604 | /** | ||
605 | * User data pointer passed to the logging callback. | ||
606 | */ | ||
607 | void *log_user_data; | ||
608 | |||
543 | }; | 609 | }; |
544 | 610 | ||
545 | 611 | ||
@@ -587,6 +653,14 @@ size_t tox_options_get_savedata_length(const struct Tox_Options *options); | |||
587 | 653 | ||
588 | void tox_options_set_savedata_length(struct Tox_Options *options, size_t length); | 654 | void tox_options_set_savedata_length(struct Tox_Options *options, size_t length); |
589 | 655 | ||
656 | tox_log_cb *tox_options_get_log_callback(const struct Tox_Options *options); | ||
657 | |||
658 | void tox_options_set_log_callback(struct Tox_Options *options, tox_log_cb *callback); | ||
659 | |||
660 | void *tox_options_get_log_user_data(const struct Tox_Options *options); | ||
661 | |||
662 | void tox_options_set_log_user_data(struct Tox_Options *options, void *user_data); | ||
663 | |||
590 | /** | 664 | /** |
591 | * Initialises a Tox_Options object with the default options. | 665 | * Initialises a Tox_Options object with the default options. |
592 | * | 666 | * |
@@ -735,66 +809,6 @@ Tox *tox_new(const struct Tox_Options *options, TOX_ERR_NEW *error); | |||
735 | void tox_kill(Tox *tox); | 809 | void tox_kill(Tox *tox); |
736 | 810 | ||
737 | /** | 811 | /** |
738 | * Severity level of log messages. | ||
739 | */ | ||
740 | typedef enum TOX_LOG_LEVEL { | ||
741 | |||
742 | /** | ||
743 | * Very detailed traces including all network activity. | ||
744 | */ | ||
745 | TOX_LOG_LEVEL_TRACE, | ||
746 | |||
747 | /** | ||
748 | * Debug messages such as which port we bind to. | ||
749 | */ | ||
750 | TOX_LOG_LEVEL_DEBUG, | ||
751 | |||
752 | /** | ||
753 | * Informational log messages such as video call status changes. | ||
754 | */ | ||
755 | TOX_LOG_LEVEL_INFO, | ||
756 | |||
757 | /** | ||
758 | * Warnings about internal inconsistency or logic errors. | ||
759 | */ | ||
760 | TOX_LOG_LEVEL_WARNING, | ||
761 | |||
762 | /** | ||
763 | * Severe unexpected errors caused by external or internal inconsistency. | ||
764 | */ | ||
765 | TOX_LOG_LEVEL_ERROR, | ||
766 | |||
767 | } TOX_LOG_LEVEL; | ||
768 | |||
769 | |||
770 | /** | ||
771 | * @param level The severity of the log message. | ||
772 | * @param file The source file from which the message originated. | ||
773 | * @param line The source line from which the message originated. | ||
774 | * @param func The function from which the message originated. | ||
775 | * @param message The log message. | ||
776 | */ | ||
777 | typedef void tox_log_cb(Tox *tox, TOX_LOG_LEVEL level, const char *file, uint32_t line, const char *func, | ||
778 | const char *message, void *user_data); | ||
779 | |||
780 | |||
781 | /** | ||
782 | * Set the callback for the `log` event. Pass NULL to unset. | ||
783 | * | ||
784 | * This event is triggered when the toxcore library logs an internal message. | ||
785 | * This is mostly useful for debugging. This callback can be called from any | ||
786 | * function, not just tox_iterate. This means the user data lifetime must at | ||
787 | * least extend between registering and unregistering it or tox_kill. | ||
788 | * | ||
789 | * Other toxcore modules such as toxav may concurrently call this callback at | ||
790 | * any time. Thus, user code must make sure it is equipped to handle concurrent | ||
791 | * execution, e.g. by employing appropriate mutex locking. The callback | ||
792 | * registration function must not be called during execution of any other Tox | ||
793 | * library function (toxcore or toxav). | ||
794 | */ | ||
795 | void tox_callback_log(Tox *tox, tox_log_cb *callback, void *user_data); | ||
796 | |||
797 | /** | ||
798 | * Calculates the number of bytes required to store the tox instance with | 812 | * Calculates the number of bytes required to store the tox instance with |
799 | * tox_get_savedata. This function cannot fail. The result is always greater than 0. | 813 | * tox_get_savedata. This function cannot fail. The result is always greater than 0. |
800 | * | 814 | * |