summaryrefslogtreecommitdiff
path: root/testing/toxic/dhtstatus.c
blob: a11dc616571fc8e57f096e64e9c661e9ebeada5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "dhtstatus.h"
#include "string.h"
#include "../../core/network.h"
#include "../../core/DHT.h"

typedef uint8_t ipbuf[3 * 4 + 3 + 1];
static int num_selected = 0;

static void printip(ipbuf buf, IP ip)
{
    sprintf((char *)buf, "%u.%u.%u.%u", ip.c[0], ip.c[1], ip.c[2], ip.c[3]);
}

static void dhtstatus_onKey(ToxWindow *self, Messenger *m, int key)
{
    switch (key) {
        case KEY_UP:
        case 'k':
            if (--num_selected < 0)
                num_selected = CLIENT_ID_SIZE - 1;

            break;

        case KEY_DOWN:
        case 'j':
            num_selected = (num_selected + 1) % CLIENT_ID_SIZE;
            break;

        case '\n':
            break;

        default:
            break;
    }
}

static void dhtstatus_onDraw(ToxWindow *self)
{
    Client_data   *close_clientlist = DHT_get_close_list();
    curs_set(0);
    werase(self->window);

    uint64_t now = unix_time();
    uint32_t i, j;
    ipbuf ipbuf;
    wprintw(self->window,
            "\n%llu  ______________________ CLOSE LIST ________________________  ___ IP ADDR ___ _PRT_   LST   PNG    ____ SELF ____ _PRT_  LST\n\n",
            now);

    for (i = 0; i < 32; i++) { /*Number of nodes in closelist*/
        Client_data *client = close_clientlist + i;

        if (i == num_selected) wattron(self->window, COLOR_PAIR(3));

        wprintw(self->window, "[%02i]  ", i);
        uint16_t port = ntohs(client->ip_port.port);

        if (port) {
            for (j = 0; j < CLIENT_ID_SIZE; j++)
                wprintw(self->window, "%02hhx", client->client_id[j]);

            printip(ipbuf, client->ip_port.ip);
            wprintw(self->window, "  %15s %5u ", ipbuf, port);
            wprintw(self->window, "  %3llu ", now - client->timestamp);
            wprintw(self->window, "  %3llu ", now - client->last_pinged);

            port = ntohs(client->ret_ip_port.port);

            if (port) {
                printip(ipbuf, client->ret_ip_port.ip);
                wprintw(self->window, "  %15s %5u  %3llu", ipbuf, port, now - close_clientlist[i].ret_timestamp);
            }
        }

        wprintw(self->window, "\n");

        if (i == num_selected) wattroff(self->window, COLOR_PAIR(3));
    }

    wrefresh(self->window);
}

static void dhtstatus_onInit(ToxWindow *self, Messenger *m)
{

}

ToxWindow new_dhtstatus()
{
    ToxWindow ret;
    memset(&ret, 0, sizeof(ret));

    ret.onKey          = &dhtstatus_onKey;
    ret.onDraw         = &dhtstatus_onDraw;
    ret.onInit         = &dhtstatus_onInit;

    strcpy(ret.title, "[dht status]");
    return ret;
}