void add_tree(const unsigned long ip, const u_char * data) { struct tree_type *node = NULL, *newnode = NULL; newnode = packet2tree(data); if (newnode->type == UNKNOWN) { /* couldn't figure out if packet was client or server */ dbg(2, "%s (%lu) unknown client/server", libnet_addr2name4(newnode->ip, RESOLVE), newnode->ip); } /* try to find a simular entry in the tree */ node = RB_FIND(data_tree, &treeroot, newnode); #ifdef DEBUG if (debug > 2) tree_printnode("add_tree", node); #endif /* new entry required */ if (node == NULL) { /* increment counters */ if (newnode->type == SERVER) { newnode->server_cnt++; } else if (newnode->type == CLIENT) { newnode->client_cnt++; } /* insert it in */ RB_INSERT(data_tree, &treeroot, newnode); } else { /* we found something, so update it */ dbg(2, " node: %p\nnewnode: %p", node, newnode); #ifdef DEBUG if (debug > 2) tree_printnode("update node", node); #endif /* increment counter */ if (newnode->type == SERVER) { node->server_cnt++; } else if (newnode->type == CLIENT) { /* temp debug code */ node->client_cnt++; } /* didn't insert it, so free it */ free(newnode); } dbg(2, "------- START NEXT -------"); #ifdef DEBUG if (debug > 2) tree_print(&treeroot); #endif }
static void tree_print(struct data_tree *treeroot) { struct tree_type *node = NULL; RB_FOREACH(node, data_tree, treeroot) { tree_printnode("my node", node); }
static void add_tree_node(tcpr_tree_t *newnode) { tcpr_tree_t *node; /* try to find a simular entry in the tree */ node = RB_FIND(tcpr_data_tree_s, &treeroot, newnode); dbgx(3, "%s", tree_printnode("add_tree", node)); /* new entry required */ if (node == NULL) { /* increment counters */ if (newnode->type == DIR_SERVER) { newnode->server_cnt++; } else if (newnode->type == DIR_CLIENT) { newnode->client_cnt++; } /* insert it in */ RB_INSERT(tcpr_data_tree_s, &treeroot, newnode); } else { /* we found something, so update it */ dbgx(2, " node: %p\nnewnode: %p", node, newnode); dbgx(3, "%s", tree_printnode("update node", node)); /* increment counter */ if (newnode->type == DIR_SERVER) { node->server_cnt++; } else if (newnode->type == DIR_CLIENT) { /* temp debug code */ node->client_cnt++; } /* didn't insert it, so free it */ safe_free(newnode); } dbg(2, "------- START NEXT -------"); dbgx(3, "%s", tree_print(&treeroot)); }