#ifndef __PACKET_H__ #define __PACKET_H__ #include "glist.h" #include "header.h" #include "rr.h" typedef struct { unsigned char name[256]; uint16_t offset; } PacketLabel; typedef struct { unsigned char rdata[8192]; int rdlength; int rdread; DNSHeader header; GList *questions; GList *answers; GList *authority; GList *additional; GList *labels; int answer_socket_type; /* Las respuestas tienen: answer_from answer_socket_type */ } DNSPacket; DNSPacket *dns_packet_create_request (const char *name, int type, int klass); DNSPacket *dns_packet_create_response (int type, unsigned char *data, int size_data); DNSPacket *dns_packet_clone_simple (DNSPacket *packet); void dns_packet_compress_name (DNSPacket *packet, char *name); void dns_packet_pack_name (DNSPacket *packet, const char *name); void dns_packet_pack_data (DNSPacket *packet); int dns_packet_get_data (DNSPacket *packet, unsigned char **data); void dns_packet_free_simple (DNSPacket *packet); void dns_packet_free_full (DNSPacket *packet); void dns_header_pack_data (DNSHeader *header, DNSPacket *packet); int dns_header_init_from_packet (DNSHeader *header, DNSPacket *packet); void dns_packet_reset (DNSPacket *packet); int dns_packet_expand_name (unsigned char *name, DNSPacket *packet, int *offset); int dns_packet_expand_name_simple (unsigned char *name, unsigned char *buffer, int buffer_size); void dns_rr_pack_generate_signature (DNSRR *signature, DNSPacket *packet); void dns_packet_recount_items (DNSPacket *packet); DNSRR **dns_packet_get_answers (DNSPacket *packet); DNSRR **dns_packet_get_authority (DNSPacket *packet); DNSRR **dns_packet_get_additional (DNSPacket *packet); #endif /* __PACKET_H__ */