public void buildMessage() { STUNMessageBuilder builder = new STUNMessageBuilder(null, STUNClass.Error, STUNMethod.Binding, new Transaction(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)); builder.WriteAttribute(0b111, new ByteBuffer(new byte[] { 255 })); byte[] message = builder.Build().ToArray(); byte[] transaction = new byte[12]; Array.Copy(message, 8, transaction, 0, 12); ByteBuffer transactionInt = new ByteBuffer(transaction); uint magicCookie = new ByteBuffer(message).GetUIntAt(4); // check length Assert.AreEqual(0, (message.Length - 20) % 4); // check length without header Assert.AreEqual(message.Length - 20, new ByteBuffer(message).GetUShortAt(2)); // check group Assert.AreEqual(STUNClass.Error, STUNHeader.GetClass(new ByteBuffer(message).GetUShortAt(0))); // check method Assert.AreEqual(STUNMethod.Binding, STUNHeader.GetMethod(new ByteBuffer(message).GetUShortAt(0))); // check magic cookie Assert.AreEqual(STUNHeader.MAGIC_COOKIE, magicCookie); // check transaction Assert.AreEqual(1, transactionInt[0]); for (int i = 1; i < transactionInt.Length; i++) { Assert.AreEqual(0, transactionInt[i]); } // check first byte of tlv Assert.AreEqual(0, message[20]); // check second byte of tlv Assert.AreEqual(0b111, message[20 + 1]); // check first byte of tlv length Assert.AreEqual(0, message[20 + 2]); // check second byte of tlv length Assert.AreEqual(1, message[20 + 2 + 1]); // check first byte of tlv value Assert.AreEqual(255, message[20 + 2 + 2]); // check second byte of tlv value Assert.AreEqual(0, message[20 + 2 + 2 + 1]); // check third byte of tlv value Assert.AreEqual(0, message[20 + 2 + 2 + 2]); // check fourth byte of tlv value Assert.AreEqual(0, message[20 + 2 + 2 + 3]); }
public void header() { STUNMessageBuilder builder = new STUNMessageBuilder(null, STUNClass.Error, STUNMethod.Binding, new Transaction(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10)); builder.WriteAttribute(0xBABA, new ByteBuffer(new byte[20])); byte[] header = builder.GetHeader().ToArray(); byte[] transaction = new byte[12]; Array.Copy(header, 8, transaction, 0, 12); ByteBuffer transactionInt = new ByteBuffer(transaction); uint magicCookie = new ByteBuffer(header).GetUIntAt(4); Assert.IsNotNull(header); Assert.AreEqual(20, header.Length); // check group Assert.AreEqual(STUNClass.Error, STUNHeader.GetClass(new ByteBuffer(header).GetUShortAt(0))); // check method Assert.AreEqual(STUNMethod.Binding, STUNHeader.GetMethod(new ByteBuffer(header).GetUShortAt(0))); // check tlv length Assert.AreEqual(20 + 4, new ByteBuffer(header).GetUShortAt(2)); // check magic cookie Assert.AreEqual(STUNHeader.MAGIC_COOKIE, magicCookie); // check transaction Assert.AreEqual(10, transactionInt[0]); for (int i = 1; i < transactionInt.Length; i++) { Assert.AreEqual(0, transactionInt[i]); } }