From 86d42ec7351c1fae5d502c863ef95bb61769feaf Mon Sep 17 00:00:00 2001 From: Laurent Ghigonis Date: Sun, 2 Dec 2012 22:54:06 +0100 Subject: update gg_map name, add WARNING of work in progress --- gg_map/README.txt | 3 +- gg_map/gg_map.c | 290 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ gg_map/gg_net.c | 290 ------------------------------------------------------ 3 files changed, 292 insertions(+), 291 deletions(-) create mode 100644 gg_map/gg_map.c delete mode 100644 gg_map/gg_net.c diff --git a/gg_map/README.txt b/gg_map/README.txt index 223fa98..de24a7d 100644 --- a/gg_map/README.txt +++ b/gg_map/README.txt @@ -1,5 +1,6 @@ -glouglou_efl - glougloud client in C using EFL +gg_map - glouglou visualisation client of network traffic in real time +WARNING: Work in progress, don't expect this to work ! === Requirements === diff --git a/gg_map/gg_map.c b/gg_map/gg_map.c new file mode 100644 index 0000000..646cfac --- /dev/null +++ b/gg_map/gg_map.c @@ -0,0 +1,290 @@ +#include + +#include + +#include + +struct conn { + int id; + struct node *nsrc; + struct node *ndst; + int proto; + int size; + char name[DNSNAME_MAX]; + Evas_Object *line; +}; + +struct node { + char name[DNSNAME_MAX]; + u_int ip; + char fqdn[DNSNAME_MAX]; + Evas_Object *btn; +}; + +Evas_Object *_mainwin, *_connbox; +Eina_List *_conns = NULL; +Eina_List *_nodes = NULL; + +static struct conn *conn_add(u_int, struct node *, struct node *, u_int, u_int); +static void conn_del(struct conn *); +static struct conn *conn_find(u_int); +static struct conn *conn_find_or_create(u_int, struct node *, struct node *, u_int, u_int); +static struct node *node_add(u_int); +static void node_del(struct node *); +static struct node *node_find(u_int); +static struct node *node_find_or_create(u_int); +static void node_update_name(struct node *, char *, int); + +static struct conn * +conn_add(u_int id, struct node *nsrc, struct node *ndst, u_int proto, u_int size) +{ + struct conn *c; + + c = calloc(sizeof(struct conn), 1); + if (!c) + err(1, "calloc failed in conn_add\n"); + c->id = id; + c->nsrc = nsrc; + c->ndst = ndst; + c->proto = proto; + c->size = size; + snprintf(c->name, sizeof(c->name), "%d: %x -> %x - %d", + id, nsrc->ip, ndst->ip, proto); + + _conns = eina_list_append(_conns, c); + + // XXX c->line evas + + return c; +} + +static void +conn_del(struct conn *c) +{ + if (c->line) + evas_object_del(c->line); + _conns = eina_list_prepend(_conns, c); + free(c); +} + +static struct conn * +conn_find(u_int id) +{ + struct conn *c; + Eina_List *l; + + EINA_LIST_FOREACH(_conns, l, c) + if (c->id == id) + return c; + return NULL; +} + +static struct conn * +conn_find_or_create(u_int id, struct node *nsrc, struct node *ndst, u_int proto, u_int size) +{ + struct conn *c; + + c = conn_find(id); + if (!c) + c = conn_add(id, nsrc, ndst, proto, size); + return c; +} + +static struct node * +node_add(u_int ip) +{ + struct node *n; + + n = calloc(sizeof(struct node), 1); + if (!n) + err(1, "calloc failed in node_add\n"); + n->ip = ip; + + _nodes = eina_list_append(_nodes, n); + + n->btn = elm_button_add(_mainwin); + node_update_name(n, NULL, 0); + elm_box_pack_end(_connbox, n->btn); + evas_object_show(n->btn); + + return n; +} + +static void +node_del(struct node *n) +{ + if (n->btn) + evas_object_del(n->btn); + _nodes = eina_list_prepend(_nodes, n); + free(n); +} + +static struct node * +node_find(u_int ip) +{ + struct node *n; + Eina_List *l; + + EINA_LIST_FOREACH(_nodes, l, n) + if (n->ip == ip) + return n; + return NULL; +} + +static struct node * +node_find_or_create(u_int ip) +{ + struct node *n; + + n = node_find(ip); + if (!n) + n = node_add(ip); + return n; +} + +static void +node_update_name(struct node *n, char *name, int len) +{ + if (!name) { + snprintf(n->name, sizeof(n->name), "%x", n->ip); + } else { + if (len > sizeof(n->name)) + len = sizeof(n->name); + strncpy(n->name, name, len); + } + elm_object_text_set(n->btn, n->name); +} + +static Eina_Bool +_cb_conn_data(void *data, int type, Ecore_Con_Event_Server_Data *ev) +{ + u_int id, ip, src, dst, proto, size, len; + struct node *n, *nsrc, *ndst; + struct conn *c; + struct packet *p; + char *fqdn; + int i; + + printf("data received:\n"); + for (i=0; i < ev->size; i++){ + printf("%2.2x ", ((u_char *)ev->data)[i]); + if( (i%15 == 0 && i!=0) || i==ev->size-1 ) + printf("\n"); + } + + p = ev->data; + switch(p->type) { + case PACKET_NEWCONN: + id = p->newconn_id; + src = ntohl(p->newconn_src); + dst = ntohl(p->newconn_dst); + proto = p->newconn_proto; + size = ntohs(p->newconn_size); + + printf(" type PACKET_NEWCONN\n"); + printf(" newconn_id %d\n", id); + printf(" newconn_src %4x\n", src); + printf(" newconn_dst %4x\n", dst); + printf(" newconn_proto %d\n", proto); + printf(" newconn_size %d\n", size); + + nsrc = node_find_or_create(src); + ndst = node_find_or_create(dst); + conn_find_or_create(id, nsrc, ndst, proto, size); + + break; + case PACKET_DELCONN: + id = p->delconn_id; + + printf(" type PACKET_DELCONN\n"); + printf(" delconn_id %d\n", id); + + n = node_find(id); + if (n) + node_del(n); + + break; + case PACKET_DATA: + id = p->data_connid; + size = ntohs(p->data_size); + + printf(" type PACKET_DATA\n"); + printf(" data_connid %d\n", id); + printf(" data_size %d\n", size); + + c = conn_find(id); + // XXX evas_point on conn line + + break; + case PACKET_NAME: + ip = ntohl(p->name_addr); + len = p->name_len; + fqdn = (char *)p->name_fqdn; + + printf(" type PACKET_NAME\n"); + printf(" name_addr %4x\n", ip); + printf(" name_len %d\n", len); + printf(" name_name_fqdn %s\n", fqdn); + + n = node_find(ip); + if (n) + node_update_name(n, fqdn, len); + + break; + } + + return ECORE_CALLBACK_RENEW; +} + +static void +_cb_on_done(void *data, Evas_Object *obj, void *event_info) +{ + elm_exit(); +} + +EAPI_MAIN int +elm_main(int argc, char **argv) +{ + Evas_Object *box, *lab, *btn, *bg; + Ecore_Con_Server *conn; + + _mainwin = elm_win_util_standard_add("hello", "Hello"); + evas_object_smart_callback_add(_mainwin, "delete,request", _cb_on_done, NULL); + + bg = elm_bg_add(_mainwin); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(_mainwin, bg); + evas_object_show(bg); + + box = elm_box_add(_mainwin); + elm_box_horizontal_set(box, EINA_TRUE); + elm_win_resize_object_add(_mainwin, box); + evas_object_show(box); + + lab = elm_label_add(_mainwin); + elm_object_text_set(lab, "Welcome to glouglou_efl"); + elm_box_pack_end(box, lab); + evas_object_show(lab); + + btn = elm_button_add(_mainwin); + elm_object_text_set(btn, "Quit"); + elm_box_pack_end(box, btn); + evas_object_show(btn); + evas_object_smart_callback_add(btn, "clicked", _cb_on_done, NULL); + + _connbox = elm_box_add(_mainwin); + evas_object_show(_connbox); + + evas_object_show(_mainwin); + + ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, + (Ecore_Event_Handler_Cb)_cb_conn_data, NULL); + conn = ecore_con_server_connect(ECORE_CON_REMOTE_UDP, "127.0.0.1", 4430, NULL); + ecore_con_server_send(conn, "hello", 5); + ecore_con_server_flush(conn); + + elm_run(); + elm_shutdown(); + return 0; +} +ELM_MAIN() diff --git a/gg_map/gg_net.c b/gg_map/gg_net.c deleted file mode 100644 index 646cfac..0000000 --- a/gg_map/gg_net.c +++ /dev/null @@ -1,290 +0,0 @@ -#include - -#include - -#include - -struct conn { - int id; - struct node *nsrc; - struct node *ndst; - int proto; - int size; - char name[DNSNAME_MAX]; - Evas_Object *line; -}; - -struct node { - char name[DNSNAME_MAX]; - u_int ip; - char fqdn[DNSNAME_MAX]; - Evas_Object *btn; -}; - -Evas_Object *_mainwin, *_connbox; -Eina_List *_conns = NULL; -Eina_List *_nodes = NULL; - -static struct conn *conn_add(u_int, struct node *, struct node *, u_int, u_int); -static void conn_del(struct conn *); -static struct conn *conn_find(u_int); -static struct conn *conn_find_or_create(u_int, struct node *, struct node *, u_int, u_int); -static struct node *node_add(u_int); -static void node_del(struct node *); -static struct node *node_find(u_int); -static struct node *node_find_or_create(u_int); -static void node_update_name(struct node *, char *, int); - -static struct conn * -conn_add(u_int id, struct node *nsrc, struct node *ndst, u_int proto, u_int size) -{ - struct conn *c; - - c = calloc(sizeof(struct conn), 1); - if (!c) - err(1, "calloc failed in conn_add\n"); - c->id = id; - c->nsrc = nsrc; - c->ndst = ndst; - c->proto = proto; - c->size = size; - snprintf(c->name, sizeof(c->name), "%d: %x -> %x - %d", - id, nsrc->ip, ndst->ip, proto); - - _conns = eina_list_append(_conns, c); - - // XXX c->line evas - - return c; -} - -static void -conn_del(struct conn *c) -{ - if (c->line) - evas_object_del(c->line); - _conns = eina_list_prepend(_conns, c); - free(c); -} - -static struct conn * -conn_find(u_int id) -{ - struct conn *c; - Eina_List *l; - - EINA_LIST_FOREACH(_conns, l, c) - if (c->id == id) - return c; - return NULL; -} - -static struct conn * -conn_find_or_create(u_int id, struct node *nsrc, struct node *ndst, u_int proto, u_int size) -{ - struct conn *c; - - c = conn_find(id); - if (!c) - c = conn_add(id, nsrc, ndst, proto, size); - return c; -} - -static struct node * -node_add(u_int ip) -{ - struct node *n; - - n = calloc(sizeof(struct node), 1); - if (!n) - err(1, "calloc failed in node_add\n"); - n->ip = ip; - - _nodes = eina_list_append(_nodes, n); - - n->btn = elm_button_add(_mainwin); - node_update_name(n, NULL, 0); - elm_box_pack_end(_connbox, n->btn); - evas_object_show(n->btn); - - return n; -} - -static void -node_del(struct node *n) -{ - if (n->btn) - evas_object_del(n->btn); - _nodes = eina_list_prepend(_nodes, n); - free(n); -} - -static struct node * -node_find(u_int ip) -{ - struct node *n; - Eina_List *l; - - EINA_LIST_FOREACH(_nodes, l, n) - if (n->ip == ip) - return n; - return NULL; -} - -static struct node * -node_find_or_create(u_int ip) -{ - struct node *n; - - n = node_find(ip); - if (!n) - n = node_add(ip); - return n; -} - -static void -node_update_name(struct node *n, char *name, int len) -{ - if (!name) { - snprintf(n->name, sizeof(n->name), "%x", n->ip); - } else { - if (len > sizeof(n->name)) - len = sizeof(n->name); - strncpy(n->name, name, len); - } - elm_object_text_set(n->btn, n->name); -} - -static Eina_Bool -_cb_conn_data(void *data, int type, Ecore_Con_Event_Server_Data *ev) -{ - u_int id, ip, src, dst, proto, size, len; - struct node *n, *nsrc, *ndst; - struct conn *c; - struct packet *p; - char *fqdn; - int i; - - printf("data received:\n"); - for (i=0; i < ev->size; i++){ - printf("%2.2x ", ((u_char *)ev->data)[i]); - if( (i%15 == 0 && i!=0) || i==ev->size-1 ) - printf("\n"); - } - - p = ev->data; - switch(p->type) { - case PACKET_NEWCONN: - id = p->newconn_id; - src = ntohl(p->newconn_src); - dst = ntohl(p->newconn_dst); - proto = p->newconn_proto; - size = ntohs(p->newconn_size); - - printf(" type PACKET_NEWCONN\n"); - printf(" newconn_id %d\n", id); - printf(" newconn_src %4x\n", src); - printf(" newconn_dst %4x\n", dst); - printf(" newconn_proto %d\n", proto); - printf(" newconn_size %d\n", size); - - nsrc = node_find_or_create(src); - ndst = node_find_or_create(dst); - conn_find_or_create(id, nsrc, ndst, proto, size); - - break; - case PACKET_DELCONN: - id = p->delconn_id; - - printf(" type PACKET_DELCONN\n"); - printf(" delconn_id %d\n", id); - - n = node_find(id); - if (n) - node_del(n); - - break; - case PACKET_DATA: - id = p->data_connid; - size = ntohs(p->data_size); - - printf(" type PACKET_DATA\n"); - printf(" data_connid %d\n", id); - printf(" data_size %d\n", size); - - c = conn_find(id); - // XXX evas_point on conn line - - break; - case PACKET_NAME: - ip = ntohl(p->name_addr); - len = p->name_len; - fqdn = (char *)p->name_fqdn; - - printf(" type PACKET_NAME\n"); - printf(" name_addr %4x\n", ip); - printf(" name_len %d\n", len); - printf(" name_name_fqdn %s\n", fqdn); - - n = node_find(ip); - if (n) - node_update_name(n, fqdn, len); - - break; - } - - return ECORE_CALLBACK_RENEW; -} - -static void -_cb_on_done(void *data, Evas_Object *obj, void *event_info) -{ - elm_exit(); -} - -EAPI_MAIN int -elm_main(int argc, char **argv) -{ - Evas_Object *box, *lab, *btn, *bg; - Ecore_Con_Server *conn; - - _mainwin = elm_win_util_standard_add("hello", "Hello"); - evas_object_smart_callback_add(_mainwin, "delete,request", _cb_on_done, NULL); - - bg = elm_bg_add(_mainwin); - evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(_mainwin, bg); - evas_object_show(bg); - - box = elm_box_add(_mainwin); - elm_box_horizontal_set(box, EINA_TRUE); - elm_win_resize_object_add(_mainwin, box); - evas_object_show(box); - - lab = elm_label_add(_mainwin); - elm_object_text_set(lab, "Welcome to glouglou_efl"); - elm_box_pack_end(box, lab); - evas_object_show(lab); - - btn = elm_button_add(_mainwin); - elm_object_text_set(btn, "Quit"); - elm_box_pack_end(box, btn); - evas_object_show(btn); - evas_object_smart_callback_add(btn, "clicked", _cb_on_done, NULL); - - _connbox = elm_box_add(_mainwin); - evas_object_show(_connbox); - - evas_object_show(_mainwin); - - ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA, - (Ecore_Event_Handler_Cb)_cb_conn_data, NULL); - conn = ecore_con_server_connect(ECORE_CON_REMOTE_UDP, "127.0.0.1", 4430, NULL); - ecore_con_server_send(conn, "hello", 5); - ecore_con_server_flush(conn); - - elm_run(); - elm_shutdown(); - return 0; -} -ELM_MAIN() -- cgit v1.2.3-59-g8ed1b