aboutsummaryrefslogtreecommitdiffstats
path: root/gg_map/gg_map.c
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2013-06-05 15:23:45 +0200
committerLaurent Ghigonis <laurent@p1sec.com>2013-06-05 15:23:45 +0200
commitc2df624fae9cd08c662f5f611044094f35bb8f63 (patch)
tree1e1f7b7fb6b86fc73cb6da21e6eabd3c5151069e /gg_map/gg_map.c
parentMerge branch 'master' into traceroute (diff)
parentgg_map: fix dependencies description (diff)
downloadglouglou-c2df624fae9cd08c662f5f611044094f35bb8f63.tar.xz
glouglou-c2df624fae9cd08c662f5f611044094f35bb8f63.zip
Merge branch 'master' into traceroute
Diffstat (limited to 'gg_map/gg_map.c')
-rw-r--r--gg_map/gg_map.c95
1 files changed, 71 insertions, 24 deletions
diff --git a/gg_map/gg_map.c b/gg_map/gg_map.c
index dda280c..48c68f0 100644
--- a/gg_map/gg_map.c
+++ b/gg_map/gg_map.c
@@ -6,13 +6,26 @@
#include <libglouglou.h>
#include <libggnet.h>
-int _debug = 0;
+int _loglevel = 0;
Evas_Object *_mainwin;
Evas_Object *_egraph = NULL;
struct ggnet *_ggnet;
struct event_base *_ev_base;
+#if defined(__OpenBSD__)
+void __dead
+#else
+void
+#endif
+usage(void)
+{
+ extern char *__progname;
+
+ fprintf(stderr, "usage: %s [-hv] [ip [port]]\n", __progname);
+ exit(1);
+}
+
/* link between ecore loop and libevent loop */
static Eina_Bool
_cb_ecore_libevent(void *data) {
@@ -117,7 +130,7 @@ _conn_add(u_int id, u_int src, u_int dst, u_int proto, u_int8_t pktsize)
int size, response;
GG_PKTDATA_SIZE_DECODE(pktsize, size, response);
- if (_debug)
+ if (_loglevel >= 2)
printf("_conn_add\n");
if (response > 0) /* cannot have a new connection that is a response */
return;
@@ -131,7 +144,7 @@ _conn_add(u_int id, u_int src, u_int dst, u_int proto, u_int8_t pktsize)
va = _node_to_vertice(a);
vb = _node_to_vertice(b);
e = egraph_edge_find(_egraph, va, vb);
- if (_debug)
+ if (_loglevel >= 2)
printf("_conn_add: a %d b %d e %x id %d\n", va->id, vb->id, e, id);
if (!e) {
if (a->group && a->group->conn_count == 1)
@@ -139,7 +152,7 @@ _conn_add(u_int id, u_int src, u_int dst, u_int proto, u_int8_t pktsize)
if (b->group && b->group->conn_count == 1)
_node_detach_parentgroup(b);
e = egraph_edge_add(_egraph, va, vb, conn);
- if (_debug)
+ if (_loglevel >= 2)
printf("_conn_add: egraph edge added %x\n", e);
}
ggnet_conn_usrdata_set(conn, e);
@@ -156,7 +169,7 @@ _conn_del(int id) {
a = ggnet_conn_src_get(conn);
b = ggnet_conn_dst_get(conn);
e = ggnet_conn_usrdata_get(conn);
- if (_debug)
+ if (_loglevel >= 2)
printf("_conn_del: conn id %d\n", id); // XXX
ggnet_conn_del(_ggnet, conn);
/* is there other connections between these peers ? */
@@ -164,7 +177,7 @@ _conn_del(int id) {
if (!otherconn) {
// XXX lets keep the edges, igraph layouting behaves badly when you have
// a vertice without edge ...
- if (_debug)
+ if (_loglevel >= 2)
printf("_conn_del: edge del %x\n", e); // XXX
egraph_edge_del(_egraph, e);
if (a->group && a->group->conn_count == 0)
@@ -172,11 +185,11 @@ _conn_del(int id) {
if (b->group && b->group->conn_count == 0)
_node_attach_parentgroup(b);
} else {
- if (_debug)
+ if (_loglevel >= 2)
printf("_conn_del: not last one, edge %x *not* deleted\n", e);
}
} else {
- if (_debug)
+ if (_loglevel >= 2)
printf("_conn_del: does not exist !\n");
}
}
@@ -222,12 +235,14 @@ _cb_packet(struct gg_client *cli, struct gg_packet *pkt)
{
switch(pkt->type) {
case PACKET_NEWCONN:
- printf(" type PACKET_NEWCONN\n");
- printf(" newconn_id %d\n", pkt->newconn_id);
- printf(" newconn_src %4x\n", pkt->newconn_src);
- printf(" newconn_dst %4x\n", pkt->newconn_dst);
- printf(" newconn_proto %d\n", pkt->newconn_proto);
- printf(" newconn_size %d\n", pkt->newconn_size);
+ if (_loglevel >= 1) {
+ printf(" type PACKET_NEWCONN\n");
+ printf(" newconn_id %d\n", pkt->newconn_id);
+ printf(" newconn_src %4x\n", pkt->newconn_src);
+ printf(" newconn_dst %4x\n", pkt->newconn_dst);
+ printf(" newconn_proto %d\n", pkt->newconn_proto);
+ printf(" newconn_size %d\n", pkt->newconn_size);
+ }
_conn_del(pkt->newconn_id); /* in case we missed a previous del */
_conn_add(pkt->newconn_id, pkt->newconn_src, pkt->newconn_dst,
@@ -235,25 +250,31 @@ _cb_packet(struct gg_client *cli, struct gg_packet *pkt)
break;
case PACKET_DELCONN:
- printf(" type PACKET_DELCONN\n");
- printf(" delconn_id %d\n", pkt->delconn_id);
+ if (_loglevel >= 1) {
+ printf(" type PACKET_DELCONN\n");
+ printf(" delconn_id %d\n", pkt->delconn_id);
+ }
_conn_del(pkt->delconn_id);
break;
case PACKET_DATA:
- //printf(" type PACKET_DATA\n");
- //printf(" data_connid %d\n", pkt->data_connid);
- //printf(" data_size %d\n", pkt->data_size);
+ if (_loglevel >= 1) {
+ //printf(" type PACKET_DATA\n");
+ //printf(" data_connid %d\n", pkt->data_connid);
+ //printf(" data_size %d\n", pkt->data_size);
+ }
_conn_data(pkt->data_connid, pkt->data_size);
break;
case PACKET_NAME:
- printf(" type PACKET_NAME\n");
- printf(" name_addr %4x\n", pkt->name_addr);
- printf(" name_len %d\n", pkt->name_len);
- printf(" name_name_fqdn %s\n", pkt->name_fqdn);
+ if (_loglevel >= 1) {
+ printf(" type PACKET_NAME\n");
+ printf(" name_addr %4x\n", pkt->name_addr);
+ printf(" name_len %d\n", pkt->name_len);
+ printf(" name_name_fqdn %s\n", pkt->name_fqdn);
+ }
_conn_name(pkt->name_addr, pkt->name_len, pkt->name_fqdn);
break;
@@ -333,7 +354,33 @@ elm_main(int argc, char **argv)
Evas_Object *bx, *bx2, *ck, *sc, *seg_it, *lb;
Evas *evas;
struct gg_client *ggcli;
+ char gg_serv_ip[30] = "127.0.0.1";
+ int gg_serv_port = GLOUGLOU_ANALY_DEFAULT_PORT;
int retval = -1;
+ int op;
+
+ while ((op = getopt(argc, argv, "hv")) != -1) {
+ switch (op) {
+ case 'h':
+ usage();
+ /* NOTREACHED */
+ case 'v':
+ _loglevel++;
+ break;
+ default:
+ usage();
+ /* NOTREACHED */
+ }
+ }
+ switch (argc - optind) {
+ case 2: gg_serv_port = atoi(argv[3]);
+ case 1: strncpy(gg_serv_ip, argv[2], sizeof(gg_serv_ip));
+ case 0:
+ break;
+ default:
+ usage();
+ /* NOTREACHED */
+ }
win = elm_win_add(NULL, "panes", ELM_WIN_BASIC);
evas = evas_object_evas_get(win);
@@ -437,7 +484,7 @@ elm_main(int argc, char **argv)
_cb_ggnet_addgroup, _cb_ggnet_delgroup);
_ev_base = event_base_new();
- ggcli = gg_client_connect(_ev_base, "127.0.0.1", GLOUGLOU_ANALY_DEFAULT_PORT,
+ ggcli = gg_client_connect(_ev_base, gg_serv_ip, gg_serv_port,
NULL, _cb_packet, NULL);
if (!ggcli)
goto quit;