void network_init(struct network *net, uv_loop_t *loop) { if (net != NULL) { /* No multiplexing now, I/O in single thread. */ net->loop = loop; net->endpoints = map_make(); } }
static int validate_section(kr_rrset_validation_ctx_t *vctx, knot_mm_t *pool) { if (!vctx) { return kr_error(EINVAL); } const knot_pktsection_t *sec = knot_pkt_section(vctx->pkt, vctx->section_id); if (!sec) { return kr_ok(); } int ret = kr_ok(); map_t stash = map_make(); stash.malloc = (map_alloc_f) mm_alloc; stash.free = (map_free_f) mm_free; stash.baton = pool; /* Determine RR types contained in the section. */ for (unsigned i = 0; i < sec->count; ++i) { const knot_rrset_t *rr = knot_pkt_rr(sec, i); if (rr->type == KNOT_RRTYPE_RRSIG) { continue; } if ((rr->type == KNOT_RRTYPE_NS) && (vctx->section_id == KNOT_AUTHORITY)) { continue; } /* Only validate answers from current cut, records above the cut are stripped. */ if (!knot_dname_in(vctx->zone_name, rr->owner)) { continue; } ret = kr_rrmap_add(&stash, rr, 0, pool); if (ret != 0) { goto fail; } } /* Can't use qry->zone_cut.name directly, as this name can * change when updating cut information before validation. */ vctx->zone_name = vctx->keys ? vctx->keys->owner : NULL; ret = map_walk(&stash, &validate_rrset, vctx); if (ret != 0) { return ret; } ret = vctx->result; fail: return ret; }
static int init_resolver(struct engine *engine) { /* Open resolution context */ engine->resolver.trust_anchors = map_make(); engine->resolver.negative_anchors = map_make(); engine->resolver.pool = engine->pool; engine->resolver.modules = &engine->modules; /* Create OPT RR */ engine->resolver.opt_rr = mm_alloc(engine->pool, sizeof(knot_rrset_t)); if (!engine->resolver.opt_rr) { return kr_error(ENOMEM); } knot_edns_init(engine->resolver.opt_rr, KR_EDNS_PAYLOAD, 0, KR_EDNS_VERSION, engine->pool); /* Set default root hints */ kr_zonecut_init(&engine->resolver.root_hints, (const uint8_t *)"", engine->pool); kr_zonecut_set_sbelt(&engine->resolver, &engine->resolver.root_hints); /* Open NS rtt + reputation cache */ engine->resolver.cache_rtt = mm_alloc(engine->pool, lru_size(kr_nsrep_lru_t, LRU_RTT_SIZE)); if (engine->resolver.cache_rtt) { lru_init(engine->resolver.cache_rtt, LRU_RTT_SIZE); } engine->resolver.cache_rep = mm_alloc(engine->pool, lru_size(kr_nsrep_lru_t, LRU_REP_SIZE)); if (engine->resolver.cache_rep) { lru_init(engine->resolver.cache_rep, LRU_REP_SIZE); } /* Load basic modules */ engine_register(engine, "iterate", NULL, NULL); engine_register(engine, "validate", NULL, NULL); engine_register(engine, "rrcache", NULL, NULL); engine_register(engine, "pktcache", NULL, NULL); /* Initialize storage backends */ struct storage_api lmdb = { "lmdb://", knot_db_lmdb_api, knot_db_lmdb_mkopts }; return array_push(engine->storage_registry, lmdb); }
void test_map() { map *m = map_make(); m->hash = sdbmHash; m->copyKey = copyKey; m->compare = compareKey; char *test[] = { "asd", "bsddj", "csdf", "dsdf", "esdafasd", "fasdf", "gsadf", "gs", "f**k", "safsd", "sadfasd", "asddfasdf", "asdfasdf", "sadfe", "asdfasd", "erer", "rtert", "asdf", "4erwerw", "sawe23", }; int a[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23}; int i = 0; for (; i < 200; i++) { map_set(m, test[i % 17], a + i % 17); } printf("Over\n"); for (i = 0; i < 200; i++) { bucket* val = map_get(m, test[i % 17]); if (val == NULL) { printf("not found"); } else { // printf(" %p %s %d\n", val,(char*)val->key, *((int*)(val->val))); } } map_print(m); }