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 TestWriteTypeError() { WireEncoder e = new WireEncoder(); e.WriteType(NtType.Unassigned); Assert.That(e.Error, Is.EqualTo("Unrecognized Type")); }
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); }