示例#1
0
        /// <summary>
        /// deserialise from input stream
        /// </summary>
        internal ServiceContext(CdrInputStream inputStream)
        {
            context_id = (int)inputStream.ReadULong();
            int contextDataLength = (int)inputStream.ReadULong();

            context_data = inputStream.ReadOpaque(contextDataLength);
        }
示例#2
0
        /// <summary>
        /// deserialise from input stream
        /// </summary>
        internal TaggedComponent(CdrInputStream inputStream)
        {
            this.tag = (int)inputStream.ReadULong();
            int componentDataLength = (int)inputStream.ReadULong();

            this.component_data = inputStream.ReadOpaque(componentDataLength);
        }
示例#3
0
        protected override void ReadDataFromStream(CdrInputStream inputStream)
        {
            Debug.WriteLine("parse unsupported ior profile");
            uint length = inputStream.ReadULong();

            m_data = inputStream.ReadOpaque((int)length);

            Debug.WriteLine("parsing unsupported profile completed");
        }
示例#4
0
        protected override void ReadDataFromStream(CdrInputStream inputStream)
        {
            Debug.WriteLine("parse unsupported ior profile");
            uint length = inputStream.ReadULong();
            m_data = inputStream.ReadOpaque((int)length);

            Debug.WriteLine("parsing unsupported profile completed");
        }
        /// <summary>
        /// Deserialises the Giop Message body for a request
        /// </summary>
        /// <param name="cdrStream"></param>
        /// <param name="version"></param>
        /// <returns></returns>
        internal IMessage DeserialiseRequest(CdrInputStream cdrStream, GiopVersion version,
                                             GiopConnectionDesc conDesc, IInterceptionOption[] interceptionOptions) {
            MethodCall methodCallInfo = null;
            GiopServerRequest serverRequest = new GiopServerRequest(conDesc, interceptionOptions);
            serverRequest.Version = version;
            try {
                ServiceContextList cntxColl = null;
                if (version.IsBeforeGiop1_2()) { // GIOP 1.0 / 1.1
                    cntxColl = DeserialiseContext(cdrStream); // Service context deser
                }
                
                // read the request-ID and set it as a message property
                uint requestId = cdrStream.ReadULong(); 
                serverRequest.RequestId = requestId;
                Trace.WriteLine("received a message with reqId: " + requestId);
                // read response-flags:
                byte respFlags = cdrStream.ReadOctet(); Debug.WriteLine("response-flags: " + respFlags);
                cdrStream.ReadPadding(3); // read reserved bytes
                serverRequest.ResponseFlags = respFlags;
                
                // decode the target of this request
                byte[] objectKey;
                serverRequest.RequestUri = ReadTarget(cdrStream, version, out objectKey);
                serverRequest.ObjectKey = objectKey;
                serverRequest.RequestMethodName = cdrStream.ReadString();
                Trace.WriteLine("call for .NET object: " + serverRequest.RequestUri + 
                                ", methodName: " + serverRequest.RequestMethodName);

                if (version.IsBeforeGiop1_2()) { // GIOP 1.0 / 1.1
                    uint principalLength = cdrStream.ReadULong();
                    cdrStream.ReadOpaque((int)principalLength);
                } else {
                    cntxColl = DeserialiseContext(cdrStream); // Service context deser
                }
                PerformCodeSetEstablishmentServer(version, conDesc, cntxColl);
                // set codeset for stream
                SetCodeSet(cdrStream, conDesc);
                // request header deserialised

                serverRequest.RequestServiceContext = cntxColl;
                serverRequest.InterceptReceiveRequestServiceContexts();
                serverRequest.SetThreadScopeCurrentFromPICurrent(); // copy request scope picurrent to thread scope pi-current
                
                serverRequest.ResolveTargetType(); // determine the .net target object type and check if target object is available
                ArgumentsSerializer argSer =
                    m_argSerFactory.Create(serverRequest.ServerTypeType);
                MethodInfo called =
                    argSer.GetMethodInfoFor(serverRequest.RequestMethodName);
                serverRequest.ResolveCalledMethod(called); // set target method and handle special cases
                IDictionary contextElements;
                DeserialiseRequestBody(cdrStream, version, serverRequest, argSer, out contextElements);
                methodCallInfo = new MethodCall(serverRequest.Request);
                if (contextElements != null) {
                    AddContextElementsToCallContext(methodCallInfo.LogicalCallContext, contextElements);
                }
                serverRequest.UpdateWithFinalRequest(methodCallInfo);
                serverRequest.InterceptReceiveRequest(); // all information now available
                return methodCallInfo;
            } catch (Exception e) {
                // an Exception encountered during deserialisation
                try {
                    cdrStream.SkipRest(); // skip rest of the message, to not corrupt the stream
                } catch (Exception) {
                    // ignore exception here, already an other exception leading to problems
                }
                ReturnMessage exceptionResponse;
                exceptionResponse = new ReturnMessage(e, methodCallInfo);
                throw new RequestDeserializationException(e, serverRequest.Request, exceptionResponse);
                // send exception interception point will be called when serialising exception response
            }
        }
 private byte[] ReadTargetKey(CdrInputStream cdrStream) {
     uint length = cdrStream.ReadULong();
     Debug.WriteLine("object key follows:");
     byte[] objectKey = cdrStream.ReadOpaque((int)length);
     return objectKey;
 }
示例#7
0
 /// <summary>
 /// deserialise from input stream
 /// </summary>
 internal ServiceContext(CdrInputStream inputStream) {
     context_id = (int)inputStream.ReadULong();
     int contextDataLength = (int)inputStream.ReadULong();
     context_data = inputStream.ReadOpaque(contextDataLength);
 }
 /// <summary>
 /// deserialise from input stream
 /// </summary>
 internal TaggedComponent(CdrInputStream inputStream) {
     this.tag = (int)inputStream.ReadULong();
     int componentDataLength = (int)inputStream.ReadULong();
     this.component_data = inputStream.ReadOpaque(componentDataLength);
 }