New api progress.

This commit is contained in:
irungentoo 2015-02-15 20:20:06 -05:00
parent fd56762a1b
commit 7e2839e2d8
4 changed files with 112 additions and 13 deletions

View File

@ -2350,7 +2350,7 @@ static char *ID2String(const uint8_t *pk)
*
* returns time (in ms) before the next do_messenger() needs to be run on success.
*/
uint32_t messenger_run_interval(Messenger *m)
uint32_t messenger_run_interval(const Messenger *m)
{
uint32_t crypto_interval = crypto_run_interval(m->net_crypto);

View File

@ -891,7 +891,7 @@ void do_messenger(Messenger *m);
*
* returns time (in ms) before the next do_messenger() needs to be run on success.
*/
uint32_t messenger_run_interval(Messenger *m);
uint32_t messenger_run_interval(const Messenger *m);
/* SAVING AND LOADING FUNCTIONS: */

View File

@ -20,11 +20,7 @@
* along with Tox. If not, see <http://www.gnu.org/licenses/>.
*
*/
/*
TODO:
-replace bool with uint8_t
-remove enums (typedef enum in api to uint8_t)
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@ -157,6 +153,7 @@ Tox *tox_new(struct Tox_Options const *options, uint8_t const *data, size_t leng
if (!new_groupchats(m)) {
kill_messenger(m);
SET_ERROR_PARAMETER(error, TOX_ERR_NEW_MALLOC);
return NULL;
}
@ -180,16 +177,120 @@ void tox_kill(Tox *tox)
logger_kill_global();
}
size_t tox_save_size(Tox const *tox)
{
const Messenger *m = tox;
return messenger_size(m);
}
void tox_save(Tox const *tox, uint8_t *data)
{
const Messenger *m = tox;
messenger_save(m, data);
}
static int address_to_ip(Messenger *m, char const *address, IP_Port *ip_port, IP_Port *ip_port_v4)
{
if (!addr_parse_ip(address, &ip_port->ip)) {
if (m->options.udp_disabled) { /* Disable DNS when udp is disabled. */
return -1;
}
IP *ip_extra = NULL;
ip_init(&ip_port->ip, m->options.ipv6enabled);
if (m->options.ipv6enabled && ip_port_v4) {
/* setup for getting BOTH: an IPv6 AND an IPv4 address */
ip_port->ip.family = AF_UNSPEC;
ip_reset(&ip_port_v4->ip);
ip_extra = &ip_port_v4->ip;
}
if (!addr_resolve(address, &ip_port->ip, ip_extra)) {
return -1;
}
}
return 0;
}
bool tox_bootstrap(Tox *tox, char const *address, uint16_t port, uint8_t const *public_key, TOX_ERR_BOOTSTRAP *error)
{
Messenger *m = tox;
bool ret = tox_add_tcp_relay(tox, address, port, public_key, error);
if (!ret) {
return 0;
}
if (m->options.udp_disabled) {
return ret;
} else { /* DHT only works on UDP. */
if (DHT_bootstrap_from_address(m->dht, address, m->options.ipv6enabled, htons(port), public_key) == 0) {
SET_ERROR_PARAMETER(error, TOX_ERR_BOOTSTRAP_BAD_ADDRESS);
return 0;
}
SET_ERROR_PARAMETER(error, TOX_ERR_BOOTSTRAP_OK);
return 1;
}
}
bool tox_add_tcp_relay(Tox *tox, char const *address, uint16_t port, uint8_t const *public_key,
TOX_ERR_BOOTSTRAP *error)
{
Messenger *m = tox;
IP_Port ip_port, ip_port_v4;
if (port == 0) {
SET_ERROR_PARAMETER(error, TOX_ERR_BOOTSTRAP_BAD_PORT);
return 0;
}
if (address_to_ip(m, address, &ip_port, &ip_port_v4) == -1) {
SET_ERROR_PARAMETER(error, TOX_ERR_BOOTSTRAP_BAD_ADDRESS);
return 0;
}
ip_port.port = htons(port);
add_tcp_relay(m->net_crypto, ip_port, public_key);
onion_add_bs_path_node(m->onion_c, ip_port, public_key); //TODO: move this
SET_ERROR_PARAMETER(error, TOX_ERR_BOOTSTRAP_OK);
return 1;
}
TOX_CONNECTION tox_get_connection_status(Tox const *tox)
{
const Messenger *m = tox;
if (onion_isconnected(m->onion_c)) {
if (DHT_non_lan_connected(m->dht)) {
return TOX_CONNECTION_UDP;
}
return TOX_CONNECTION_TCP;
}
return TOX_CONNECTION_NONE;
}
void tox_callback_connection_status(Tox *tox, tox_connection_status_cb *function, void *user_data)
{
//TODO
}
uint32_t tox_iteration_interval(Tox const *tox)
{
const Messenger *m = tox;
return messenger_run_interval(m);
}
void tox_iteration(Tox *tox)
{
Messenger *m = tox;
do_messenger(m);
do_groupchats(m->group_chat_object);
}

View File

@ -571,16 +571,14 @@ typedef enum TOX_CONNECTION {
* is connected through a TCP relay, only. For a friend, this means that the
* connection to that particular friend goes through a TCP relay.
*/
TOX_CONNECTION_TCP4,
TOX_CONNECTION_TCP6,
TOX_CONNECTION_TCP,
/**
* A UDP connection has been established. For the own instance, this means it
* is able to send UDP packets to DHT nodes, but may still be connected to
* a TCP relay. For a friend, this means that the connection to that
* particular friend was built using direct UDP packets.
*/
TOX_CONNECTION_UDP4,
TOX_CONNECTION_UDP6
TOX_CONNECTION_UDP
} TOX_CONNECTION;