/// <summary> /// Pack an Rpc defintion in to a byte array /// </summary> /// <param name="def">The definition to pack</param> /// <returns>The packed data</returns> public static byte[] PackRpcDefinition(RpcDefinition def) { WireEncoder enc = new WireEncoder(0x0300); enc.Write8((byte)def.Version); enc.WriteString(def.Name); int paramsSize = def.Params.Count; if (paramsSize > 0xff) { paramsSize = 0xff; } enc.Write8((byte)paramsSize); for (int i = 0; i < paramsSize; i++) { enc.WriteType(def.Params[i].DefValue.Type); enc.WriteString(def.Params[i].Name); enc.WriteValue(def.Params[i].DefValue); } int resultsSize = def.Results.Count; if (resultsSize > 0xff) { resultsSize = 0xff; } enc.Write8((byte)resultsSize); for (int i = 0; i < resultsSize; i++) { enc.WriteType(def.Results[i].Type); enc.WriteString(def.Results[i].Name); } return(enc.Buffer); }
public void TestWriteTypeError() { WireEncoder e = new WireEncoder(); e.WriteType(NtType.Unassigned); Assert.That(e.Error, Is.EqualTo("Unrecognized Type")); }
public void WriteTypeError() { WireEncoder e = new WireEncoder(0x0200); e.WriteType(NtType.Unassigned); Assert.That(e.Count, Is.EqualTo(0)); Assert.That(e.Error, Is.EqualTo("unrecognized Type")); e.Reset(); e.WriteType(NtType.Raw); Assert.That(e.Count, Is.EqualTo(0)); Assert.That(e.Error, Is.EqualTo("raw type not supported in protocol < 3.0")); e.Reset(); e.WriteType(NtType.Rpc); Assert.That(e.Count, Is.EqualTo(0)); Assert.That(e.Error, Is.EqualTo("RPC type not supported in protocol < 3.0")); }
public void Reset() { WireEncoder e = new WireEncoder(0x0300); 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); }
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 WireEncoderWriteType() { int off = BUFSIZE - 1; WireEncoder e = new WireEncoder(0x0300); 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 Write(WireEncoder encoder) { switch (Type) { case MsgType.KeepAlive: encoder.Write8((byte)MsgType.KeepAlive); break; case MsgType.ClientHello: encoder.Write8((byte)MsgType.ClientHello); encoder.Write16((ushort)encoder.ProtoRev); if (encoder.ProtoRev < 0x0300u) { return; } encoder.WriteString(m_str); break; case MsgType.ProtoUnsup: encoder.Write8((byte)MsgType.ProtoUnsup); encoder.Write16((ushort)encoder.ProtoRev); break; case MsgType.ServerHelloDone: encoder.Write8((byte)MsgType.ServerHelloDone); break; case MsgType.ServerHello: if (encoder.ProtoRev < 0x0300u) { return; // new message in version 3.0 } encoder.Write8((byte)MsgType.ServerHello); encoder.Write8((byte)Flags); encoder.WriteString(m_str); break; case MsgType.ClientHelloDone: if (encoder.ProtoRev < 0x0300u) { return; // new message in version 3.0 } encoder.Write8((byte)MsgType.ClientHelloDone); break; case MsgType.EntryAssign: encoder.Write8((byte)MsgType.EntryAssign); encoder.WriteString(m_str); encoder.WriteType(Val.Type); encoder.Write16((ushort)Id); encoder.Write16((ushort)SeqNumUid); if (encoder.ProtoRev >= 0x0300u) { encoder.Write8((byte)Flags); } encoder.WriteValue(Val); break; case MsgType.EntryUpdate: encoder.Write8((byte)MsgType.EntryUpdate); encoder.Write16((ushort)Id); encoder.Write16((ushort)SeqNumUid); if (encoder.ProtoRev >= 0x0300u) { encoder.WriteType(Val.Type); } encoder.WriteValue(Val); break; case MsgType.FlagsUpdate: if (encoder.ProtoRev < 0x0300u) { return; // new message in version 3.0 } encoder.Write8((byte)MsgType.FlagsUpdate); encoder.Write16((ushort)Id); encoder.Write8((byte)Flags); break; case MsgType.EntryDelete: if (encoder.ProtoRev < 0x0300u) { return; // new message in version 3.0 } encoder.Write8((byte)MsgType.EntryDelete); encoder.Write16((ushort)Id); break; case MsgType.ClearEntries: if (encoder.ProtoRev < 0x0300u) { return; // new message in version 3.0 } encoder.Write8((byte)MsgType.ClearEntries); encoder.Write32(ClearAllMagic); break; case MsgType.ExecuteRpc: if (encoder.ProtoRev < 0x0300u) { return; // new message in version 3.0 } encoder.Write8((byte)MsgType.ExecuteRpc); encoder.Write16((ushort)Id); encoder.Write16((ushort)SeqNumUid); encoder.WriteValue(Val); break; case MsgType.RpcResponse: if (encoder.ProtoRev < 0x0300u) { return; // new message in version 3.0 } encoder.Write8((byte)MsgType.RpcResponse); encoder.Write16((ushort)Id); encoder.Write16((ushort)SeqNumUid); encoder.WriteValue(Val); break; } }