diff options
author | mannol <eniz_vukovic@hotmail.com> | 2015-06-05 22:14:37 +0200 |
---|---|---|
committer | mannol <eniz_vukovic@hotmail.com> | 2015-06-05 22:14:37 +0200 |
commit | d694839d60011900c20b2d947560e2edccd0d8a9 (patch) | |
tree | a1f4b10c1465ffcdf05c440f0403601dad0404c7 /toxcore/tox.c | |
parent | 3100042a2b78f4f80d23f67e6113797cd8fb5df0 (diff) | |
parent | 6d883f488ff59b2394982b62895d50b1d1d55bf4 (diff) |
Rebased on master and removed alpha channel (again)
Diffstat (limited to 'toxcore/tox.c')
-rw-r--r-- | toxcore/tox.c | 61 |
1 files changed, 42 insertions, 19 deletions
diff --git a/toxcore/tox.c b/toxcore/tox.c index de615768..3e9db766 100644 --- a/toxcore/tox.c +++ b/toxcore/tox.c | |||
@@ -121,33 +121,46 @@ void tox_options_free(struct Tox_Options *options) | |||
121 | free(options); | 121 | free(options); |
122 | } | 122 | } |
123 | 123 | ||
124 | Tox *tox_new(const struct Tox_Options *options, const uint8_t *data, size_t length, TOX_ERR_NEW *error) | 124 | Tox *tox_new(const struct Tox_Options *options, TOX_ERR_NEW *error) |
125 | { | 125 | { |
126 | if (!logger_get_global()) | 126 | if (!logger_get_global()) |
127 | logger_set_global(logger_new(LOGGER_OUTPUT_FILE, LOGGER_LEVEL, "toxcore")); | 127 | logger_set_global(logger_new(LOGGER_OUTPUT_FILE, LOGGER_LEVEL, "toxcore")); |
128 | 128 | ||
129 | if (data == NULL && length != 0) { | ||
130 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_NULL); | ||
131 | return NULL; | ||
132 | } | ||
133 | |||
134 | if (data && length) { | ||
135 | if (length < TOX_ENC_SAVE_MAGIC_LENGTH) { | ||
136 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_LOAD_BAD_FORMAT); | ||
137 | return NULL; | ||
138 | } | ||
139 | |||
140 | if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) == 0) { | ||
141 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_LOAD_ENCRYPTED); | ||
142 | return NULL; | ||
143 | } | ||
144 | } | ||
145 | |||
146 | Messenger_Options m_options = {0}; | 129 | Messenger_Options m_options = {0}; |
147 | 130 | ||
131 | _Bool load_savedata_sk = 0, load_savedata_tox = 0; | ||
132 | |||
148 | if (options == NULL) { | 133 | if (options == NULL) { |
149 | m_options.ipv6enabled = TOX_ENABLE_IPV6_DEFAULT; | 134 | m_options.ipv6enabled = TOX_ENABLE_IPV6_DEFAULT; |
150 | } else { | 135 | } else { |
136 | if (options->savedata_type != TOX_SAVEDATA_TYPE_NONE) { | ||
137 | if (options->savedata_data == NULL || options->savedata_length == 0) { | ||
138 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_LOAD_BAD_FORMAT); | ||
139 | return NULL; | ||
140 | } | ||
141 | } | ||
142 | |||
143 | if (options->savedata_type == TOX_SAVEDATA_TYPE_SECRET_KEY) { | ||
144 | if (options->savedata_length != TOX_SECRET_KEY_SIZE) { | ||
145 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_LOAD_BAD_FORMAT); | ||
146 | return NULL; | ||
147 | } | ||
148 | |||
149 | load_savedata_sk = 1; | ||
150 | } else if (options->savedata_type == TOX_SAVEDATA_TYPE_TOX_SAVE) { | ||
151 | if (options->savedata_length < TOX_ENC_SAVE_MAGIC_LENGTH) { | ||
152 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_LOAD_BAD_FORMAT); | ||
153 | return NULL; | ||
154 | } | ||
155 | |||
156 | if (memcmp(options->savedata_data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) == 0) { | ||
157 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_LOAD_ENCRYPTED); | ||
158 | return NULL; | ||
159 | } | ||
160 | |||
161 | load_savedata_tox = 1; | ||
162 | } | ||
163 | |||
151 | m_options.ipv6enabled = options->ipv6_enabled; | 164 | m_options.ipv6enabled = options->ipv6_enabled; |
152 | m_options.udp_disabled = !options->udp_enabled; | 165 | m_options.udp_disabled = !options->udp_enabled; |
153 | m_options.port_range[0] = options->start_port; | 166 | m_options.port_range[0] = options->start_port; |
@@ -201,6 +214,8 @@ Tox *tox_new(const struct Tox_Options *options, const uint8_t *data, size_t leng | |||
201 | 214 | ||
202 | if (m_error == MESSENGER_ERROR_PORT) { | 215 | if (m_error == MESSENGER_ERROR_PORT) { |
203 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_PORT_ALLOC); | 216 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_PORT_ALLOC); |
217 | } else if (m_error == MESSENGER_ERROR_TCP_SERVER) { | ||
218 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_PORT_ALLOC); | ||
204 | } else { | 219 | } else { |
205 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_MALLOC); | 220 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_MALLOC); |
206 | } | 221 | } |
@@ -208,8 +223,11 @@ Tox *tox_new(const struct Tox_Options *options, const uint8_t *data, size_t leng | |||
208 | return NULL; | 223 | return NULL; |
209 | } | 224 | } |
210 | 225 | ||
211 | if (data && length && messenger_load(m, data, length) == -1) { | 226 | if (load_savedata_tox && messenger_load(m, options->savedata_data, options->savedata_length) == -1) { |
212 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_LOAD_BAD_FORMAT); | 227 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_LOAD_BAD_FORMAT); |
228 | } else if (load_savedata_sk) { | ||
229 | load_secret_key(m->net_crypto, options->savedata_data); | ||
230 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_OK); | ||
213 | } else { | 231 | } else { |
214 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_OK); | 232 | SET_ERROR_PARAMETER(error, TOX_ERR_NEW_OK); |
215 | } | 233 | } |
@@ -993,6 +1011,11 @@ void tox_callback_file_recv_control(Tox *tox, tox_file_recv_control_cb *function | |||
993 | bool tox_file_get_file_id(const Tox *tox, uint32_t friend_number, uint32_t file_number, uint8_t *file_id, | 1011 | bool tox_file_get_file_id(const Tox *tox, uint32_t friend_number, uint32_t file_number, uint8_t *file_id, |
994 | TOX_ERR_FILE_GET *error) | 1012 | TOX_ERR_FILE_GET *error) |
995 | { | 1013 | { |
1014 | if (!file_id) { | ||
1015 | SET_ERROR_PARAMETER(error, TOX_ERR_FILE_GET_NULL); | ||
1016 | return 0; | ||
1017 | } | ||
1018 | |||
996 | const Messenger *m = tox; | 1019 | const Messenger *m = tox; |
997 | int ret = file_get_id(m, friend_number, file_number, file_id); | 1020 | int ret = file_get_id(m, friend_number, file_number, file_id); |
998 | 1021 | ||