Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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));
        }
Beispiel #7
0
        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;
            }
        }