int sock_list_find(struct sock_list* list, struct sockaddr_storage* addr, socklen_t len) { while(list) { if(len == list->len) { if(len == 0 || sockaddr_cmp_addr(addr, len, &list->addr, list->len) == 0) return 1; } list = list->next; } return 0; }
struct delegpt_addr* delegpt_find_addr(struct delegpt* dp, struct sockaddr_storage* addr, socklen_t addrlen) { struct delegpt_addr* p = dp->target_list; while(p) { if(sockaddr_cmp_addr(addr, addrlen, &p->addr, p->addrlen)==0) { return p; } p = p->next_target; } return NULL; }
int addr_tree_compare(const void* k1, const void* k2) { struct addr_tree_node* n1 = (struct addr_tree_node*)k1; struct addr_tree_node* n2 = (struct addr_tree_node*)k2; int r = sockaddr_cmp_addr(&n1->addr, n1->addrlen, &n2->addr, n2->addrlen); if(r != 0) return r; if(n1->net < n2->net) return -1; if(n1->net > n2->net) return 1; return 0; }