diff options
Diffstat (limited to 'toxcore/TCP_client.c')
-rw-r--r-- | toxcore/TCP_client.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/toxcore/TCP_client.c b/toxcore/TCP_client.c index 8a14c7cd..6e6e6b7b 100644 --- a/toxcore/TCP_client.c +++ b/toxcore/TCP_client.c | |||
@@ -33,6 +33,88 @@ | |||
33 | #include <sys/ioctl.h> | 33 | #include <sys/ioctl.h> |
34 | #endif | 34 | #endif |
35 | 35 | ||
36 | struct TCP_Client_Connection { | ||
37 | TCP_CLIENT_STATUS status; | ||
38 | Socket sock; | ||
39 | uint8_t self_public_key[CRYPTO_PUBLIC_KEY_SIZE]; /* our public key */ | ||
40 | uint8_t public_key[CRYPTO_PUBLIC_KEY_SIZE]; /* public key of the server */ | ||
41 | IP_Port ip_port; /* The ip and port of the server */ | ||
42 | TCP_Proxy_Info proxy_info; | ||
43 | uint8_t recv_nonce[CRYPTO_NONCE_SIZE]; /* Nonce of received packets. */ | ||
44 | uint8_t sent_nonce[CRYPTO_NONCE_SIZE]; /* Nonce of sent packets. */ | ||
45 | uint8_t shared_key[CRYPTO_SHARED_KEY_SIZE]; | ||
46 | uint16_t next_packet_length; | ||
47 | |||
48 | uint8_t temp_secret_key[CRYPTO_SECRET_KEY_SIZE]; | ||
49 | |||
50 | uint8_t last_packet[2 + MAX_PACKET_SIZE]; | ||
51 | uint16_t last_packet_length; | ||
52 | uint16_t last_packet_sent; | ||
53 | |||
54 | TCP_Priority_List *priority_queue_start, *priority_queue_end; | ||
55 | |||
56 | uint64_t kill_at; | ||
57 | |||
58 | uint64_t last_pinged; | ||
59 | uint64_t ping_id; | ||
60 | |||
61 | uint64_t ping_response_id; | ||
62 | uint64_t ping_request_id; | ||
63 | |||
64 | struct { | ||
65 | uint8_t status; /* 0 if not used, 1 if other is offline, 2 if other is online. */ | ||
66 | uint8_t public_key[CRYPTO_PUBLIC_KEY_SIZE]; | ||
67 | uint32_t number; | ||
68 | } connections[NUM_CLIENT_CONNECTIONS]; | ||
69 | int (*response_callback)(void *object, uint8_t connection_id, const uint8_t *public_key); | ||
70 | void *response_callback_object; | ||
71 | int (*status_callback)(void *object, uint32_t number, uint8_t connection_id, uint8_t status); | ||
72 | void *status_callback_object; | ||
73 | int (*data_callback)(void *object, uint32_t number, uint8_t connection_id, const uint8_t *data, uint16_t length, | ||
74 | void *userdata); | ||
75 | void *data_callback_object; | ||
76 | int (*oob_data_callback)(void *object, const uint8_t *public_key, const uint8_t *data, uint16_t length, void *userdata); | ||
77 | void *oob_data_callback_object; | ||
78 | |||
79 | int (*onion_callback)(void *object, const uint8_t *data, uint16_t length, void *userdata); | ||
80 | void *onion_callback_object; | ||
81 | |||
82 | /* Can be used by user. */ | ||
83 | void *custom_object; | ||
84 | uint32_t custom_uint; | ||
85 | }; | ||
86 | |||
87 | const uint8_t *tcp_con_public_key(const TCP_Client_Connection *con) | ||
88 | { | ||
89 | return con->public_key; | ||
90 | } | ||
91 | |||
92 | IP_Port tcp_con_ip_port(const TCP_Client_Connection *con) | ||
93 | { | ||
94 | return con->ip_port; | ||
95 | } | ||
96 | |||
97 | TCP_CLIENT_STATUS tcp_con_status(const TCP_Client_Connection *con) | ||
98 | { | ||
99 | return con->status; | ||
100 | } | ||
101 | void *tcp_con_custom_object(const TCP_Client_Connection *con) | ||
102 | { | ||
103 | return con->custom_object; | ||
104 | } | ||
105 | uint32_t tcp_con_custom_uint(const TCP_Client_Connection *con) | ||
106 | { | ||
107 | return con->custom_uint; | ||
108 | } | ||
109 | void tcp_con_set_custom_object(TCP_Client_Connection *con, void *object) | ||
110 | { | ||
111 | con->custom_object = object; | ||
112 | } | ||
113 | void tcp_con_set_custom_uint(TCP_Client_Connection *con, uint32_t uint) | ||
114 | { | ||
115 | con->custom_uint = uint; | ||
116 | } | ||
117 | |||
36 | /* return 1 on success | 118 | /* return 1 on success |
37 | * return 0 on failure | 119 | * return 0 on failure |
38 | */ | 120 | */ |