From 3f92744a6807c181a0f9588514aeeca090b9dd4c Mon Sep 17 00:00:00 2001 From: Lubos Slovak <lubos.slovak@nic.cz> Date: Sun, 2 Sep 2012 09:03:42 +0200 Subject: [PATCH] Enabled UPDATE processing. refs #937 @30m --- src/knot/server/tcp-handler.c | 10 ++++++---- src/knot/server/udp-handler.c | 11 ++++++----- src/knot/server/zones.c | 2 +- src/knot/server/zones.h | 8 ++++++++ src/libknot/nameserver/name-server.c | 2 +- src/libknot/nameserver/name-server.h | 2 +- src/libknot/packet/packet.c | 4 ++-- src/libknot/packet/packet.h | 4 ++-- src/libknot/updates/ddns.c | 6 +++--- src/libknot/updates/ddns.h | 8 ++++---- 10 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/knot/server/tcp-handler.c b/src/knot/server/tcp-handler.c index 60f4301121..d299bb4c37 100644 --- a/src/knot/server/tcp-handler.c +++ b/src/knot/server/tcp-handler.c @@ -252,10 +252,12 @@ static int tcp_handle(tcp_worker_t *w, int fd, uint8_t *qbuf, size_t qbuf_maxlen return xfr_answer(ns, &xfr); case KNOT_QUERY_UPDATE: - knot_ns_error_response_from_query(ns, packet, - KNOT_RCODE_NOTIMPL, - qbuf, &resp_len); - res = KNOTD_EOK; +// knot_ns_error_response_from_query(ns, packet, +// KNOT_RCODE_NOTIMPL, +// qbuf, &resp_len); + res = zones_process_update(ns, packet, &addr, qbuf, &resp_len, + NS_TRANSPORT_UDP); +// res = KNOTD_EOK; break; case KNOT_QUERY_NOTIFY: diff --git a/src/knot/server/udp-handler.c b/src/knot/server/udp-handler.c index fc4e9b1d7e..d6b995c4cb 100644 --- a/src/knot/server/udp-handler.c +++ b/src/knot/server/udp-handler.c @@ -164,11 +164,12 @@ int udp_handle(int fd, uint8_t *qbuf, size_t qbuflen, size_t *resp_len, break; case KNOT_QUERY_UPDATE: - dbg_net("udp: UPDATE query on fd=%d not implemented\n", fd); - knot_ns_error_response_from_query(ns, packet, - KNOT_RCODE_NOTIMPL, qbuf, - resp_len); - res = KNOTD_EOK; +// dbg_net("udp: UPDATE query on fd=%d not implemented\n", fd); +// knot_ns_error_response_from_query(ns, packet, +// KNOT_RCODE_NOTIMPL, qbuf, +// resp_len); + res = zones_process_update(ns, packet, addr, qbuf, resp_len, + NS_TRANSPORT_UDP); break; /* Unhandled opcodes. */ diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c index 2c6fec2ff5..02e64f9d5b 100644 --- a/src/knot/server/zones.c +++ b/src/knot/server/zones.c @@ -2795,7 +2795,7 @@ int zones_process_update(knot_nameserver_t *nameserver, knot_packet_free(&resp); rcu_read_unlock(); - return KNOT_EOK; + return KNOTD_EOK; } /*----------------------------------------------------------------------------*/ diff --git a/src/knot/server/zones.h b/src/knot/server/zones.h index e46d2f6196..41ce0232ea 100644 --- a/src/knot/server/zones.h +++ b/src/knot/server/zones.h @@ -154,6 +154,14 @@ int zones_normal_query_answer(knot_nameserver_t *nameserver, uint8_t *response_wire, size_t *rsize, knot_ns_transport_t transport); +/*! + * \todo Document me. + */ +int zones_process_update(knot_nameserver_t *nameserver, + knot_packet_t *query, const sockaddr_t *addr, + uint8_t *resp_wire, size_t *rsize, + knot_ns_transport_t transport); + /*! * \brief Processes normal response packet. * diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c index e56d1f3751..3abd018589 100644 --- a/src/libknot/nameserver/name-server.c +++ b/src/libknot/nameserver/name-server.c @@ -4213,7 +4213,7 @@ int knot_ns_process_ixfrin(knot_nameserver_t *nameserver, * This function should process the contents, prepare prerequisities, prepare * changeset and return to the caller. */ -int knot_ns_process_update(knot_packet_t *query, +int knot_ns_process_update(const knot_packet_t *query, const knot_zone_contents_t *zone, knot_changeset_t *changeset, knot_rcode_t *rcode) { diff --git a/src/libknot/nameserver/name-server.h b/src/libknot/nameserver/name-server.h index 939975a5dc..7bddc0badf 100644 --- a/src/libknot/nameserver/name-server.h +++ b/src/libknot/nameserver/name-server.h @@ -344,7 +344,7 @@ int knot_ns_switch_zone(knot_nameserver_t *nameserver, int knot_ns_process_ixfrin(knot_nameserver_t *nameserver, knot_ns_xfr_t *xfr); -int knot_ns_process_update(knot_packet_t *query, +int knot_ns_process_update(const knot_packet_t *query, const knot_zone_contents_t *zone, knot_changeset_t *changeset, knot_rcode_t *rcode); diff --git a/src/libknot/packet/packet.c b/src/libknot/packet/packet.c index 6c7fd020d5..4eee3fc1fe 100644 --- a/src/libknot/packet/packet.c +++ b/src/libknot/packet/packet.c @@ -1254,7 +1254,7 @@ const knot_rrset_t *knot_packet_answer_rrset( /*----------------------------------------------------------------------------*/ const knot_rrset_t *knot_packet_authority_rrset( - knot_packet_t *packet, short pos) + const knot_packet_t *packet, short pos) { if (packet == NULL || pos > packet->ns_rrsets) { return NULL; @@ -1266,7 +1266,7 @@ const knot_rrset_t *knot_packet_authority_rrset( /*----------------------------------------------------------------------------*/ const knot_rrset_t *knot_packet_additional_rrset( - knot_packet_t *packet, short pos) + const knot_packet_t *packet, short pos) { if (packet == NULL || pos > packet->ar_rrsets) { return NULL; diff --git a/src/libknot/packet/packet.h b/src/libknot/packet/packet.h index d76209af5d..e494e2317d 100644 --- a/src/libknot/packet/packet.h +++ b/src/libknot/packet/packet.h @@ -445,7 +445,7 @@ const knot_rrset_t *knot_packet_answer_rrset( * or NULL if there is no such RRSet. */ const knot_rrset_t *knot_packet_authority_rrset( - knot_packet_t *packet, short pos); + const knot_packet_t *packet, short pos); /*! * \brief Returns the requested Additional RRset. @@ -459,7 +459,7 @@ const knot_rrset_t *knot_packet_authority_rrset( * or NULL if there is no such RRSet. */ const knot_rrset_t *knot_packet_additional_rrset( - knot_packet_t *packet, short pos); + const knot_packet_t *packet, short pos); /*! * \brief Checks if the packet already contains the given RRSet. diff --git a/src/libknot/updates/ddns.c b/src/libknot/updates/ddns.c index 2566045531..73b213d45f 100644 --- a/src/libknot/updates/ddns.c +++ b/src/libknot/updates/ddns.c @@ -411,7 +411,7 @@ static int knot_ddns_check_not_in_use(const knot_zone_contents_t *zone, /*----------------------------------------------------------------------------*/ int knot_ddns_check_zone(const knot_zone_contents_t *zone, - knot_packet_t *query, knot_rcode_t *rcode) + const knot_packet_t *query, knot_rcode_t *rcode) { if (zone == NULL || query == NULL || rcode == NULL) { return KNOT_EBADARG; @@ -434,7 +434,7 @@ int knot_ddns_check_zone(const knot_zone_contents_t *zone, /*----------------------------------------------------------------------------*/ -int knot_ddns_process_prereqs(knot_packet_t *query, +int knot_ddns_process_prereqs(const knot_packet_t *query, knot_ddns_prereq_t **prereqs, knot_rcode_t *rcode) { /*! \todo Consider not parsing the whole packet at once, but @@ -561,7 +561,7 @@ static int knot_ddns_check_update(const knot_rrset_t *rrset, /*----------------------------------------------------------------------------*/ -int knot_ddns_process_update(knot_packet_t *query, +int knot_ddns_process_update(const knot_packet_t *query, knot_changeset_t *changeset, knot_rcode_t *rcode) { // just put all RRSets from query's Authority section diff --git a/src/libknot/updates/ddns.h b/src/libknot/updates/ddns.h index 030525548f..6b4400f253 100644 --- a/src/libknot/updates/ddns.h +++ b/src/libknot/updates/ddns.h @@ -56,16 +56,16 @@ typedef struct knot_ddns_prereq_t { size_t not_in_use_allocd; } knot_ddns_prereq_t; -int knot_ddns_check_zone(const knot_zone_contents_t *zone, knot_packet_t *query, - knot_rcode_t *rcode); +int knot_ddns_check_zone(const knot_zone_contents_t *zone, + const knot_packet_t *query, knot_rcode_t *rcode); -int knot_ddns_process_prereqs(knot_packet_t *query, +int knot_ddns_process_prereqs(const knot_packet_t *query, knot_ddns_prereq_t **prereqs, knot_rcode_t *rcode); int knot_ddns_check_prereqs(const knot_zone_contents_t *zone, knot_ddns_prereq_t **prereqs, knot_rcode_t *rcode); -int knot_ddns_process_update(knot_packet_t *query, +int knot_ddns_process_update(const knot_packet_t *query, knot_changeset_t *changeset, knot_rcode_t *rcode); void knot_ddns_prereqs_free(knot_ddns_prereq_t **prereq); -- GitLab