public static byte[] PackRpcDefinition(NtRpcDefinition def, out UIntPtr packedLen) { WireEncoder enc = new WireEncoder(); enc.Write8((byte)def.Version); enc.WriteString(def.Name); int paramsSize = def.ParamsArray.Length; if (paramsSize > 0xff) paramsSize = 0xff; enc.Write8((byte)paramsSize); for (int i = 0; i < paramsSize; ++i) { enc.WriteType(def.ParamsArray[i].Value.Type); enc.WriteString(def.ParamsArray[i].Name); enc.WriteValue(def.ParamsArray[i].Value); } int resultsSize = def.ResultsArray.Length; if (resultsSize > 0xff) resultsSize = 0xff; enc.Write8((byte)resultsSize); for (int i = 0; i < resultsSize; ++i) { enc.WriteType(def.ResultsArray[i].Type); enc.WriteString(def.ResultsArray[i].Name); } packedLen = (UIntPtr)enc.Buffer.Length; return enc.Buffer; }
public void TestWireEncoderWriteType() { int off = BUFSIZE - 1; WireEncoder e = new WireEncoder(); for (int i = 0; i < off; i++) { e.Write8(0); } e.WriteType(NtType.Boolean); e.WriteType(NtType.Double); e.WriteType(NtType.String); e.WriteType(NtType.Raw); e.WriteType(NtType.BooleanArray); e.WriteType(NtType.DoubleArray); e.WriteType(NtType.StringArray); e.WriteType(NtType.Rpc); Assert.That(e.Buffer.Length - off, Is.EqualTo(8)); byte[] checkArray = { 0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x20 }; byte[] bufferArray = new byte[checkArray.Length]; Array.Copy(e.Buffer, off, bufferArray, 0, checkArray.Length); Assert.That(bufferArray, Is.EquivalentTo(checkArray)); }
public void TestWireEncoderWriteLeb128() { int off = BUFSIZE - 2; WireEncoder e = new WireEncoder(); for (int i = 0; i < off; i++) { e.Write8(0); } e.WriteUleb128(0ul); e.WriteUleb128(0x7ful); e.WriteUleb128(0x80ul); Assert.That(e.Buffer.Length - off, Is.EqualTo(4)); byte[] checkArray = { 0x00, 0x7f, 0x80, 0x01 }; byte[] bufferArray = new byte[checkArray.Length]; Array.Copy(e.Buffer, off, bufferArray, 0, checkArray.Length); Assert.That(bufferArray, Is.EquivalentTo(checkArray)); }
public void TestWireEncoderWriteDouble() { int off = BUFSIZE - 8; WireEncoder e = new WireEncoder(); for (int i = 0; i < off; i++) { e.Write8(0); } e.WriteDouble(0.0); e.WriteDouble(2.3e5); e.WriteDouble(double.PositiveInfinity); e.WriteDouble(2.2250738585072014e-308);//Minimum double size e.WriteDouble(double.MaxValue); Assert.That(e.Buffer.Length - off, Is.EqualTo(40)); byte[] checkArray = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0c, 0x13, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; byte[] bufferArray = new byte[checkArray.Length]; Array.Copy(e.Buffer, off, bufferArray, 0, checkArray.Length); Assert.That(bufferArray, Is.EquivalentTo(checkArray)); }
public void TestWireEncoderWrite8() { int off = BUFSIZE - 1; WireEncoder e = new WireEncoder(); for (int i = 0; i < off; i++) { e.Write8(0); } e.Write8(5); unchecked { e.Write8((byte)0x101u); } e.Write8(0); Assert.That(e.Buffer.Length - off, Is.EqualTo(3)); byte[] checkArray = { 0x05, 0x01, 0x00 }; byte[] bufferArray = new byte[checkArray.Length]; Array.Copy(e.Buffer, off, bufferArray, 0, checkArray.Length); Assert.That(bufferArray, Is.EquivalentTo(checkArray)); }
public void TestWireEncoderWrite32() { int off = BUFSIZE - 4; WireEncoder e = new WireEncoder(); for (int i = 0; i < off; i++) { e.Write8(0); } e.Write32(5); e.Write32(1); e.Write32(0xabcd); e.Write32(0x12345678); e.Write32(0); Assert.That(e.Buffer.Length - off, Is.EqualTo(20)); byte[] checkArray = { 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xab, 0xcd, 0x12, 0x34, 0x56, 0x78, 0x00, 0x00, 0x00, 0x00 }; byte[] bufferArray = new byte[checkArray.Length]; Array.Copy(e.Buffer, off, bufferArray, 0, checkArray.Length); Assert.That(bufferArray, Is.EquivalentTo(checkArray)); }
public void TestReset() { WireEncoder e = new WireEncoder(); e.WriteType(NtType.Unassigned); Assert.That(e.Error, Is.Not.Null); e.Reset(); Assert.That(e.Error, Is.Null); e.Write8(0); Assert.That(e.Buffer.Length, Is.EqualTo(1)); e.Reset(); Assert.That(e.Buffer, Is.Empty); }