mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
Small improvement to DHT. Useless file removed. Small fix to toxic.
This commit is contained in:
parent
bf6c04b2ca
commit
575804d19f
23
core/DHT.c
23
core/DHT.c
|
@ -319,6 +319,28 @@ static int replace_bad( Client_data * list,
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/*Sort the list. It will be sorted from furthest to closest.
|
||||||
|
TODO: this is innefficient and needs to be optimized.*/
|
||||||
|
static void sort_list(Client_data *list, uint32_t length, uint8_t *comp_client_id)
|
||||||
|
{
|
||||||
|
if(length == 0)
|
||||||
|
return;
|
||||||
|
uint32_t i, count;
|
||||||
|
while(1) {
|
||||||
|
count = 0;
|
||||||
|
for(i = 0; i < (length - 1); ++i) {
|
||||||
|
if(id_closest(comp_client_id, list[i].client_id, list[i + 1].client_id) == 1) {
|
||||||
|
Client_data temp = list[i + 1];
|
||||||
|
list[i + 1] = list[i];
|
||||||
|
list[i] = temp;
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(count == 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* replace the first good node that is further to the comp_client_id than that of the client_id in the list */
|
/* replace the first good node that is further to the comp_client_id than that of the client_id in the list */
|
||||||
static int replace_good( Client_data * list,
|
static int replace_good( Client_data * list,
|
||||||
|
@ -329,6 +351,7 @@ static int replace_good( Client_data * list,
|
||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
uint64_t temp_time = unix_time();
|
uint64_t temp_time = unix_time();
|
||||||
|
sort_list(list, length, comp_client_id);
|
||||||
|
|
||||||
for(i = 0; i < length; ++i)
|
for(i = 0; i < length; ++i)
|
||||||
if(id_closest(comp_client_id, list[i].client_id, client_id) == 2) {
|
if(id_closest(comp_client_id, list[i].client_id, client_id) == 2) {
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
#basic python UDP script
|
|
||||||
#for testing only
|
|
||||||
import socket
|
|
||||||
import random
|
|
||||||
|
|
||||||
UDP_IP = "127.0.0.1"
|
|
||||||
UDP_PORT = 5004
|
|
||||||
|
|
||||||
sock = socket.socket(socket.AF_INET, # Internet
|
|
||||||
socket.SOCK_DGRAM) # UDP
|
|
||||||
sock.bind((UDP_IP, UDP_PORT))
|
|
||||||
|
|
||||||
#our client_id
|
|
||||||
client_id = str(''.join(random.choice("abcdefghijklmnopqrstuvwxyz") for x in range(32)))
|
|
||||||
|
|
||||||
print client_id
|
|
||||||
a = 1;
|
|
||||||
#send ping request to our DHT on localhost.
|
|
||||||
sock.sendto("0012345678".decode("hex") + client_id, ('127.0.0.1', 33445))
|
|
||||||
|
|
||||||
#print all packets received and respond to ping requests properly
|
|
||||||
while True:
|
|
||||||
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
|
|
||||||
print "received message:", data.encode('hex'), " From:", addr
|
|
||||||
#if we receive a ping request.
|
|
||||||
print data[0].encode('hex')
|
|
||||||
if data[0] == "00".decode('hex'):
|
|
||||||
print "Sending ping resp"
|
|
||||||
sock.sendto("01".decode('hex') + data[1:5] + client_id, addr)
|
|
||||||
|
|
||||||
#if we receive a get_nodes request.
|
|
||||||
if data[0] == "02".decode('hex'):
|
|
||||||
print "Sending getn resp"
|
|
||||||
#send send nodes packet with a couple 127.0.0.1 ips and ports.
|
|
||||||
#127.0.0.1:5000, 127.0.0.1:5001, 127.0.0.1:5002
|
|
||||||
sock.sendto("03".decode('hex') + data[1:5] + client_id + ("HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH" + "7F00000113880000".decode('hex') + "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH" + "7F00000113890000".decode('hex') + "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH" + "7F000001138A0000".decode('hex')), addr)
|
|
||||||
|
|
||||||
if data[0] == "10".decode('hex'):
|
|
||||||
print "Sending handshake resp"
|
|
||||||
sock.sendto("10".decode('hex') + data[1:5] + client_id[:4], addr)
|
|
||||||
if data[0] == "11".decode('hex'):
|
|
||||||
print "Sending SYNC resp"
|
|
||||||
a+=1
|
|
||||||
sock.sendto("11".decode('hex') + chr(a) + data[1:9], addr)
|
|
|
@ -43,13 +43,13 @@ static void dhtstatus_onDraw(ToxWindow *self)
|
||||||
uint32_t i, j;
|
uint32_t i, j;
|
||||||
ipbuf ipbuf;
|
ipbuf ipbuf;
|
||||||
wprintw(self->window,"\n%llu ______________________ CLOSE LIST ________________________ ___ IP ADDR ___ _PRT_ LST PNG ____ SELF ____ _PRT_ LST\n\n", now);
|
wprintw(self->window,"\n%llu ______________________ CLOSE LIST ________________________ ___ IP ADDR ___ _PRT_ LST PNG ____ SELF ____ _PRT_ LST\n\n", now);
|
||||||
for(i = 0; i < CLIENT_ID_SIZE; i++) {
|
for(i = 0; i < 32; i++) { /*Number of nodes in closelist*/
|
||||||
Client_data * client = close_clientlist + i;
|
Client_data * client = close_clientlist + i;
|
||||||
if (i == num_selected) wattron(self->window, COLOR_PAIR(3));
|
if (i == num_selected) wattron(self->window, COLOR_PAIR(3));
|
||||||
wprintw(self->window,"[%02i] ", i);
|
wprintw(self->window,"[%02i] ", i);
|
||||||
uint16_t port = ntohs(client->ip_port.port);
|
uint16_t port = ntohs(client->ip_port.port);
|
||||||
if(port) {
|
if(port) {
|
||||||
for(j = 0; j < 32; j++)
|
for(j = 0; j < CLIENT_ID_SIZE; j++)
|
||||||
wprintw(self->window, "%02hhx", client->client_id[j]);
|
wprintw(self->window, "%02hhx", client->client_id[j]);
|
||||||
|
|
||||||
printip(ipbuf, client->ip_port.ip);
|
printip(ipbuf, client->ip_port.ip);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user