/* load raw hash table's data into holder */ void load_data_to_holder (GRawData * raw_data, GHolder * h, GModule module, GSort sort) { char *data; int hits, i; int size = 0;; unsigned long long bw = 0; size = raw_data->size; h->holder_size = size > MAX_CHOICES ? MAX_CHOICES : size; h->idx = 0; h->module = module; h->sub_items_size = 0; h->items = new_gholder_item (h->holder_size); for (i = 0; i < h->holder_size; i++) { bw = raw_data->items[i].bw; data = raw_data->items[i].data; hits = raw_data->items[i].hits; switch (module) { case OS: case BROWSERS: add_os_browser_node (h, hits, data, bw); break; case HOSTS: add_host_node (h, hits, data, bw, raw_data->items[i].usecs); break; case STATUS_CODES: add_status_code_node (h, hits, data, bw); break; default: h->items[h->idx].bw = bw; h->items[h->idx].data = xstrdup (data); h->items[h->idx].hits = hits; if (conf.serve_usecs) h->items[h->idx].usecs = raw_data->items[i].usecs; h->idx++; } } sort_holder_items (h->items, h->idx, sort); /* HOSTS module does not have "real" sub items, thus we don't include it */ if (module == OS || module == BROWSERS || module == STATUS_CODES) sort_sub_list (h, sort); free_raw_data (raw_data); }
char * proxy_resolve_host(const char *host, char *addr, size_t size) { NMP_ASSERT(host && addr && !strlen(addr)); if (!find_host_node_by_host(hlist_manager, host, addr, size)) { proxy_host_t *node; node = (proxy_host_t*)nmp_new0(proxy_host_t, 1); node->lock = nmp_mutex_new(); node->state = HOST_INVALID; node->state_timer = MAX_HOST_IN_VALID_TIME; node->resolve_times = 0; strncpy(node->host, host, sizeof(node->host)-1); add_host_node(node); return NULL; } if (strlen(addr)) return addr; else return NULL; }