package net.floodlightcontroller.packet; import java.nio.ByteBuffer; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class DNSAnswer { private short name = (short) 0xc00c; private short type = (short)1; private short cls = (short)1; private int ttl = 60; private short addrLength = (short)4; private int addr; public final int LENGTH = 16; public byte[] serialize() { byte[] data = new byte[LENGTH]; ByteBuffer bb = ByteBuffer.wrap(data); bb.putShort(getName()) .putShort(getType()) .putShort(getCls()) .putInt(getTtl()) .putShort(getAddrLength()) .putInt(getAddr()); return data; } public DNSAnswer deserialize(ByteBuffer bb) { this.setName(bb.getShort()) .setType(bb.getShort()) .setCls(bb.getShort()) .setTtl(bb.getInt()) .setAddrLength(bb.getShort()) .setAddr(bb.getInt()); return this; } @Override public int hashCode() { final int prime = 919; int result = 1; result += result * prime + getName(); result += result * prime + getType(); result += result * prime + getCls(); result += result * prime + getTtl(); result += result * prime + getAddrLength(); result += result * prime + getAddr(); return result; } @Override public String toString(){ ObjectMapper mapper = new ObjectMapper(); String result = null; try { result = mapper.writeValueAsString(this); } catch (JsonProcessingException e) { e.printStackTrace(); } return result; } @Override public boolean equals(Object obj) { if (this == obj){ return true; } if (!super.equals(obj)){ return false; } if (!(obj instanceof DNSAnswer)){ return false; } DNSAnswer other = (DNSAnswer) obj; if (this.getName() != other.getName()){ return false; } if (this.getType() != other.getType()){ return false; } if (this.getCls() != other.getCls()){ return false; } if (this.getTtl() != other.getTtl()){ return false; } if (this.getAddrLength() != other.getAddrLength()){ return false; } if (this.getAddr() != other.getAddr()){ return false; } return true; } public short getName() { return name; } public DNSAnswer setName(short name) { this.name = name; return this; } public short getType() { return type; } public DNSAnswer setType(short type) { this.type = type; return this; } public short getCls() { return cls; } public DNSAnswer setCls(short cls) { this.cls = cls; return this; } public int getTtl() { return ttl; } public DNSAnswer setTtl(int ttl) { this.ttl = ttl; return this; } public short getAddrLength() { return addrLength; } public DNSAnswer setAddrLength(short length) { this.addrLength = length; return this; } public int getAddr() { return addr; } public DNSAnswer setAddr(int addr) { this.addr = addr; return this; } public DNSAnswer setAddr(String addr){ this.setAddr(IPv4.toIPv4Address(addr)); return this; } }