mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
parse setup.
git-svn-id: file:///svn/unbound/trunk@236 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
6b90203bce
commit
01fa72378f
2 changed files with 89 additions and 0 deletions
|
|
@ -6,6 +6,7 @@
|
||||||
- set alloc special type to ub_packed_rrset_key.
|
- set alloc special type to ub_packed_rrset_key.
|
||||||
Uses lruhash entry overflow chain next pointer in alloc cache.
|
Uses lruhash entry overflow chain next pointer in alloc cache.
|
||||||
- doxygen documentation for region-allocator.
|
- doxygen documentation for region-allocator.
|
||||||
|
- setup for parse scratch data.
|
||||||
|
|
||||||
5 April 2007: Wouter
|
5 April 2007: Wouter
|
||||||
- discussed packed rrset with Jelte.
|
- discussed packed rrset with Jelte.
|
||||||
|
|
|
||||||
|
|
@ -47,9 +47,97 @@
|
||||||
#include "util/net_help.h"
|
#include "util/net_help.h"
|
||||||
#include "util/data/dname.h"
|
#include "util/data/dname.h"
|
||||||
|
|
||||||
|
struct rrset_parse;
|
||||||
|
struct rr_parse;
|
||||||
|
|
||||||
|
/** number of buckets in parse rrset hash table. */
|
||||||
|
#define PARSE_TABLE_SIZE 1024
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data stored in scratch pad memory during parsing.
|
||||||
|
* Stores the data that will enter into the msgreply and packet result.
|
||||||
|
*/
|
||||||
|
struct msg_parse {
|
||||||
|
/** flags from message, host format. */
|
||||||
|
uint16_t flags;
|
||||||
|
/** count of RRs, host format */
|
||||||
|
uint16_t qdcount;
|
||||||
|
/** count of RRs, host format */
|
||||||
|
uint16_t ancount;
|
||||||
|
/** count of RRs, host format */
|
||||||
|
uint16_t nscount;
|
||||||
|
/** count of RRs, host format */
|
||||||
|
uint16_t arcount;
|
||||||
|
/** count of RRsets per section. */
|
||||||
|
size_t an_rrsets;
|
||||||
|
/** count of RRsets per section. */
|
||||||
|
size_t ns_rrsets;
|
||||||
|
/** count of RRsets per section. */
|
||||||
|
size_t ar_rrsets;
|
||||||
|
/** total number of rrsets found. */
|
||||||
|
size_t rrset_count;
|
||||||
|
|
||||||
|
/** query dname (pointer to start location in packet, NULL if none */
|
||||||
|
uint8_t* qname;
|
||||||
|
/** length of query dname in octets, 0 if none */
|
||||||
|
size_t qname_len;
|
||||||
|
/** query type, network order. 0 if qdcount=0 */
|
||||||
|
uint16_t qtype;
|
||||||
|
/** query class, network order. 0 if qdcount=0 */
|
||||||
|
uint16_t qclass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash table array used during parsing to lookup rrset types.
|
||||||
|
* Based on name, type, class. Same hash value as in rrset cache.
|
||||||
|
*/
|
||||||
|
struct rrset_parse* hashtable[PARSE_TABLE_SIZE];
|
||||||
|
|
||||||
|
/** linked list of rrsets that have been found (in order). */
|
||||||
|
struct rrset_parse* rrset_first;
|
||||||
|
/** last element of rrset list. */
|
||||||
|
struct rrset_parse* rrset_last;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data stored for an rrset during parsing.
|
||||||
|
*/
|
||||||
|
struct rrset_parse {
|
||||||
|
/** next in hash bucket */
|
||||||
|
struct rrset_parse* rrset_bucket_next;
|
||||||
|
/** next in list of all rrsets */
|
||||||
|
struct rrset_parse* rrset_all_next;
|
||||||
|
/** hash value of rrset */
|
||||||
|
hashvalue_t hash;
|
||||||
|
/** start of (possibly compressed) dname in packet */
|
||||||
|
uint8_t* dname;
|
||||||
|
/** type, network order. */
|
||||||
|
uint16_t type;
|
||||||
|
/** class, network order. name so that it is not a c++ keyword. */
|
||||||
|
uint16_t rrset_class;
|
||||||
|
/** linked list of RRs in this rrset. */
|
||||||
|
struct rr_parse* rr_first;
|
||||||
|
/** last in list of RRs in this rrset. */
|
||||||
|
struct rr_parse* rr_last;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data stored for an RR during parsing.
|
||||||
|
*/
|
||||||
|
struct rr_parse {
|
||||||
|
/**
|
||||||
|
* Pointer to the RR. Points to start of TTL value in the packet.
|
||||||
|
* Rdata length and rdata follow it.
|
||||||
|
* its dname, type and class are the same and stored for the rrset.
|
||||||
|
*/
|
||||||
|
uint8_t* ttl_data;
|
||||||
|
/** next in list of RRs. */
|
||||||
|
struct rr_parse* next;
|
||||||
|
};
|
||||||
|
|
||||||
int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
|
int reply_info_parse(ldns_buffer* pkt, struct alloc_cache* alloc,
|
||||||
struct query_info* qinf, struct reply_info** rep)
|
struct query_info* qinf, struct reply_info** rep)
|
||||||
{
|
{
|
||||||
|
/* use scratch pad region-allocator during parsing. */
|
||||||
return LDNS_RCODE_SERVFAIL;
|
return LDNS_RCODE_SERVFAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue