package org.zarroboogs.smartzpn.dns; public class DnsFlags { public boolean QR;//1 bits public int OpCode;//4 bits public boolean AA;//1 bits public boolean TC;//1 bits public boolean RD;//1 bits public boolean RA;//1 bits public int Zero;//3 bits public int Rcode;//4 bits public static DnsFlags Parse(short value) { int m_Flags = value & 0xFFFF; DnsFlags flags = new DnsFlags(); flags.QR = ((m_Flags >> 7) & 0x01) == 1; flags.OpCode = (m_Flags >> 3) & 0x0F; flags.AA = ((m_Flags >> 2) & 0x01) == 1; flags.TC = ((m_Flags >> 1) & 0x01) == 1; flags.RD = (m_Flags & 0x01) == 1; flags.RA = (m_Flags >> 15) == 1; flags.Zero = (m_Flags >> 12) & 0x07; flags.Rcode = ((m_Flags >> 8) & 0xF); return flags; } public short ToShort() { int m_Flags = 0; m_Flags |= (this.QR ? 1 : 0) << 7; m_Flags |= (this.OpCode & 0x0F) << 3; m_Flags |= (this.AA ? 1 : 0) << 2; m_Flags |= (this.TC ? 1 : 0) << 1; m_Flags |= this.RD ? 1 : 0; m_Flags |= (this.RA ? 1 : 0) << 15; m_Flags |= (this.Zero & 0x07) << 12; m_Flags |= (this.Rcode & 0x0F) << 8; return (short) m_Flags; } }