Commit dd54723b authored by Daniel Salzman's avatar Daniel Salzman

pkt: make private parsing functions static

parent c6f4b294
...@@ -561,30 +561,9 @@ int knot_pkt_put_rotate(knot_pkt_t *pkt, uint16_t compr_hint, const knot_rrset_t ...@@ -561,30 +561,9 @@ int knot_pkt_put_rotate(knot_pkt_t *pkt, uint16_t compr_hint, const knot_rrset_t
return KNOT_EOK; return KNOT_EOK;
} }
_public_ static int parse_question(knot_pkt_t *pkt)
int knot_pkt_parse(knot_pkt_t *pkt, unsigned flags)
{
if (pkt == NULL) {
return KNOT_EINVAL;
}
/* Reset parse state. */
sections_reset(pkt);
int ret = knot_pkt_parse_question(pkt);
if (ret == KNOT_EOK) {
ret = knot_pkt_parse_payload(pkt, flags);
}
return ret;
}
_public_
int knot_pkt_parse_question(knot_pkt_t *pkt)
{ {
if (pkt == NULL) { assert(pkt);
return KNOT_EINVAL;
}
/* Check at least header size. */ /* Check at least header size. */
if (pkt->size < KNOT_WIRE_HEADER_SIZE) { if (pkt->size < KNOT_WIRE_HEADER_SIZE) {
...@@ -665,12 +644,9 @@ static int check_rr_constraints(knot_pkt_t *pkt, knot_rrset_t *rr, size_t rr_siz ...@@ -665,12 +644,9 @@ static int check_rr_constraints(knot_pkt_t *pkt, knot_rrset_t *rr, size_t rr_siz
return KNOT_EOK; return KNOT_EOK;
} }
_public_ static int parse_rr(knot_pkt_t *pkt, unsigned flags)
int knot_pkt_parse_rr(knot_pkt_t *pkt, unsigned flags)
{ {
if (pkt == NULL) { assert(pkt);
return KNOT_EINVAL;
}
if (pkt->parsed >= pkt->size) { if (pkt->parsed >= pkt->size) {
return KNOT_EFEWDATA; return KNOT_EFEWDATA;
...@@ -716,7 +692,7 @@ static int parse_section(knot_pkt_t *pkt, unsigned flags) ...@@ -716,7 +692,7 @@ static int parse_section(knot_pkt_t *pkt, unsigned flags)
/* Parse all RRs belonging to the section. */ /* Parse all RRs belonging to the section. */
for (rr_parsed = 0; rr_parsed < rr_count; ++rr_parsed) { for (rr_parsed = 0; rr_parsed < rr_count; ++rr_parsed) {
int ret = knot_pkt_parse_rr(pkt, flags); int ret = parse_rr(pkt, flags);
if (ret != KNOT_EOK) { if (ret != KNOT_EOK) {
return ret; return ret;
} }
...@@ -725,14 +701,10 @@ static int parse_section(knot_pkt_t *pkt, unsigned flags) ...@@ -725,14 +701,10 @@ static int parse_section(knot_pkt_t *pkt, unsigned flags)
return KNOT_EOK; return KNOT_EOK;
} }
_public_ static int parse_payload(knot_pkt_t *pkt, unsigned flags)
int knot_pkt_parse_payload(knot_pkt_t *pkt, unsigned flags)
{ {
if (pkt == NULL) { assert(pkt);
return KNOT_EINVAL; assert(pkt->wire);
}
assert(pkt->wire != NULL);
assert(pkt->size > 0); assert(pkt->size > 0);
/* Reserve memory in advance to avoid resizing. */ /* Reserve memory in advance to avoid resizing. */
...@@ -777,6 +749,24 @@ int knot_pkt_parse_payload(knot_pkt_t *pkt, unsigned flags) ...@@ -777,6 +749,24 @@ int knot_pkt_parse_payload(knot_pkt_t *pkt, unsigned flags)
return KNOT_EOK; return KNOT_EOK;
} }
_public_
int knot_pkt_parse(knot_pkt_t *pkt, unsigned flags)
{
if (pkt == NULL) {
return KNOT_EINVAL;
}
/* Reset parse state. */
sections_reset(pkt);
int ret = parse_question(pkt);
if (ret == KNOT_EOK) {
ret = parse_payload(pkt, flags);
}
return ret;
}
_public_ _public_
uint16_t knot_pkt_ext_rcode(const knot_pkt_t *pkt) uint16_t knot_pkt_ext_rcode(const knot_pkt_t *pkt)
{ {
......
...@@ -292,44 +292,18 @@ static inline uint16_t knot_pkt_rr_offset(const knot_pktsection_t *section, ...@@ -292,44 +292,18 @@ static inline uint16_t knot_pkt_rr_offset(const knot_pktsection_t *section,
* Parses both QUESTION and all packet sections, * Parses both QUESTION and all packet sections,
* includes semantic checks over specific RRs (TSIG, OPT). * includes semantic checks over specific RRs (TSIG, OPT).
* *
* \note For KNOT_PF_KEEPWIRE see note for \fn knot_pkt_parse_rr * \note If KNOT_PF_KEEPWIRE is set, TSIG RR is not stripped from the wire
* and is processed as any other RR.
*
* \param pkt Given packet.
* \param flags Parsing flags (allowed KNOT_PF_KEEPWIRE)
* *
* \param pkt Given packet.
* \param flags Parsing flags (allowed KNOT_PF_KEEPWIRE)
* \retval KNOT_EOK if success. * \retval KNOT_EOK if success.
* \retval KNOT_ETRAIL if success but with some trailing data. * \retval KNOT_ETRAIL if success but with some trailing data.
* \retval KNOT_EMALF and other errors. * \retval KNOT_EMALF and other errors.
*/ */
int knot_pkt_parse(knot_pkt_t *pkt, unsigned flags); int knot_pkt_parse(knot_pkt_t *pkt, unsigned flags);
/*!
* \brief Parse packet header and a QUESTION section.
*/
int knot_pkt_parse_question(knot_pkt_t *pkt);
/*!
* \brief Parse single resource record.
*
* \note When KNOT_PF_KEEPWIRE is set, TSIG RR is not stripped from the wire
* and is processed as any other RR.
*
* \param pkt
* \param flags
* \return KNOT_EOK, KNOT_EFEWDATA if not enough data or various errors
*/
int knot_pkt_parse_rr(knot_pkt_t *pkt, unsigned flags);
/*!
* \brief Parse whole packet payload.
*
* \note For KNOT_PF_KEEPWIRE see note for \fn knot_pkt_parse_rr
*
* \param pkt
* \param flags
* \return KNOT_EOK, KNOT_EFEWDATA if not enough data or various errors
*/
int knot_pkt_parse_payload(knot_pkt_t *pkt, unsigned flags);
/*! /*!
* \brief Get packet extended RCODE. * \brief Get packet extended RCODE.
* *
......
...@@ -17,11 +17,7 @@ ...@@ -17,11 +17,7 @@
#include <tap/basic.h> #include <tap/basic.h>
#include "libknot/libknot.h" #include "libknot/libknot.h"
#include "libknot/descriptor.h" #include "libknot/packet/pkt.c"
#include "libknot/libknot.h"
#include "libknot/packet/pkt.h"
#include "libknot/rrtype/tsig.h"
#include "contrib/mempattern.h"
#include "contrib/ucw/mempool.h" #include "contrib/ucw/mempool.h"
#define TTL 7200 #define TTL 7200
...@@ -167,11 +163,11 @@ int main(int argc, char *argv[]) ...@@ -167,11 +163,11 @@ int main(int argc, char *argv[])
ok(in != NULL, "pkt: create packet for parsing"); ok(in != NULL, "pkt: create packet for parsing");
/* Read packet header. */ /* Read packet header. */
ret = knot_pkt_parse_question(in); ret = parse_question(in);
is_int(KNOT_EOK, ret, "pkt: read header"); is_int(KNOT_EOK, ret, "pkt: read header");
/* Read packet payload. */ /* Read packet payload. */
ret = knot_pkt_parse_payload(in, 0); ret = parse_payload(in, 0);
is_int(KNOT_EOK, ret, "pkt: read payload"); is_int(KNOT_EOK, ret, "pkt: read payload");
/* Compare parsed packet to written packet. */ /* Compare parsed packet to written packet. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment