summaryrefslogtreecommitdiff
path: root/testing/toxic/dhtstatus.c
blob: 662689006a469aa6667c6f73308f6587a9722b62 (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
#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 < CLIENT_ID_SIZE; i++) {
    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 < 32; 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;
}