From: Marek VavruĊĦa Date: Tue, 19 Aug 2014 17:09:32 +0000 (+0200) Subject: delegpt: slight api change, preparations X-Git-Tag: v1.0.0-beta1~428 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fefcf851670820de57472b6499760b2f29fd31ee;p=thirdparty%2Fknot-resolver.git delegpt: slight api change, preparations --- diff --git a/daemon/layer/query.c b/daemon/layer/query.c index a605a9860..88be165a9 100644 --- a/daemon/layer/query.c +++ b/daemon/layer/query.c @@ -29,13 +29,11 @@ static int input_query(knot_layer_t *ctx, knot_pkt_t *pkt) /* Check if at least header is parsed. */ if (pkt->parsed < pkt->size) { - knot_pkt_free(&pkt); return NS_PROC_FAIL; } /* Accept only queries. */ if (knot_wire_get_qr(pkt->wire)) { - knot_pkt_free(&pkt); return NS_PROC_NOOP; /* Ignore. */ } @@ -49,9 +47,6 @@ static int input_query(knot_layer_t *ctx, knot_pkt_t *pkt) knot_pkt_t *answer = param->result->ans; knot_wire_set_id(answer->wire, knot_wire_get_id(pkt->wire)); - /* Free query and finish. */ - knot_pkt_free(&pkt); - if (ret != 0) { return NS_PROC_FAIL; } else { diff --git a/daemon/worker.c b/daemon/worker.c index 7141b1873..9a01ddeeb 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -47,18 +47,22 @@ static void worker_recv(uv_udp_t *handle, ssize_t nread, const uv_buf_t *buf, knot_layer_t proc; memset(&proc, 0, sizeof(knot_layer_t)); proc.mm = ctx->pool; - knot_process_begin(&proc, LAYER_QUERY, ¶m); - int state = knot_process_in(&proc, (uint8_t *)buf->base, nread); + knot_layer_begin(&proc, LAYER_QUERY, ¶m); + + knot_pkt_t *query = knot_pkt_new((uint8_t *)buf->base, nread, ctx->pool); + knot_pkt_parse(query, 0); + int state = knot_layer_in(&proc, query); if (state & (NS_PROC_DONE|NS_PROC_FAIL)) { worker_send(handle, result.ans, addr); } /* Cleanup. */ - knot_process_finish(&proc); + knot_layer_finish(&proc); kr_result_deinit(&result); kr_context_reset(&ctx->resolve); buf_free((uv_handle_t *)handle, buf); + knot_pkt_free(&query); } void worker_init(struct worker_ctx *worker, mm_ctx_t *mm) diff --git a/lib/delegpt.c b/lib/delegpt.c index 16616fca2..a5a93edb6 100644 --- a/lib/delegpt.c +++ b/lib/delegpt.c @@ -1,7 +1,7 @@ #include "lib/delegpt.h" #include -static void delegpt_free(struct kr_delegpt *dp, mm_ctx_t *mm) +static void delegpt_free(struct kr_ns *dp, mm_ctx_t *mm) { mm_free(mm, dp->name); mm_free(mm, dp); @@ -70,22 +70,27 @@ list_t *kr_delegmap_find(struct kr_delegmap *map, const knot_dname_t *name) return *val; } -struct kr_delegpt *kr_delegpt_create(const knot_dname_t *name, mm_ctx_t *mm) +struct kr_ns *kr_ns_create(const knot_dname_t *name, mm_ctx_t *mm) { - struct kr_delegpt *dp = mm_alloc(mm, sizeof(struct kr_delegpt)); - memset(dp, 0, sizeof(struct kr_delegpt)); - dp->name = knot_dname_copy(name, mm); - dp->flags = DP_LAME; - return dp; + struct kr_ns *ns = mm_alloc(mm, sizeof(struct kr_ns)); + memset(ns, 0, sizeof(struct kr_ns)); + ns->name = knot_dname_copy(name, mm); + ns->flags = DP_LAME; + return ns; } -void kr_delegpt_add(list_t *list, struct kr_delegpt *dp) +void kr_ns_append(list_t *list, struct kr_ns *ns) { - add_tail(list, (node_t *)dp); + add_tail(list, (node_t *)ns); } -void kr_delegpt_remove(struct kr_delegpt *dp, mm_ctx_t *mm) +void kr_ns_remove(struct kr_ns *ns, mm_ctx_t *mm) { - rem_node((node_t *)dp); - delegpt_free(dp, mm); + rem_node((node_t *)ns); + delegpt_free(ns, mm); +} + +int kr_ns_resolve(struct kr_ns *ns) +{ + return -1; } diff --git a/lib/delegpt.h b/lib/delegpt.h index 7e0ee1947..d0e8371cb 100644 --- a/lib/delegpt.h +++ b/lib/delegpt.h @@ -22,16 +22,16 @@ limitations under the License. #include #include -/*! \brief Delegation point flag. */ -enum kr_deleg_flag { +/*! \brief Name server flag. */ +enum kr_ns_flag { DP_LAME = 0, DP_RESOLVED }; struct kr_context; -/*! \brief Delegation point. */ -struct kr_delegpt { +/*! \brief Name server. */ +struct kr_ns { node_t node; knot_dname_t *name; struct sockaddr_storage addr; @@ -55,7 +55,7 @@ list_t *kr_delegmap_find(struct kr_delegmap *map, const knot_dname_t *name); * choose next and move DPs from the other half for next sweep. */ -struct kr_delegpt *kr_delegpt_create(const knot_dname_t *name, mm_ctx_t *mm); -void kr_delegpt_add(list_t *list, struct kr_delegpt *dp); -void kr_delegpt_remove(struct kr_delegpt *dp, mm_ctx_t *mm); -int kr_delegpt_resolve(struct kr_delegpt *dp); +struct kr_ns *kr_ns_create(const knot_dname_t *name, mm_ctx_t *mm); +void kr_ns_append(list_t *list, struct kr_ns *ns); +void kr_ns_remove(struct kr_ns *ns, mm_ctx_t *mm); +int kr_ns_resolve(struct kr_ns *ns); diff --git a/lib/layer.h b/lib/layer.h index ba4e87406..c1ec9d194 100644 --- a/lib/layer.h +++ b/lib/layer.h @@ -15,7 +15,7 @@ limitations under the License. #pragma once -#include +#include #include "lib/context.h" /*! diff --git a/lib/layer/iterate.c b/lib/layer/iterate.c index 9772db7d6..1d8108c4f 100644 --- a/lib/layer/iterate.c +++ b/lib/layer/iterate.c @@ -67,7 +67,7 @@ static int evaluate_dp(const knot_rrset_t *dp, knot_pkt_t *pkt, struct kr_layer_ } const knot_dname_t *dp_name = knot_ns_name(&dp->rrs, 0); - struct kr_delegpt *ns_new = kr_delegpt_create(dp_name, resolve->dp_map.pool); + struct kr_ns *ns_new = kr_ns_create(dp_name, resolve->dp_map.pool); /* Check if there's a glue for the record. */ int ret = glue_record(pkt, dp_name, (struct sockaddr *)&ns_new->addr); @@ -75,13 +75,13 @@ static int evaluate_dp(const knot_rrset_t *dp, knot_pkt_t *pkt, struct kr_layer_ /* TODO: API for duplicates? */ ns_new->flags |= DP_LAME; /* TODO: resolve. */ - kr_delegpt_add(dplist, ns_new); + kr_ns_append(dplist, ns_new); return -1; } /* Add name server. */ ns_new->flags |= DP_RESOLVED; - kr_delegpt_add(dplist, ns_new); + kr_ns_append(dplist, ns_new); return 0; } diff --git a/lib/layer/static.c b/lib/layer/static.c index aace36830..5e385dd0d 100644 --- a/lib/layer/static.c +++ b/lib/layer/static.c @@ -62,11 +62,11 @@ static int begin(knot_layer_t *ctx, void *param) /* Initialize static root hints. */ for (unsigned i = 0; i < HINT_COUNT; ++i) { - struct kr_delegpt *ns = kr_delegpt_create(SBELT[i].name, resolve->dp_map.pool); + struct kr_ns *ns = kr_ns_create(SBELT[i].name, resolve->dp_map.pool); if (ns != NULL) { sockaddr_set(&ns->addr, AF_INET, SBELT[i].addr, 53); ns->flags |= DP_RESOLVED; - kr_delegpt_add(dp, ns); + kr_ns_append(dp, ns); } } diff --git a/lib/resolve.c b/lib/resolve.c index 7865d18dc..5d877188f 100644 --- a/lib/resolve.c +++ b/lib/resolve.c @@ -44,7 +44,7 @@ static void iterate(struct knot_requestor *requestor, struct kr_context* ctx) return; } - struct kr_delegpt *ns = NULL; + struct kr_ns *ns = NULL; WALK_LIST(ns, *dp) { if (ns->flags & DP_RESOLVED) { break;