/* returns a NEW gchar * with the node names of the link_id */ gchar * link_id_node_names(const link_id_t *link_id) { const node_t *src_node, *dst_node; src_node = nodes_catalog_find(&link_id->src); dst_node = nodes_catalog_find(&link_id->dst); if (!src_node || !dst_node || !src_node->name->str || !dst_node->name->str) return g_strdup(""); /* invalid info */ return g_strdup_printf("%s-%s", src_node->name->str, dst_node->name->str); }
/* Called for every event a node receives. Right now it's used to * set a message in the statusbar and launch the popup timeout */ static gint node_item_event (GnomeCanvasItem * item, GdkEvent * event, canvas_node_t * canvas_node) { gdouble item_x, item_y; const node_t *node = NULL; /* This is not used yet, but it will be. */ item_x = event->button.x; item_y = event->button.y; gnome_canvas_item_w2i (item->parent, &item_x, &item_y); switch (event->type) { case GDK_2BUTTON_PRESS: if (canvas_node) node = nodes_catalog_find(&canvas_node->canvas_node_id); if (node) { node_protocols_window_create( &canvas_node->canvas_node_id ); g_my_info ("Nodes: %d (shown %u)", nodes_catalog_size(), displayed_nodes); if (DEBUG_ENABLED) { gchar *msg = node_dump(node); g_my_debug("%s", msg); g_free(msg); } } break; default: break; } return FALSE; } /* node_item_event */
/* Returns a node from the list of new nodes or NULL if there are no more * new nodes */ node_t * new_nodes_pop(void) { node_t *node = NULL; GList *old_item = NULL; if (!new_nodes) return NULL; node = new_nodes->data; old_item = new_nodes; /* We make sure now that the node hasn't been deleted since */ /* TODO Sometimes when I get here I have a node, but a null * node->node_id. What gives? */ while (node && !nodes_catalog_find(&node->node_id)) { g_my_debug ("Already deleted node in list of new nodes, in new_nodes_pop"); /* Remove this node from the list of new nodes */ new_nodes = g_list_remove_link (new_nodes, new_nodes); g_list_free_1 (old_item); if (new_nodes) node = new_nodes->data; else node = NULL; old_item = new_nodes; } if (!new_nodes) return NULL; /* Remove this node from the list of new nodes */ new_nodes = g_list_remove_link (new_nodes, new_nodes); g_list_free_1 (old_item); return node; }
/* - updates sizes, names, etc */ static gint canvas_node_update(node_id_t * node_id, canvas_node_t * canvas_node, GList **delete_list) { node_t *node; gdouble node_size; static clock_t start = 0; clock_t end; gdouble cpu_time_used; char *nametmp = NULL; node = nodes_catalog_find(node_id); /* Remove node if node is too old or if capture is stopped */ if (!node || !display_node (node)) { /* adds current to list of canvas nodes to delete */ *delete_list = g_list_prepend( *delete_list, node_id); g_my_debug ("Queing canvas node to remove."); need_reposition = TRUE; return FALSE; } switch (pref.node_size_variable) { case INST_TOTAL: node_size = get_node_size (node->node_stats.stats.average); break; case INST_INBOUND: node_size = get_node_size (node->node_stats.stats_in.average); break; case INST_OUTBOUND: node_size = get_node_size (node->node_stats.stats_out.average); break; case INST_PACKETS: node_size = get_node_size (node->node_stats.pkt_list.length); break; case ACCU_TOTAL: node_size = get_node_size (node->node_stats.stats.accumulated); break; case ACCU_INBOUND: node_size = get_node_size (node->node_stats.stats_in.accumulated); break; case ACCU_OUTBOUND: node_size = get_node_size (node->node_stats.stats_out.accumulated); break; case ACCU_PACKETS: node_size = get_node_size (node->node_stats.stats.accu_packets); break; case ACCU_AVG_SIZE: node_size = get_node_size (node->node_stats.stats.avg_size); break; default: node_size = get_node_size (node->node_stats.stats_out.average); g_warning (_("Unknown value or node_size_variable")); } /* limit the maximum size to avoid overload */ if (node_size > MAX_NODE_SIZE) node_size = MAX_NODE_SIZE; if (node->main_prot[pref.stack_level]) { canvas_node->color = protohash_color(node->main_prot[pref.stack_level]); gnome_canvas_item_set (canvas_node->node_item, "x1", -node_size / 2, "x2", node_size / 2, "y1", -node_size / 2, "y2", node_size / 2, "fill_color_gdk", &(canvas_node->color), NULL); } else { guint32 black = 0x000000ff; gnome_canvas_item_set (canvas_node->node_item, "x1", -node_size / 2, "x2", node_size / 2, "y1", -node_size / 2, "y2", node_size / 2, "fill_color_rgba", black, NULL); } /* We check the name of the node, and update the canvas node name * if it has changed (useful for non blocking dns resolving) */ /*TODO why is it exactly that sometimes it is NULL? */ if (canvas_node->text_item) { g_object_get (G_OBJECT (canvas_node->text_item), "text", &nametmp, NULL); if (strcmp (nametmp, node->name->str)) { gnome_canvas_item_set (canvas_node->text_item, "text", node->name->str, NULL); gnome_canvas_item_request_update (canvas_node->text_item); } g_free (nametmp); } /* Processor time check. If too much time has passed, update the GUI */ end = clock (); cpu_time_used = ((gdouble) (end - start)) / CLOCKS_PER_SEC; if (cpu_time_used > 0.05) { /* Force redraw */ while (gtk_events_pending ()) gtk_main_iteration (); start = end; } return FALSE; /* False means keep on calling the function */ } /* update_canvas_nodes */