dns: support domain compress.

This commit is contained in:
Nick Peng
2022-04-05 21:21:33 +08:00
parent 24661c2419
commit 92af4c05c0
4 changed files with 570 additions and 358 deletions

View File

@@ -113,11 +113,15 @@ struct dns_head {
unsigned short nrcount; /* number of addititional resource entries */
} __attribute__((packed, aligned(2)));
struct dns_rrs {
unsigned short next;
unsigned short len;
dns_type_t type;
unsigned char data[0];
#define DNS_PACKET_DICT_SIZE 16
struct dns_packet_dict_item {
unsigned pos;
unsigned int hash;
};
struct dns_packet_dict {
short dict_count;
struct dns_packet_dict_item names[DNS_PACKET_DICT_SIZE];
};
/* packet haed */
@@ -130,21 +134,24 @@ struct dns_packet {
unsigned short optcount;
unsigned short optional;
unsigned short payloadsize;
struct dns_packet_dict namedict;
int size;
int len;
unsigned char data[0];
};
/* RRS encode/decode context */
struct dns_data_context {
unsigned char *data;
unsigned char *ptr;
unsigned int maxsize;
struct dns_rrs {
struct dns_packet *packet;
unsigned short next;
unsigned short len;
dns_type_t type;
unsigned char data[0];
};
/* packet encode/decode context */
struct dns_context {
struct dns_packet *packet;
struct dns_packet_dict *namedict;
unsigned char *data;
unsigned int maxsize;
unsigned char *ptr;
@@ -234,4 +241,12 @@ int dns_encode(unsigned char *data, int size, struct dns_packet *packet);
int dns_packet_init(struct dns_packet *packet, int size, struct dns_head *head);
struct dns_update_param {
int id;
int ip_ttl;
int cname_ttl;
};
int dns_packet_update(unsigned char *data, int size, struct dns_update_param *param);
#endif