Exemplo n.º 1
0
 private CdrInputStream PrepareStream(byte[] testData)
 {
     MemoryStream testStream = new MemoryStream(testData);
     CdrInputStreamImpl inputStream = new CdrInputStreamImpl(testStream);
     inputStream.SetMaxLength((uint)testData.Length);
     inputStream.ConfigStream(0, new GiopVersion(1, 2));
     return inputStream;
 }
Exemplo n.º 2
0
        private CdrInputStream PrepareStream(byte[] testData)
        {
            MemoryStream       testStream  = new MemoryStream(testData);
            CdrInputStreamImpl inputStream = new CdrInputStreamImpl(testStream);

            inputStream.SetMaxLength((uint)testData.Length);
            inputStream.ConfigStream(0, new GiopVersion(1, 2));
            return(inputStream);
        }
Exemplo n.º 3
0
        private DataInputStream CreateInputStream(byte[] content)
        {
            MemoryStream       contentStream = new MemoryStream(content);
            CdrInputStreamImpl inputStream   = new CdrInputStreamImpl(contentStream);

            inputStream.ConfigStream(0, new GiopVersion(1, 2));
            inputStream.SetMaxLength((uint)content.Length);
            DataInputStreamImpl di =
                new DataInputStreamImpl(inputStream, m_serFactory);

            return(di);
        }
Exemplo n.º 4
0
        public void TestLocateReplySerialisation()
        {
            uint requestId = 5;

            byte[]               objectKey = new byte[] { 116, 101, 115, 116, 111, 98, 106, 101, 99, 116 }; // testobject
            string               targetUri = "testobject";
            GiopVersion          version   = new GiopVersion(1, 2);
            LocateRequestMessage locReq    = new LocateRequestMessage(requestId, objectKey, targetUri);
            // create a connection context
            GiopConnectionDesc conDesc = new GiopConnectionDesc(null, null);

            // create the reply
            LocateStatus       replyStatus = LocateStatus.OBJECT_HERE;
            LocateReplyMessage locReply    = new LocateReplyMessage(replyStatus);

            MemoryStream targetStream = new MemoryStream();

            m_handler.SerialiseOutgoingLocateReplyMessage(locReply, locReq, version, targetStream, conDesc);

            // check to serialised stream
            targetStream.Seek(0, SeekOrigin.Begin);

            CdrInputStreamImpl cdrIn = new CdrInputStreamImpl(targetStream);

            cdrIn.ConfigStream(0, version);

            // first is Giop-magic
            byte data;

            AssertBytesFollowing(m_giopMagic, cdrIn);
            // Giop version
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(1, data);
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(2, data);
            // flags: big-endian, no fragements
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(0, data);
            // Giop Msg type: locate reply
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual((byte)GiopMsgTypes.LocateReply, data);
            // Giop Msg length
            uint msgLength = cdrIn.ReadULong();

            cdrIn.SetMaxLength(msgLength);
            // req-id
            Assert.AreEqual(requestId, cdrIn.ReadULong());
            // the location status
            Assert.AreEqual((uint)replyStatus, cdrIn.ReadULong());
        }
Exemplo n.º 5
0
        private CdrInputStreamImpl CreateInputStream(byte[] content, bool isLittleEndian)
        {
            MemoryStream       stream    = new MemoryStream(content);
            CdrInputStreamImpl cdrStream = new CdrInputStreamImpl(stream);
            byte endianFlag = 0;

            if (isLittleEndian)
            {
                endianFlag = 1;
            }
            cdrStream.ConfigStream(endianFlag, new GiopVersion(1, 1));
            cdrStream.SetMaxLength((uint)content.Length);
            cdrStream.WCharSet = (int)Ch.Elca.Iiop.Services.WCharSet.UTF16;
            return(cdrStream);
        }
 private DataInputStream CreateInputStream(byte[] content) {
     MemoryStream contentStream = new MemoryStream(content);
     CdrInputStreamImpl inputStream = new CdrInputStreamImpl(contentStream);
     inputStream.ConfigStream(0, new GiopVersion(1, 2));
     inputStream.SetMaxLength((uint)content.Length);
     DataInputStreamImpl di =
         new DataInputStreamImpl(inputStream, m_serFactory);
     return di;
 }
Exemplo n.º 7
0
 internal GiopHeader(CdrInputStreamImpl stream) : this(stream.ReadOpaque(12))
 {
     stream.ConfigStream(m_flags, m_version);
     stream.SetMaxLength(m_msgLength);
 }
        public void TestLocateReplySerialisation() {
            uint requestId = 5;
            byte[] objectKey = new byte[] { 116, 101, 115, 116, 111, 98, 106, 101, 99, 116 }; // testobject
            string targetUri = "testobject";
            GiopVersion version = new GiopVersion(1, 2);
            LocateRequestMessage locReq = new LocateRequestMessage(requestId, objectKey, targetUri);
            // create a connection context
            GiopConnectionDesc conDesc = new GiopConnectionDesc(null, null);

            // create the reply
            LocateStatus replyStatus = LocateStatus.OBJECT_HERE;
            LocateReplyMessage locReply = new LocateReplyMessage(replyStatus);
 
            MemoryStream targetStream = new MemoryStream();
 
            m_handler.SerialiseOutgoingLocateReplyMessage(locReply, locReq, version, targetStream, conDesc);
 
            // check to serialised stream
            targetStream.Seek(0, SeekOrigin.Begin);

            CdrInputStreamImpl cdrIn = new CdrInputStreamImpl(targetStream);
            cdrIn.ConfigStream(0, version);
 
            // first is Giop-magic
            byte data;
            AssertBytesFollowing(m_giopMagic, cdrIn);
            // Giop version
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(1, data);
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(2, data);
            // flags: big-endian, no fragements
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(0, data);
            // Giop Msg type: locate reply
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual((byte)GiopMsgTypes.LocateReply, data);
            // Giop Msg length
            uint msgLength = cdrIn.ReadULong();
            cdrIn.SetMaxLength(msgLength);
            // req-id
            Assert.AreEqual(requestId, cdrIn.ReadULong());
            // the location status
            Assert.AreEqual((uint)replyStatus, cdrIn.ReadULong());
        }
        public void TestReplySerialisation() {
            // request msg the reply is for
            MethodInfo methodToCall = typeof(TestService).GetMethod("Add");
            object[] args = new object[] { ((Int32) 1), ((Int32) 2) };
            string uri = "iiop://localhost:8087/testuri"; // Giop 1.2 will be used because no version spec in uri
            GiopVersion version = new GiopVersion(1, 2);
            TestMessage msg = new TestMessage(methodToCall, args, uri);
            msg.Properties[SimpleGiopMsg.REQUEST_ID_KEY] = (uint)5;
            msg.Properties[SimpleGiopMsg.GIOP_VERSION_KEY] = version;
            msg.Properties[SimpleGiopMsg.CALLED_METHOD_KEY] = methodToCall;
            msg.Properties[SimpleGiopMsg.IDL_METHOD_NAME_KEY] = methodToCall.Name; // done by serialization normally
            // create a connection context
            GiopConnectionDesc conDesc = new GiopConnectionDesc(null, null);

            // create the reply
            ReturnMessage retMsg = new ReturnMessage((Int32) 3, new object[0], 0, null, msg);
 
            MemoryStream targetStream = new MemoryStream();
 
            m_handler.SerialiseOutgoingReplyMessage(retMsg, msg, version,
                                                    targetStream, conDesc);
 
            // check to serialised stream
            targetStream.Seek(0, SeekOrigin.Begin);

            CdrInputStreamImpl cdrIn = new CdrInputStreamImpl(targetStream);
            cdrIn.ConfigStream(0, new GiopVersion(1, 2));
 
            // first is Giop-magic
            byte data;
            AssertBytesFollowing(m_giopMagic, cdrIn);
            // Giop version
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(1, data);
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(2, data);
            // flags: big-endian, no fragements
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(0, data);
            // Giop Msg type: reply
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(1, data);
            // Giop Msg length
            uint msgLength = cdrIn.ReadULong();
            cdrIn.SetMaxLength(msgLength);
            // req-id
            Assert.AreEqual(5, cdrIn.ReadULong());
            // response status: NO_EXCEPTION
            Assert.AreEqual(0, cdrIn.ReadULong());
            // ignore service contexts
            SkipServiceContexts(cdrIn);
            // Giop 1.2, must be aligned on 8
            cdrIn.ForceReadAlign(Aligns.Align8);
            // now return value is following
            Assert.AreEqual(3, cdrIn.ReadLong());
        }
Exemplo n.º 10
0
        public void TestRequestSerialisation() {
            // prepare message
            MethodInfo methodToCall = typeof(TestService).GetMethod("Add");
            object[] args = new object[] { ((Int32) 1), ((Int32) 2) };
            string uri = "iiop://localhost:8087/testuri"; // Giop 1.2 will be used because no version spec in uri
            Ior target = m_iiopUrlUtil.CreateIorForUrl(uri, "");
            TestMessage msg = new TestMessage(methodToCall, args, uri);
            // prepare connection context
            GiopClientConnectionDesc conDesc = new GiopClientConnectionDesc(null, null,
                                                                            new GiopRequestNumberGenerator(), null);

            // serialise
            MemoryStream targetStream = new MemoryStream();
 
            uint reqId = 5;
            m_handler.SerialiseOutgoingRequestMessage(msg, target.Profiles[0], conDesc, targetStream, reqId);
 
            // check to serialised stream
            targetStream.Seek(0, SeekOrigin.Begin);
 
            CdrInputStreamImpl cdrIn = new CdrInputStreamImpl(targetStream);
            cdrIn.ConfigStream(0, new GiopVersion(1, 2));
 
            // first is Giop-magic
            byte data;
            AssertBytesFollowing(m_giopMagic, cdrIn);
            // Giop version
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(1, data);
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(2, data);
            // flags: big-endian, no fragements
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(0, data);
            // Giop Msg type: request
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(0, data);
            // Giop Msg length
            uint msgLength = cdrIn.ReadULong();
            cdrIn.SetMaxLength(msgLength);
            // req-id
            Assert.AreEqual(reqId, cdrIn.ReadULong());
            // response flags
            data = (byte) cdrIn.ReadOctet();
            Assert.AreEqual(3, data);
            cdrIn.ReadPadding(3); // reserved
            // target
            Assert.AreEqual(0, cdrIn.ReadUShort());
            // target must be testuri encoded as ascii-characters
            Assert.AreEqual(7 , cdrIn.ReadULong());
            AssertBytesFollowing(
                new byte[] { 116, 101, 115, 116, 117, 114, 105 },
                cdrIn);
            // now the target method follows: Add (string is terminated by a zero)
            Assert.AreEqual(4, cdrIn.ReadULong());
            AssertBytesFollowing(new byte[] { 65, 100, 100, 0}, cdrIn);
            // now service contexts are following
            SkipServiceContexts(cdrIn);
            // Giop 1.2, must be aligned on 8
            cdrIn.ForceReadAlign(Aligns.Align8);
            // now params are following
            Assert.AreEqual(1, cdrIn.ReadLong());
            Assert.AreEqual(2, cdrIn.ReadLong());
        }
Exemplo n.º 11
0
 private CdrInputStreamImpl CreateInputStream(byte[] content, bool isLittleEndian)
 {
     MemoryStream stream = new MemoryStream(content);
     CdrInputStreamImpl cdrStream = new CdrInputStreamImpl(stream);
     byte endianFlag = 0;
     if (isLittleEndian)
     {
         endianFlag = 1;
     }
     cdrStream.ConfigStream(endianFlag, new GiopVersion(1, 1));
     cdrStream.SetMaxLength((uint)content.Length);
     cdrStream.WCharSet = (int)Ch.Elca.Iiop.Services.WCharSet.UTF16;
     return cdrStream;
 }
Exemplo n.º 12
0
 internal GiopHeader(CdrInputStreamImpl stream) : this(stream.ReadOpaque(12)) {            
     stream.ConfigStream(m_flags, m_version);
     stream.SetMaxLength(m_msgLength);
 }
        public void TestWCharSetDefinedServer() {
            byte[] sourceContent = 
                new byte[] {
                             0, 0, 0, 5, 3, 0, 0, 0,
                             0, 0, 0, 0, 
                             0, 0, 0, 7, 116, 101, 115, 116,
                             117, 114, 105, 0,
                             0, 0, 0, 12, 69, 99, 104, 111, 
                             87, 83, 116, 114, 105, 110, 103, 0,
                             0, 0, 0, 1, 0, 0, 0, 1,
                             0, 0, 0, 12, 0, 0, 0, 0,
                             0, 1, 0, 1, 0, 1, 1, 9,
                             0, 0, 0, 8, 0, 116, 0, 101,
                             0, 115, 0, 116};
            MemoryStream sourceStream =
                new MemoryStream(sourceContent);
            
            // create a connection context: this is needed for request deserialisation
            GiopConnectionDesc conDesc = new GiopConnectionDesc(null, null);

            // go to stream begin
            sourceStream.Seek(0, SeekOrigin.Begin);
            
            GiopMessageBodySerialiser ser = new GiopMessageBodySerialiser(
                                                new ArgumentsSerializerFactory(m_serFactory));
            
            CdrInputStreamImpl cdrSourceStream = 
                new CdrInputStreamImpl(sourceStream);
            cdrSourceStream.ConfigStream(0, new GiopVersion(1, 2));
            cdrSourceStream.SetMaxLength((uint)sourceContent.Length);
 
            IMessage result = null;
            TestStringInterfaceImpl service = new TestStringInterfaceImpl();
            try {
                // object which should be called
                string uri = "testuri";
                RemotingServices.Marshal(service, uri);

                // deserialise request message
                result = ser.DeserialiseRequest(cdrSourceStream, new GiopVersion(1,2),
                                                conDesc, InterceptorManager.EmptyInterceptorOptions);
            } finally {
                RemotingServices.Disconnect(service);
            }

            // now check if values are correct
            Assert.IsTrue(result != null, "deserialised message is null");
            object[] args = (object[])result.Properties[SimpleGiopMsg.ARGS_KEY];
            Assert.IsTrue(args != null, "args is null");
            Assert.AreEqual(1, args.Length);
            Assert.AreEqual("test", args[0]);
        }
        public void TestWCharSetNotDefinedServer() {
            byte[] sourceContent = 
                new byte[] {
                             0, 0, 0, 5, 3, 0, 0, 0,
                             0, 0, 0, 0, 
                             0, 0, 0, 7, 116, 101, 115, 116,
                             117, 114, 105, 0,
                             0, 0, 0, 12, 69, 99, 104, 111, 
                             87, 83, 116, 114, 105, 110, 103, 0,
                             0, 0, 0, 0, 0, 0, 0, 0, 
                             0, 0, 0, 8, 0, 116, 0, 101,
                             0, 115, 0, 116};
            MemoryStream sourceStream =
                new MemoryStream(sourceContent);
            
            // create a connection context: this is needed for request deserialisation
            GiopConnectionDesc conDesc = new GiopConnectionDesc(null, null);

            // go to stream begin
            sourceStream.Seek(0, SeekOrigin.Begin);
            
            GiopMessageBodySerialiser ser = new GiopMessageBodySerialiser(
                                                new ArgumentsSerializerFactory(m_serFactory));
            
            CdrInputStreamImpl cdrSourceStream = 
                new CdrInputStreamImpl(sourceStream);
            cdrSourceStream.ConfigStream(0, new GiopVersion(1, 2));
            cdrSourceStream.SetMaxLength((uint)sourceContent.Length);
 
            IMessage result = null;
            TestStringInterfaceImpl service = new TestStringInterfaceImpl();
            try {
                // object which should be called
                string uri = "testuri";
                RemotingServices.Marshal(service, uri);

                // deserialise request message
                result = ser.DeserialiseRequest(cdrSourceStream, new GiopVersion(1,2),
                                                conDesc, InterceptorManager.EmptyInterceptorOptions);
                Assert.Fail("no exception, although code set not set");
            } catch (RequestDeserializationException rde) {
                Assert.NotNull(rde.Reason, "rde inner exception");
                Assert.AreEqual(typeof(BAD_PARAM), rde.Reason.GetType(), "rde type");
            } finally {
                RemotingServices.Disconnect(service);
            }
        }
Exemplo n.º 15
0
        public void TestReplySerialisation()
        {
            // request msg the reply is for
            MethodInfo methodToCall = typeof(TestService).GetMethod("Add");

            object[]    args    = new object[] { ((Int32)1), ((Int32)2) };
            string      uri     = "iiop://localhost:8087/testuri"; // Giop 1.2 will be used because no version spec in uri
            GiopVersion version = new GiopVersion(1, 2);
            TestMessage msg     = new TestMessage(methodToCall, args, uri);

            msg.Properties[SimpleGiopMsg.REQUEST_ID_KEY]      = (uint)5;
            msg.Properties[SimpleGiopMsg.GIOP_VERSION_KEY]    = version;
            msg.Properties[SimpleGiopMsg.CALLED_METHOD_KEY]   = methodToCall;
            msg.Properties[SimpleGiopMsg.IDL_METHOD_NAME_KEY] = methodToCall.Name; // done by serialization normally
            // create a connection context
            GiopConnectionDesc conDesc = new GiopConnectionDesc(null, null);

            // create the reply
            ReturnMessage retMsg = new ReturnMessage((Int32)3, new object[0], 0, null, msg);

            MemoryStream targetStream = new MemoryStream();

            m_handler.SerialiseOutgoingReplyMessage(retMsg, msg, version,
                                                    targetStream, conDesc);

            // check to serialised stream
            targetStream.Seek(0, SeekOrigin.Begin);

            CdrInputStreamImpl cdrIn = new CdrInputStreamImpl(targetStream);

            cdrIn.ConfigStream(0, new GiopVersion(1, 2));

            // first is Giop-magic
            byte data;

            AssertBytesFollowing(m_giopMagic, cdrIn);
            // Giop version
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(1, data);
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(2, data);
            // flags: big-endian, no fragements
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(0, data);
            // Giop Msg type: reply
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(1, data);
            // Giop Msg length
            uint msgLength = cdrIn.ReadULong();

            cdrIn.SetMaxLength(msgLength);
            // req-id
            Assert.AreEqual(5, cdrIn.ReadULong());
            // response status: NO_EXCEPTION
            Assert.AreEqual(0, cdrIn.ReadULong());
            // ignore service contexts
            SkipServiceContexts(cdrIn);
            // Giop 1.2, must be aligned on 8
            cdrIn.ForceReadAlign(Aligns.Align8);
            // now return value is following
            Assert.AreEqual(3, cdrIn.ReadLong());
        }
Exemplo n.º 16
0
        public void TestRequestSerialisation()
        {
            // prepare message
            MethodInfo methodToCall = typeof(TestService).GetMethod("Add");

            object[]    args   = new object[] { ((Int32)1), ((Int32)2) };
            string      uri    = "iiop://localhost:8087/testuri"; // Giop 1.2 will be used because no version spec in uri
            Ior         target = m_iiopUrlUtil.CreateIorForUrl(uri, "");
            TestMessage msg    = new TestMessage(methodToCall, args, uri);
            // prepare connection context
            GiopClientConnectionDesc conDesc = new GiopClientConnectionDesc(null, null,
                                                                            new GiopRequestNumberGenerator(), null);

            // serialise
            MemoryStream targetStream = new MemoryStream();

            uint reqId = 5;

            m_handler.SerialiseOutgoingRequestMessage(msg, target.Profiles[0], conDesc, targetStream, reqId);

            // check to serialised stream
            targetStream.Seek(0, SeekOrigin.Begin);

            CdrInputStreamImpl cdrIn = new CdrInputStreamImpl(targetStream);

            cdrIn.ConfigStream(0, new GiopVersion(1, 2));

            // first is Giop-magic
            byte data;

            AssertBytesFollowing(m_giopMagic, cdrIn);
            // Giop version
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(1, data);
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(2, data);
            // flags: big-endian, no fragements
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(0, data);
            // Giop Msg type: request
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(0, data);
            // Giop Msg length
            uint msgLength = cdrIn.ReadULong();

            cdrIn.SetMaxLength(msgLength);
            // req-id
            Assert.AreEqual(reqId, cdrIn.ReadULong());
            // response flags
            data = (byte)cdrIn.ReadOctet();
            Assert.AreEqual(3, data);
            cdrIn.ReadPadding(3); // reserved
            // target
            Assert.AreEqual(0, cdrIn.ReadUShort());
            // target must be testuri encoded as ascii-characters
            Assert.AreEqual(7, cdrIn.ReadULong());
            AssertBytesFollowing(
                new byte[] { 116, 101, 115, 116, 117, 114, 105 },
                cdrIn);
            // now the target method follows: Add (string is terminated by a zero)
            Assert.AreEqual(4, cdrIn.ReadULong());
            AssertBytesFollowing(new byte[] { 65, 100, 100, 0 }, cdrIn);
            // now service contexts are following
            SkipServiceContexts(cdrIn);
            // Giop 1.2, must be aligned on 8
            cdrIn.ForceReadAlign(Aligns.Align8);
            // now params are following
            Assert.AreEqual(1, cdrIn.ReadLong());
            Assert.AreEqual(2, cdrIn.ReadLong());
        }