From 1af9d84aad95a83f11bc104ac2da68be4e65c186 Mon Sep 17 00:00:00 2001 From: Aaron Lipinski Date: Sun, 11 Aug 2013 14:48:02 +1200 Subject: [PATCH] add dhtstatus file --- CMakeLists.txt | 1 + dhtstatus.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++ dhtstatus.h | 8 +++++ 3 files changed, 98 insertions(+) create mode 100644 dhtstatus.c create mode 100644 dhtstatus.h diff --git a/CMakeLists.txt b/CMakeLists.txt index dd811b9..9ee7020 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ add_executable(${exe_name} windows.c prompt.c friendlist.c + dhtstatus.c chat.c configdir.c) diff --git a/dhtstatus.c b/dhtstatus.c new file mode 100644 index 0000000..6626890 --- /dev/null +++ b/dhtstatus.c @@ -0,0 +1,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; +} diff --git a/dhtstatus.h b/dhtstatus.h new file mode 100644 index 0000000..2b30e5a --- /dev/null +++ b/dhtstatus.h @@ -0,0 +1,8 @@ +#ifndef _dhtstatus_h +#define _dhtstatus_h + +#include "windows.h" + +ToxWindow new_dhtstatus(); + +#endif