private byte[] formHeader(dGramHeader dHead) { byte[] result = new byte[12]; result[0] = (byte)((dHead.ID >> 8) & 0xFF); result[1] = (byte)(dHead.ID & 0xFF); result[2] = (byte)((dHead.QR << 7) + (((byte)dHead.OpCode << 3) & 0xF) + (dHead.AA << 2) + (dHead.TC << 1) + dHead.RD); result[3] = (byte)((dHead.RA << 7) + (dHead.Z << 4) + ((byte)dHead.RCode & 0xF)); result[4] = (byte)((dHead.QDCount >> 8) & 0xFF); result[5] = (byte)(dHead.QDCount & 0xFF); result[6] = (byte)((dHead.ANCount >> 8) & 0xFF); result[7] = (byte)(dHead.ANCount & 0xFF); result[8] = (byte)((dHead.NSCount >> 8) & 0xFF); result[9] = (byte)(dHead.NSCount & 0xFF); result[10] = (byte)((dHead.ARCount >> 8) & 0xFF); result[11] = (byte)(dHead.ARCount & 0xFF); return(result); }
private byte[] dataGram(string domainName, SendBy sendBy) { string[] dName = domainName.Split('.'); uint dgLength = (uint)sendBy * 2; uint bodyLength; dGramHeader dHead = new dGramHeader(); dHead.ID = 0; dHead.QR = 0; dHead.OpCode = OpCodes.QUERY; dHead.AA = 0; dHead.TC = 0; dHead.RD = 1; dHead.RA = 0; dHead.Z = 0; dHead.RCode = RCodes.Success; dHead.QDCount = 1; dHead.ANCount = 0; dHead.NSCount = 0; dHead.ARCount = 0; byte[] header = formHeader(dHead); byte[] question = formQuestion(dName); bodyLength = (uint)(header.Length + question.Length); byte[] dGram = new byte[dgLength + bodyLength]; int ptr = 0; if (sendBy == SendBy.TCP) { dGram[0] = (byte)((bodyLength >> 8) & 0xFF); dGram[1] = (byte)(bodyLength & 0xFF); ptr = 2; } for (int n = 0; n < header.Length; n++) { dGram[ptr] = header[n]; ptr += 1; } for (int m = 0; m < question.Length; m++) { dGram[ptr] = question[m]; ptr += 1; } return(dGram); }
private byte[] formHeader(dGramHeader dHead) { byte[] result = new byte[12]; result[0] = (byte)((dHead.ID >> 8) & 0xFF); result[1] = (byte)(dHead.ID & 0xFF); result[2] = (byte)((dHead.QR << 7) + (((byte)dHead.OpCode << 3) & 0xF) + (dHead.AA << 2) + (dHead.TC << 1) + dHead.RD); result[3] = (byte)((dHead.RA << 7) + (dHead.Z << 4) + ((byte)dHead.RCode & 0xF)); result[4] = (byte)((dHead.QDCount >> 8) & 0xFF); result[5] = (byte)(dHead.QDCount & 0xFF); result[6] = (byte)((dHead.ANCount >> 8) & 0xFF); result[7] = (byte)(dHead.ANCount & 0xFF); result[8] = (byte)((dHead.NSCount >> 8) & 0xFF); result[9] = (byte)(dHead.NSCount & 0xFF); result[10] = (byte)((dHead.ARCount >> 8) & 0xFF); result[11] = (byte)(dHead.ARCount & 0xFF); return result; }
private byte[] dataGram(string domainName,SendBy sendBy) { string[] dName = domainName.Split('.'); uint dgLength = (uint)sendBy * 2; uint bodyLength; dGramHeader dHead = new dGramHeader(); dHead.ID = 0; dHead.QR = 0; dHead.OpCode = OpCodes.QUERY; dHead.AA = 0; dHead.TC = 0; dHead.RD = 1; dHead.RA = 0; dHead.Z = 0; dHead.RCode = RCodes.Success; dHead.QDCount = 1; dHead.ANCount = 0; dHead.NSCount = 0; dHead.ARCount = 0; byte[] header = formHeader(dHead); byte[] question = formQuestion(dName); bodyLength = (uint)(header.Length + question.Length); byte[] dGram = new byte[dgLength + bodyLength]; int ptr = 0; if (sendBy == SendBy.TCP) { dGram[0] = (byte)((bodyLength >> 8) & 0xFF); dGram[1] = (byte)(bodyLength & 0xFF); ptr = 2; } for (int n = 0; n < header.Length; n++) { dGram[ptr] = header[n]; ptr += 1; } for (int m = 0; m < question.Length; m++) { dGram[ptr] = question[m]; ptr += 1; } return dGram; }