package zutil.net.dns; import zutil.parser.binary.BinaryStructInputStream; import zutil.parser.binary.BinaryStructOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * This class is a general wrapper for a whole DNS packet. * * Created by Ziver on 2016-04-11. */ public class DNSPacket { private DNSPacketHeader header; private ArrayList questions; private ArrayList answerRecords; private ArrayList nameServers; private ArrayList additionalRecords; public DNSPacket(){ header = new DNSPacketHeader(); questions = new ArrayList<>(); answerRecords = new ArrayList<>(); nameServers = new ArrayList<>(); additionalRecords = new ArrayList<>(); } public DNSPacketHeader getHeader(){ return header; } public List getQuestions(){ return Collections.unmodifiableList(questions); } public List getAnswerRecords(){ return Collections.unmodifiableList(answerRecords); } public List getNameServers(){ return Collections.unmodifiableList(nameServers); } public List getAdditionalRecords(){ return Collections.unmodifiableList(additionalRecords); } public void addQuestion(DNSPacketQuestion question){ questions.add(question); header.countQuestion = questions.size(); } public void addAnswerRecord(DNSPacketResource resource){ answerRecords.add(resource); header.countAnswerRecord = answerRecords.size(); } public void addNameServer(DNSPacketResource resource){ nameServers.add(resource); header.countNameServer = nameServers.size(); } public void addAdditionalRecord(DNSPacketResource resource){ additionalRecords.add(resource); header.countAdditionalRecord = additionalRecords.size(); } public static DNSPacket read(InputStream in) throws IOException { BinaryStructInputStream structIn = new BinaryStructInputStream(in); DNSPacket packet = new DNSPacket(); structIn.read(packet.header); for (int i=0; i list) throws IOException { for (int i=0; i