struct answer_packet_list* ans = mycls.answer_head;
size_t len = ntohs(ans->pkt.hdr.size);
+ GNUNET_assert(ans->pkt.subtype == GNUNET_DNS_ANSWER_TYPE_IP);
+
size_t data_len = len - sizeof(struct answer_packet) + 1;
size_t net_len = sizeof(struct ip_hdr) + sizeof(struct udp_dns) + data_len;
size_t pkt_len = sizeof(struct GNUNET_MessageHeader) + sizeof(struct pkt_tun) + net_len;
struct query_packet pkt;
};
+enum GNUNET_DNS_ANSWER_Subtype {
+ /**
+ * Answers of this type contain a dns-packet that just has to be transmitted
+ */
+ GNUNET_DNS_ANSWER_TYPE_IP
+};
+
struct answer_packet {
- struct GNUNET_MessageHeader hdr;
+ struct GNUNET_MessageHeader hdr;
+ enum GNUNET_DNS_ANSWER_Subtype subtype GNUNET_PACKED;
- unsigned from:32 GNUNET_PACKED;
- unsigned to:32 GNUNET_PACKED;
- unsigned dst_port:16 GNUNET_PACKED;
+ unsigned from:32 GNUNET_PACKED;
+ unsigned to:32 GNUNET_PACKED;
+ unsigned dst_port:16 GNUNET_PACKED;
- unsigned char data[1];
+ unsigned char data[1];
};
+
struct answer_packet_list {
struct answer_packet_list* next GNUNET_PACKED;
struct answer_packet_list* prev GNUNET_PACKED;
struct answer_packet_list* answer = GNUNET_malloc(len + 2*sizeof(struct answer_packet_list*));
answer->pkt.hdr.type = htons(GNUNET_MESSAGE_TYPE_LOCAL_RESPONSE_DNS);
answer->pkt.hdr.size = htons(len);
+ answer->pkt.subtype = GNUNET_DNS_ANSWER_TYPE_IP;
answer->pkt.from = addr.sin_addr.s_addr;
answer->pkt.to = query_states[dns->s.id].local_ip;
answer->pkt.dst_port = query_states[dns->s.id].local_port;