libdnsc/src/packet.h

63 lines
1.7 KiB
C

#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__ */