diff --git a/toxcore/onion_client.c b/toxcore/onion_client.c new file mode 100644 index 00000000..80f0ab4e --- /dev/null +++ b/toxcore/onion_client.c @@ -0,0 +1,88 @@ +/* +* onion_client.c -- Implementation of the client part of docs/Prevent_Tracking.txt +* (The part that uses the onion stuff to connect to the friend) +* +* Copyright (C) 2013 Tox project All Rights Reserved. +* +* This file is part of Tox. +* +* Tox is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Tox is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with Tox. If not, see . +* +*/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "onion_client.h" + + +static int handle_announce_response(void *object, IP_Port source, uint8_t *packet, uint32_t length) +{ + Onion_Client *onion_c = object; + + return 0; +} + +static int handle_data_response(void *object, IP_Port source, uint8_t *packet, uint32_t length) +{ + Onion_Client *onion_c = object; + + return 0; +} + +/* Takes 3 random nodes that we know and puts them in nodes + * + * nodes must be longer than 3. + * + * return -1 on failure + * return 0 on success + * + */ +int random_path(Onion_Client *onion_c, Node_format *nodes) +{ + + +} + +void do_onion_client(Onion_Client *onion_c) +{ + + +} + +Onion_Client *new_onion_client(DHT *dht) +{ + if (dht == NULL) + return NULL; + + Onion_Client *onion_c = calloc(1, sizeof(Onion_Client)); + + if (onion_c == NULL) + return NULL; + + onion_c->dht = dht; + onion_c->net = dht->c->lossless_udp->net; + + networking_registerhandler(onion_c->net, NET_PACKET_ANNOUNCE_RESPONSE, &handle_announce_response, onion_c); + networking_registerhandler(onion_c->net, NET_PACKET_ONION_DATA_RESPONSE, &handle_data_response, onion_c); + + return onion_c; +} + +void kill_onion_client(Onion_Client *onion_c) +{ + networking_registerhandler(onion_c->net, NET_PACKET_ANNOUNCE_RESPONSE, NULL, NULL); + networking_registerhandler(onion_c->net, NET_PACKET_ONION_DATA_RESPONSE, NULL, NULL); + free(onion_c); +} diff --git a/toxcore/onion_client.h b/toxcore/onion_client.h new file mode 100644 index 00000000..92fc21ac --- /dev/null +++ b/toxcore/onion_client.h @@ -0,0 +1,59 @@ +/* +* onion_client.h -- Implementation of the client part of docs/Prevent_Tracking.txt +* (The part that uses the onion stuff to connect to the friend) +* +* Copyright (C) 2013 Tox project All Rights Reserved. +* +* This file is part of Tox. +* +* Tox is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Tox is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with Tox. If not, see . +* +*/ + +#ifndef ONION_CLIENT_H +#define ONION_CLIENT_H + +#include "onion_announce.h" + +#define MAX_ONION_CLIENTS 8 + +typedef struct { + Node_format clients_list[MAX_ONION_CLIENTS]; + + +} Onion_Friend; + +typedef struct { + DHT *dht; + Networking_Core *net; + Onion_Friend *friends_list; + uint16_t num_friends; + + Node_format clients_annouce_list[MAX_ONION_CLIENTS]; +} Onion_Client; + +int onion_addfriend(Onion_Client *onion_c, uint8_t *client_id); + +int onion_delfriend(Onion_Client *onion_c, uint8_t *client_id); + +int onion_getfriendip(Onion_Client *onion_c, uint8_t *client_id, IP_Port *ip_port); + + +void do_onion_client(Onion_Client *onion_c); + +Onion_Client *new_onion_client(DHT *dht); + +void kill_onion_client(Onion_Client *onion_c); + +#endif