1 #ifndef IHEADER_H_INCLUDED 2 #define IHEADER_H_INCLUDED 3 4 #include "dnsrelated.h" 5 #include "utils.h" 6 7 typedef struct _IHeader IHeader; 8 9 struct _IHeader{ 10 int32_t _Pad; /* Must be 0 */ 11 12 Address_Type BackAddress; 13 SOCKET SendBackSocket; 14 15 char Domain[256]; 16 int HashValue; 17 DNSRecordType Type; 18 19 BOOL ReturnHeader; 20 BOOL EDNSEnabled; 21 22 int EntityLength; 23 24 char Agent[ROUND_UP(LENGTH_OF_IPV6_ADDRESS_ASCII + 1, 25 sizeof(void *) 26 ) 27 ]; 28 29 void *TcpLengthPadding; 30 }; 31 32 #define IHEADER_TAIL(ptr) (void *)((IHeader *)(ptr) + 1) 33 34 #define IHEADER_CONTAINING_HEADER(ptr) (((IHeader *)(ptr))->_Pad == 0) 35 36 int IHeader_Init(BOOL _ap); 37 38 void IHeader_Reset(IHeader *h); 39 40 int IHeader_Fill(IHeader *h, 41 BOOL ReturnHeader, 42 char *DnsEntity, 43 int EntityLength, 44 struct sockaddr *BackAddress, 45 SOCKET SendBackSocket, 46 sa_family_t Family, 47 const char *Agent 48 ); 49 50 int IHeader_AddFakeEdns(IHeader *h, int BufferLength); 51 52 BOOL IHeader_Blocked(IHeader *h /* Entity followed */); 53 54 int IHeader_SendBack(IHeader *h /* Entity followed */); 55 56 int IHeader_SendBackRefusedMessage(IHeader *h); 57 58 #endif // IHEADER_H_INCLUDED 59