diff options
author | iphydf <iphydf@users.noreply.github.com> | 2016-12-15 17:35:54 +0000 |
---|---|---|
committer | iphydf <iphydf@users.noreply.github.com> | 2016-12-22 10:53:39 +0000 |
commit | db71602731da030c999f2821b2b4a64611b90b99 (patch) | |
tree | d90d14a7b1a467111d75984137e9ca41fc02abe7 /toxcore/tox_api.c | |
parent | 2328cb74abccd563f0cd8d14d30e5314822d321e (diff) |
Use `tox_options_set_*` instead of direct member access.
Also added a `tox_options_copy` function for cloning an options object.
This can be useful when creating several Tox instances with slightly
varying options.
Diffstat (limited to 'toxcore/tox_api.c')
-rw-r--r-- | toxcore/tox_api.c | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/toxcore/tox_api.c b/toxcore/tox_api.c new file mode 100644 index 00000000..af93bef4 --- /dev/null +++ b/toxcore/tox_api.c | |||
@@ -0,0 +1,102 @@ | |||
1 | #include "tox.h" | ||
2 | |||
3 | #include <stdlib.h> | ||
4 | #include <string.h> | ||
5 | |||
6 | #define SET_ERROR_PARAMETER(param, x) {if(param) {*param = x;}} | ||
7 | |||
8 | |||
9 | #define CONST_FUNCTION(lowercase, uppercase) \ | ||
10 | uint32_t tox_##lowercase(void) \ | ||
11 | { \ | ||
12 | return TOX_##uppercase; \ | ||
13 | } | ||
14 | |||
15 | CONST_FUNCTION(version_major, VERSION_MAJOR) | ||
16 | CONST_FUNCTION(version_minor, VERSION_MINOR) | ||
17 | CONST_FUNCTION(version_patch, VERSION_PATCH) | ||
18 | CONST_FUNCTION(public_key_size, PUBLIC_KEY_SIZE) | ||
19 | CONST_FUNCTION(secret_key_size, SECRET_KEY_SIZE) | ||
20 | CONST_FUNCTION(address_size, ADDRESS_SIZE) | ||
21 | CONST_FUNCTION(max_name_length, MAX_NAME_LENGTH) | ||
22 | CONST_FUNCTION(max_status_message_length, MAX_STATUS_MESSAGE_LENGTH) | ||
23 | CONST_FUNCTION(max_friend_request_length, MAX_FRIEND_REQUEST_LENGTH) | ||
24 | CONST_FUNCTION(max_message_length, MAX_MESSAGE_LENGTH) | ||
25 | CONST_FUNCTION(max_custom_packet_size, MAX_CUSTOM_PACKET_SIZE) | ||
26 | CONST_FUNCTION(hash_length, HASH_LENGTH) | ||
27 | CONST_FUNCTION(file_id_length, FILE_ID_LENGTH) | ||
28 | CONST_FUNCTION(max_filename_length, MAX_FILENAME_LENGTH) | ||
29 | |||
30 | |||
31 | #define ACCESSORS(type, ns, name) \ | ||
32 | type tox_options_get_##ns##name(const struct Tox_Options *options) \ | ||
33 | { \ | ||
34 | return options->ns##name; \ | ||
35 | } \ | ||
36 | void tox_options_set_##ns##name(struct Tox_Options *options, type name) \ | ||
37 | { \ | ||
38 | options->ns##name = name; \ | ||
39 | } | ||
40 | |||
41 | ACCESSORS(bool, , ipv6_enabled) | ||
42 | ACCESSORS(bool, , udp_enabled) | ||
43 | ACCESSORS(TOX_PROXY_TYPE, proxy_ , type) | ||
44 | ACCESSORS(const char *, proxy_ , host) | ||
45 | ACCESSORS(uint16_t, proxy_ , port) | ||
46 | ACCESSORS(uint16_t, , start_port) | ||
47 | ACCESSORS(uint16_t, , end_port) | ||
48 | ACCESSORS(uint16_t, , tcp_port) | ||
49 | ACCESSORS(bool, , hole_punching_enabled) | ||
50 | ACCESSORS(TOX_SAVEDATA_TYPE, savedata_, type) | ||
51 | ACCESSORS(size_t, savedata_, length) | ||
52 | ACCESSORS(tox_log_cb *, log_, callback) | ||
53 | ACCESSORS(void *, log_, user_data) | ||
54 | ACCESSORS(bool, , local_discovery_enabled) | ||
55 | |||
56 | const uint8_t *tox_options_get_savedata_data(const struct Tox_Options *options) | ||
57 | { | ||
58 | return options->savedata_data; | ||
59 | } | ||
60 | |||
61 | void tox_options_set_savedata_data(struct Tox_Options *options, const uint8_t *data, size_t length) | ||
62 | { | ||
63 | options->savedata_data = data; | ||
64 | options->savedata_length = length; | ||
65 | } | ||
66 | |||
67 | void tox_options_default(struct Tox_Options *options) | ||
68 | { | ||
69 | if (options) { | ||
70 | struct Tox_Options default_options = { 0 }; | ||
71 | *options = default_options; | ||
72 | tox_options_set_ipv6_enabled(options, true); | ||
73 | tox_options_set_udp_enabled(options, true); | ||
74 | tox_options_set_proxy_type(options, TOX_PROXY_TYPE_NONE); | ||
75 | tox_options_set_hole_punching_enabled(options, true); | ||
76 | tox_options_set_local_discovery_enabled(options, true); | ||
77 | } | ||
78 | } | ||
79 | |||
80 | struct Tox_Options *tox_options_new(TOX_ERR_OPTIONS_NEW *error) | ||
81 | { | ||
82 | struct Tox_Options *options = (struct Tox_Options *)malloc(sizeof(struct Tox_Options)); | ||
83 | |||
84 | if (options) { | ||
85 | tox_options_default(options); | ||
86 | SET_ERROR_PARAMETER(error, TOX_ERR_OPTIONS_NEW_OK); | ||
87 | return options; | ||
88 | } | ||
89 | |||
90 | SET_ERROR_PARAMETER(error, TOX_ERR_OPTIONS_NEW_MALLOC); | ||
91 | return NULL; | ||
92 | } | ||
93 | |||
94 | void tox_options_copy(struct Tox_Options *lhs, const struct Tox_Options *rhs) | ||
95 | { | ||
96 | *lhs = *rhs; | ||
97 | } | ||
98 | |||
99 | void tox_options_free(struct Tox_Options *options) | ||
100 | { | ||
101 | free(options); | ||
102 | } | ||