|
Electroneum
|


Go to the source code of this file.
Classes | |
| struct | query_info |
| struct | rrset_ref |
| struct | reply_info |
| struct | msgreply_entry |
Macros | |
| #define | PREFETCH_TTL_CALC(ttl) ((ttl) - (ttl)/10) |
Functions | |
| struct reply_info * | construct_reply_info_base (struct regional *region, uint16_t flags, size_t qd, time_t ttl, time_t prettl, size_t an, size_t ns, size_t ar, size_t total, enum sec_status sec) |
| int | query_info_parse (struct query_info *m, struct sldns_buffer *query) |
| int | reply_info_parse (struct sldns_buffer *pkt, struct alloc_cache *alloc, struct query_info *qinf, struct reply_info **rep, struct regional *region, struct edns_data *edns) |
| int | parse_create_msg (struct sldns_buffer *pkt, struct msg_parse *msg, struct alloc_cache *alloc, struct query_info *qinf, struct reply_info **rep, struct regional *region) |
| struct reply_info * | parse_reply_in_temp_region (struct sldns_buffer *pkt, struct regional *region, struct query_info *qi) |
| void | reply_info_sortref (struct reply_info *rep) |
| void | reply_info_set_ttls (struct reply_info *rep, time_t timenow) |
| void | reply_info_parsedelete (struct reply_info *rep, struct alloc_cache *alloc) |
| int | query_info_compare (void *m1, void *m2) |
| void | query_info_clear (struct query_info *m) |
| size_t | msgreply_sizefunc (void *k, void *d) |
| void | query_entry_delete (void *q, void *arg) |
| void | reply_info_delete (void *d, void *arg) |
| hashvalue_type | query_info_hash (struct query_info *q, uint16_t flags) |
| struct msgreply_entry * | query_info_entrysetup (struct query_info *q, struct reply_info *r, hashvalue_type h) |
| struct reply_info * | reply_info_copy (struct reply_info *rep, struct alloc_cache *alloc, struct regional *region) |
| int | reply_info_alloc_rrset_keys (struct reply_info *rep, struct alloc_cache *alloc, struct regional *region) |
| int | parse_copy_decompress_rrset (struct sldns_buffer *pkt, struct msg_parse *msg, struct rrset_parse *pset, struct regional *region, struct ub_packed_rrset_key *pk) |
| uint8_t * | reply_find_final_cname_target (struct query_info *qinfo, struct reply_info *rep) |
| int | reply_check_cname_chain (struct query_info *qinfo, struct reply_info *rep) |
| int | reply_all_rrsets_secure (struct reply_info *rep) |
| struct ub_packed_rrset_key * | reply_find_answer_rrset (struct query_info *qinfo, struct reply_info *rep) |
| struct ub_packed_rrset_key * | reply_find_rrset_section_an (struct reply_info *rep, uint8_t *name, size_t namelen, uint16_t type, uint16_t dclass) |
| struct ub_packed_rrset_key * | reply_find_rrset_section_ns (struct reply_info *rep, uint8_t *name, size_t namelen, uint16_t type, uint16_t dclass) |
| struct ub_packed_rrset_key * | reply_find_rrset (struct reply_info *rep, uint8_t *name, size_t namelen, uint16_t type, uint16_t dclass) |
| void | log_dns_msg (const char *str, struct query_info *qinfo, struct reply_info *rep) |
| void | log_reply_info (enum verbosity_value v, struct query_info *qinf, struct sockaddr_storage *addr, socklen_t addrlen, struct timeval dur, int cached, struct sldns_buffer *rmsg) |
| void | log_query_info (enum verbosity_value v, const char *str, struct query_info *qinf) |
| int | edns_opt_append (struct edns_data *edns, struct regional *region, uint16_t code, size_t len, uint8_t *data) |
| int | edns_opt_list_append (struct edns_option **list, uint16_t code, size_t len, uint8_t *data, struct regional *region) |
| int | edns_opt_list_remove (struct edns_option **list, uint16_t code) |
| struct edns_option * | edns_opt_list_find (struct edns_option *list, uint16_t code) |
| int | inplace_cb_reply_call (struct module_env *env, struct query_info *qinfo, struct module_qstate *qstate, struct reply_info *rep, int rcode, struct edns_data *edns, struct regional *region) |
| int | inplace_cb_reply_cache_call (struct module_env *env, struct query_info *qinfo, struct module_qstate *qstate, struct reply_info *rep, int rcode, struct edns_data *edns, struct regional *region) |
| int | inplace_cb_reply_local_call (struct module_env *env, struct query_info *qinfo, struct module_qstate *qstate, struct reply_info *rep, int rcode, struct edns_data *edns, struct regional *region) |
| int | inplace_cb_reply_servfail_call (struct module_env *env, struct query_info *qinfo, struct module_qstate *qstate, struct reply_info *rep, int rcode, struct edns_data *edns, struct regional *region) |
| int | inplace_cb_query_call (struct module_env *env, struct query_info *qinfo, uint16_t flags, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *zone, size_t zonelen, struct module_qstate *qstate, struct regional *region) |
| int | inplace_cb_edns_back_parsed_call (struct module_env *env, struct module_qstate *qstate) |
| int | inplace_cb_query_response_call (struct module_env *env, struct module_qstate *qstate, struct dns_msg *response) |
| struct edns_option * | edns_opt_copy_region (struct edns_option *list, struct regional *region) |
| struct edns_option * | edns_opt_copy_alloc (struct edns_option *list) |
| void | edns_opt_list_free (struct edns_option *list) |
| int | edns_opt_compare (struct edns_option *p, struct edns_option *q) |
| int | edns_opt_list_compare (struct edns_option *p, struct edns_option *q) |
This file contains a data structure to store a message and its reply.
Definition in file msgreply.h.
| #define PREFETCH_TTL_CALC | ( | ttl | ) | ((ttl) - (ttl)/10) |
calculate the prefetch TTL as 90% of original. Calculation without numerical overflow (uin32_t)
Definition at line 63 of file msgreply.h.
| struct reply_info* construct_reply_info_base | ( | struct regional * | region, |
| uint16_t | flags, | ||
| size_t | qd, | ||
| time_t | ttl, | ||
| time_t | prettl, | ||
| size_t | an, | ||
| size_t | ns, | ||
| size_t | ar, | ||
| size_t | total, | ||
| enum sec_status | sec | ||
| ) |
Constructor for replyinfo.
| region | where to allocate the results, pass NULL to use malloc. |
| flags | flags for the replyinfo. |
| qd | qd count |
| ttl | TTL of replyinfo |
| prettl | prefetch ttl |
| an | an count |
| ns | ns count |
| ar | ar count |
| total | total rrset count (presumably an+ns+ar). |
| sec | security status of the reply info. |
| int edns_opt_append | ( | struct edns_data * | edns, |
| struct regional * | region, | ||
| uint16_t | code, | ||
| size_t | len, | ||
| uint8_t * | data | ||
| ) |
Append edns option to edns data structure
| edns | the edns data structure to append the edns option to. |
| region | region to allocate the new edns option. |
| code | the edns option's code. |
| len | the edns option's length. |
| data | the edns option's data. |
| int edns_opt_compare | ( | struct edns_option * | p, |
| struct edns_option * | q | ||
| ) |
Compare an edns option. (not entire list). Also compares contents.
| struct edns_option* edns_opt_copy_alloc | ( | struct edns_option * | list | ) |
Copy edns option list allocated with malloc
| struct edns_option* edns_opt_copy_region | ( | struct edns_option * | list, |
| struct regional * | region | ||
| ) |
Copy edns option list allocated to the new region
| int edns_opt_list_append | ( | struct edns_option ** | list, |
| uint16_t | code, | ||
| size_t | len, | ||
| uint8_t * | data, | ||
| struct regional * | region | ||
| ) |
Append edns option to edns option list
| list | the edns option list to append the edns option to. |
| code | the edns option's code. |
| len | the edns option's length. |
| data | the edns option's data. |
| region | region to allocate the new edns option. |
| int edns_opt_list_compare | ( | struct edns_option * | p, |
| struct edns_option * | q | ||
| ) |
Compare edns option lists, also the order and contents of edns-options.
| struct edns_option* edns_opt_list_find | ( | struct edns_option * | list, |
| uint16_t | code | ||
| ) |
Find edns option in edns list
| list | list of edns options (eg. edns.opt_list) |
| code | opt code to find. |
| void edns_opt_list_free | ( | struct edns_option * | list | ) |
Free edns option list allocated with malloc
| int edns_opt_list_remove | ( | struct edns_option ** | list, |
| uint16_t | code | ||
| ) |
Remove any option found on the edns option list that matches the code.
| list | the list of edns options. |
| code | the opt code to remove. |
| int inplace_cb_edns_back_parsed_call | ( | struct module_env * | env, |
| struct module_qstate * | qstate | ||
| ) |
Call the registered functions in the inplace_cb_edns_back_parsed linked list. This function is going to get called after parsing the EDNS data on the reply from a nameserver.
| env | module environment. |
| qstate | module qstate. |
| int inplace_cb_query_call | ( | struct module_env * | env, |
| struct query_info * | qinfo, | ||
| uint16_t | flags, | ||
| struct sockaddr_storage * | addr, | ||
| socklen_t | addrlen, | ||
| uint8_t * | zone, | ||
| size_t | zonelen, | ||
| struct module_qstate * | qstate, | ||
| struct regional * | region | ||
| ) |
Call the registered functions in the inplace_cb_query linked list. This function is going to get called just before sending a query to a nameserver.
| env | module environment. |
| qinfo | query info. |
| flags | flags of the query. |
| addr | to which server to send the query. |
| addrlen | length of addr. |
| zone | name of the zone of the delegation point. wireformat dname. This is the delegation point name for which the server is deemed authoritative. |
| zonelen | length of zone. |
| qstate | module qstate. |
| region | region to store data. |
| int inplace_cb_query_response_call | ( | struct module_env * | env, |
| struct module_qstate * | qstate, | ||
| struct dns_msg * | response | ||
| ) |
Call the registered functions in the inplace_cb_query_response linked list. This function is going to get called after receiving a reply from a nameserver.
| env | module environment. |
| qstate | module qstate. |
| response | received response |
| int inplace_cb_reply_cache_call | ( | struct module_env * | env, |
| struct query_info * | qinfo, | ||
| struct module_qstate * | qstate, | ||
| struct reply_info * | rep, | ||
| int | rcode, | ||
| struct edns_data * | edns, | ||
| struct regional * | region | ||
| ) |
Call the registered functions in the inplace_cb_reply_cache linked list. This function is going to get called while answering from cache.
| env | module environment. |
| qinfo | query info. |
| qstate | module qstate. NULL when replying from cache. |
| rep | Reply info. |
| rcode | return code. |
| edns | edns data of the reply. Edns input can be found here. |
| region | region to store data. |
| int inplace_cb_reply_call | ( | struct module_env * | env, |
| struct query_info * | qinfo, | ||
| struct module_qstate * | qstate, | ||
| struct reply_info * | rep, | ||
| int | rcode, | ||
| struct edns_data * | edns, | ||
| struct regional * | region | ||
| ) |
Call the registered functions in the inplace_cb_reply linked list. This function is going to get called while answering with a resolved query.
| env | module environment. |
| qinfo | query info. |
| qstate | module qstate. |
| rep | Reply info. Could be NULL. |
| rcode | return code. |
| edns | edns data of the reply. |
| region | region to store data. |
| int inplace_cb_reply_local_call | ( | struct module_env * | env, |
| struct query_info * | qinfo, | ||
| struct module_qstate * | qstate, | ||
| struct reply_info * | rep, | ||
| int | rcode, | ||
| struct edns_data * | edns, | ||
| struct regional * | region | ||
| ) |
Call the registered functions in the inplace_cb_reply_local linked list. This function is going to get called while answering with local data.
| env | module environment. |
| qinfo | query info. |
| qstate | module qstate. NULL when replying from cache. |
| rep | Reply info. |
| rcode | return code. |
| edns | edns data of the reply. Edns input can be found here. |
| region | region to store data. |
| int inplace_cb_reply_servfail_call | ( | struct module_env * | env, |
| struct query_info * | qinfo, | ||
| struct module_qstate * | qstate, | ||
| struct reply_info * | rep, | ||
| int | rcode, | ||
| struct edns_data * | edns, | ||
| struct regional * | region | ||
| ) |
Call the registered functions in the inplace_cb_reply linked list. This function is going to get called while answering with a servfail.
| env | module environment. |
| qinfo | query info. |
| qstate | module qstate. Contains the edns option lists. Could be NULL. |
| rep | Reply info. NULL when servfail. |
| rcode | return code. LDNS_RCODE_SERVFAIL. |
| edns | edns data of the reply. Edns input can be found here if qstate is NULL. |
| region | region to store data. |
| void log_dns_msg | ( | const char * | str, |
| struct query_info * | qinfo, | ||
| struct reply_info * | rep | ||
| ) |
Debug send the query info and reply info to the log in readable form.
| str | descriptive string printed with packet content. |
| qinfo | query section. |
| rep | rest of message. |
| void log_query_info | ( | enum verbosity_value | v, |
| const char * | str, | ||
| struct query_info * | qinf | ||
| ) |
Print string with neat domain name, type, class from query info.
| v | at what verbosity level to print this. |
| str | string of message. |
| qinf | query info structure with name, type and class. |
| void log_reply_info | ( | enum verbosity_value | v, |
| struct query_info * | qinf, | ||
| struct sockaddr_storage * | addr, | ||
| socklen_t | addrlen, | ||
| struct timeval | dur, | ||
| int | cached, | ||
| struct sldns_buffer * | rmsg | ||
| ) |
Print string with neat domain name, type, class, status code from, and size of a query response.
| v | at what verbosity level to print this. |
| qinf | query section. |
| addr | address of the client. |
| addrlen | length of the client address. |
| dur | how long it took to complete the query. |
| cached | whether or not the reply is coming from the cache, or an outside network. |
| rmsg | sldns buffer packet. |
| size_t msgreply_sizefunc | ( | void * | k, |
| void * | d | ||
| ) |
calculate size of struct query_info + reply_info
| int parse_copy_decompress_rrset | ( | struct sldns_buffer * | pkt, |
| struct msg_parse * | msg, | ||
| struct rrset_parse * | pset, | ||
| struct regional * | region, | ||
| struct ub_packed_rrset_key * | pk | ||
| ) |
Copy a parsed rrset into given key, decompressing and allocating rdata.
| pkt | packet for decompression |
| msg | the parser message (for flags for trust). |
| pset | the parsed rrset to copy. |
| region | if NULL - malloc, else data is allocated in this region. |
| pk | a freshly obtained rrsetkey structure. No dname is set yet, will be set on return. Note that TTL will still be relative on return. |
| int parse_create_msg | ( | struct sldns_buffer * | pkt, |
| struct msg_parse * | msg, | ||
| struct alloc_cache * | alloc, | ||
| struct query_info * | qinf, | ||
| struct reply_info ** | rep, | ||
| struct regional * | region | ||
| ) |
Allocate and decompress parsed message and rrsets.
| pkt | for name decompression. |
| msg | parsed message in scratch region. |
| alloc | alloc cache for special rrset key structures. Not used if region!=NULL, it can be NULL in that case. |
| qinf | where to store query info. qinf itself is allocated by the caller. |
| rep | reply info is allocated and returned. |
| region | if this parameter is NULL then malloc and the alloc is used. otherwise, everything is allocated in this region. In a region, no special rrset key structures are needed (not shared), and no rrset_ref array in the reply is built up. |
| struct reply_info* parse_reply_in_temp_region | ( | struct sldns_buffer * | pkt, |
| struct regional * | region, | ||
| struct query_info * | qi | ||
| ) |
get msg reply struct (in temp region)
| void query_entry_delete | ( | void * | q, |
| void * | arg | ||
| ) |
delete msgreply_entry key structure
| void query_info_clear | ( | struct query_info * | m | ) |
clear out query info structure
| int query_info_compare | ( | void * | m1, |
| void * | m2 | ||
| ) |
Compare two queryinfo structures, on query and type, class. It is not sorted in canonical ordering.
| m1 | struct query_info* , void* here to ease use as function pointer. |
| m2 | struct query_info* , void* here to ease use as function pointer. |
| struct msgreply_entry* query_info_entrysetup | ( | struct query_info * | q, |
| struct reply_info * | r, | ||
| hashvalue_type | h | ||
| ) |
Setup query info entry
| q | query info to copy. Emptied as if clear is called. |
| r | reply to init data. |
| h | hash value. |
| hashvalue_type query_info_hash | ( | struct query_info * | q, |
| uint16_t | flags | ||
| ) |
calculate hash value of query_info, lowercases the qname, uses CD flag for AAAA qtype
| int query_info_parse | ( | struct query_info * | m, |
| struct sldns_buffer * | query | ||
| ) |
Parse wire query into a queryinfo structure, return 0 on parse error. initialises the (prealloced) queryinfo structure as well. This query structure contains a pointer back info the buffer! This pointer avoids memory allocation. allocqname does memory allocation.
| m | the prealloced queryinfo structure to put query into. must be unused, or _clear()ed. |
| query | the wireformat packet query. starts with ID. |
| int reply_all_rrsets_secure | ( | struct reply_info * | rep | ) |
Check security status of all RRs in the message.
| rep | reply to check |
| int reply_check_cname_chain | ( | struct query_info * | qinfo, |
| struct reply_info * | rep | ||
| ) |
Check if cname chain in cached reply is still valid.
| qinfo | query info with query name. |
| rep | reply to check. |
| struct ub_packed_rrset_key* reply_find_answer_rrset | ( | struct query_info * | qinfo, |
| struct reply_info * | rep | ||
| ) |
Find answer rrset in reply, the one matching qinfo. Follows CNAMEs, so the result may have a different owner name.
| qinfo | what to look for. |
| rep | looks in answer section of this message. |
| uint8_t* reply_find_final_cname_target | ( | struct query_info * | qinfo, |
| struct reply_info * | rep | ||
| ) |
Find final cname target in reply, the one matching qinfo. Follows CNAMEs.
| qinfo | what to start with. |
| rep | looks in answer section of this message. |
| struct ub_packed_rrset_key* reply_find_rrset | ( | struct reply_info * | rep, |
| uint8_t * | name, | ||
| size_t | namelen, | ||
| uint16_t | type, | ||
| uint16_t | dclass | ||
| ) |
Find rrset in reply, inside any section. Does not follow CNAMEs.
| rep | looks in answer,authority and additional section of this message. |
| name | what to look for. |
| namelen | length of name. |
| type | looks for (host order). |
| dclass | looks for (host order). |
| struct ub_packed_rrset_key* reply_find_rrset_section_an | ( | struct reply_info * | rep, |
| uint8_t * | name, | ||
| size_t | namelen, | ||
| uint16_t | type, | ||
| uint16_t | dclass | ||
| ) |
Find rrset in reply, inside the answer section. Does not follow CNAMEs.
| rep | looks in answer section of this message. |
| name | what to look for. |
| namelen | length of name. |
| type | looks for (host order). |
| dclass | looks for (host order). |
| struct ub_packed_rrset_key* reply_find_rrset_section_ns | ( | struct reply_info * | rep, |
| uint8_t * | name, | ||
| size_t | namelen, | ||
| uint16_t | type, | ||
| uint16_t | dclass | ||
| ) |
Find rrset in reply, inside the authority section. Does not follow CNAMEs.
| rep | looks in authority section of this message. |
| name | what to look for. |
| namelen | length of name. |
| type | looks for (host order). |
| dclass | looks for (host order). |
| int reply_info_alloc_rrset_keys | ( | struct reply_info * | rep, |
| struct alloc_cache * | alloc, | ||
| struct regional * | region | ||
| ) |
Allocate (special) rrset keys.
| rep | reply info in which the rrset keys to be allocated, rrset[] array should have bee allocated with NULL pointers. |
| alloc | how to allocate rrset keys. Not used if region!=NULL, it can be NULL in that case. |
| region | if this parameter is NULL then the alloc is used. otherwise, rrset keys are allocated in this region. In a region, no special rrset key structures are needed (not shared). and no rrset_ref array in the reply needs to be built up. |
| struct reply_info* reply_info_copy | ( | struct reply_info * | rep, |
| struct alloc_cache * | alloc, | ||
| struct regional * | region | ||
| ) |
Copy reply_info and all rrsets in it and allocate.
| rep | what to copy, probably inside region, no ref[] array in it. |
| alloc | how to allocate rrset keys. Not used if region!=NULL, it can be NULL in that case. |
| region | if this parameter is NULL then malloc and the alloc is used. otherwise, everything is allocated in this region. In a region, no special rrset key structures are needed (not shared), and no rrset_ref array in the reply is built up. |
| void reply_info_delete | ( | void * | d, |
| void * | arg | ||
| ) |
delete reply_info data structure
| int reply_info_parse | ( | struct sldns_buffer * | pkt, |
| struct alloc_cache * | alloc, | ||
| struct query_info * | qinf, | ||
| struct reply_info ** | rep, | ||
| struct regional * | region, | ||
| struct edns_data * | edns | ||
| ) |
Parse query reply. Fills in preallocated query_info structure (with ptr into buffer). Allocates reply_info and packed_rrsets. These are not yet added to any caches or anything, this is only parsing. Returns formerror on qdcount > 1.
| pkt | the packet buffer. Must be positioned after the query section. |
| alloc | creates packed rrset key structures. |
| rep | allocated reply_info is returned (only on no error). |
| qinf | query_info is returned (only on no error). |
| region | where to store temporary data (for parsing). |
| edns | where to store edns information, does not need to be inited. |
| void reply_info_parsedelete | ( | struct reply_info * | rep, |
| struct alloc_cache * | alloc | ||
| ) |
Delete reply_info and packed_rrsets (while they are not yet added to the hashtables.). Returns rrsets to the alloc cache.
| rep | reply_info to delete. |
| alloc | where to return rrset structures to. |
| void reply_info_set_ttls | ( | struct reply_info * | rep, |
| time_t | timenow | ||
| ) |
Set TTLs inside the replyinfo to absolute values.
| rep | reply info. rrsets must be filled in. Also refs must be filled in. |
| timenow | the current time. |
| void reply_info_sortref | ( | struct reply_info * | rep | ) |
Sorts the ref array.
| rep | reply info. rrsets must be filled in. |