public ServerProcessing ProcessMessage(
			IServerChannelSinkStack sinkStack, 
			IMessage requestMsg, 
			ITransportHeaders requestHeaders, 
			Stream requestStream, 
			out IMessage responseMsg, 
			out ITransportHeaders responseHeaders, 
			out Stream responseStream)
		{
			var ip = requestHeaders[CommonTransportKeys.IPAddress] as IPAddress;
			CallContext.SetData("ClientIPAddress", ip);

			var connectionId = (Int64)requestHeaders[CommonTransportKeys.ConnectionId];
			CallContext.SetData("ClientConnectionId", connectionId); 
			
			if (_next != null) 
			{
				var spres =  _next.ProcessMessage (sinkStack,requestMsg, requestHeaders,requestStream,out responseMsg,out responseHeaders,out responseStream);
				return spres;
			} 
			else 
			{
				responseMsg=null;
				responseHeaders=null;
				responseStream=null;
				return new ServerProcessing();
			}
		}
Exemplo n.º 2
0
		/// <summary></summary>
		public ServerProcessing ProcessMessage(
			IServerChannelSinkStack sinkStack,
			IMessage requestMsg,
			ITransportHeaders requestHeaders,
			Stream requestStream,
			out IMessage responseMsg,
			out ITransportHeaders responseHeaders,
			out Stream responseStream)
		{
			if (NextChannelSink != null)
			{
				SetClientIpAddressDataHelper(requestHeaders);
				ServerProcessing spres = NextChannelSink.ProcessMessage(
					sinkStack,
					requestMsg,
					requestHeaders,
					requestStream,
					out responseMsg,
					out responseHeaders,
					out responseStream);
				return spres;
			}

			responseMsg = null;
			responseHeaders = null;
			responseStream = null;
			return new ServerProcessing();
		}
		public ServerProcessing ProcessMessage(
			IServerChannelSinkStack sinkStack_in,
			IMessage requestMsg_in,
			ITransportHeaders requestHeaders_in,
			Stream requestStream_in,

			out IMessage responseMsg_out,
			out ITransportHeaders responseHeaders_out,
			out Stream responseStream_out
		) {
			if (nextchannelsink_ != null) {
				CallContext.SetData(
					"ClientIPAddress", 
					((IPAddress)requestHeaders_in[CommonTransportKeys.IPAddress]).ToString()
				);
				ServerProcessing _serverprocessing = NextChannelSink.ProcessMessage(
					sinkStack_in,
					requestMsg_in,
					requestHeaders_in,
					requestStream_in,

					out responseMsg_out,
					out responseHeaders_out,
					out responseStream_out
				);
				return _serverprocessing;
			} else {
				responseMsg_out = null;
				responseHeaders_out = null;
				responseStream_out = null;
				return new ServerProcessing();
			}
		}
Exemplo n.º 4
0
		public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack, IMessage requestMsg,
			ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg,
			out ITransportHeaders responseHeaders, out Stream responseStream)
		{
			//we know we never call this
			throw new NotSupportedException ();
		}
        [System.Security.SecurityCritical]  // auto-generated
        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
            IMessage requestMsg,
            ITransportHeaders requestHeaders, Stream requestStream,
            out IMessage responseMsg, out ITransportHeaders responseHeaders,
            out Stream responseStream)
        {
            if (requestMsg == null)
            {
                throw new ArgumentNullException(
                    "requestMsg", 
                    Environment.GetResourceString("Remoting_Channel_DispatchSinkMessageMissing"));
            }
            Contract.EndContractBlock();

            // check arguments
            if (requestStream != null)
            {
                throw new RemotingException(
                    Environment.GetResourceString("Remoting_Channel_DispatchSinkWantsNullRequestStream"));
            }

            responseHeaders = null;
            responseStream = null;
            return ChannelServices.DispatchMessage(sinkStack, requestMsg, out responseMsg);                
        } // ProcessMessage
Exemplo n.º 6
0
    public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
                                            IMessage requestMsg,
                                            ITransportHeaders requestHeaders,
                                            Stream requestStream,
                                            out IMessage responseMsg,
                                            out ITransportHeaders responseHeaders,
                                            out Stream responseStream)
    {
      IMessage call;
      MessageType mtype = (Ice.MessageType) requestHeaders["__iceMessageType"];
      bool isBatched = (mtype == Ice.MessageType.BatchRequest);

      try {
        if (requestMsg == null) {
          requestMsg = IceChannelUtils.ProtocolRequestToMessage (requestStream, isBatched);
        } else {
          call = requestMsg;
        }

        Trace.WriteLine ("IceServerFormatterSink: passing upstream");
        _next.ProcessMessage (sinkStack, requestMsg, requestHeaders, null,
                              out responseMsg, out responseHeaders, out responseStream);
        Trace.WriteLine ("IceServerFormatterSink: returned");

        responseStream = new MemoryStream();
        IceChannelUtils.MessageToProtocolReply (requestMsg, responseMsg, responseStream);
      } catch (Exception e) {
        Console.WriteLine (e.ToString());
        throw e;
      }
      return ServerProcessing.Complete;
    }
 public ServerProcessing ProcessMessage(
         IServerChannelSinkStack sinkStack,
         IMessage requestMsg,
         ITransportHeaders requestHeaders,
         Stream requestStream,
         out IMessage responseMsg,
         out ITransportHeaders responseHeaders,
         out Stream responseStream)
 {
     if (_nextSink != null)
         {
             IPAddress ip =
                 requestHeaders[CommonTransportKeys.IPAddress] as IPAddress;
             CallContext.SetData("ClientIPAddress", ip);
             ServerProcessing spres = _nextSink.ProcessMessage(
                 sinkStack,
                 requestMsg,
                 requestHeaders,
                 requestStream,
                 out responseMsg,
                 out responseHeaders,
                 out responseStream);
             return spres;
         }
         else
         {
             responseMsg = null;
             responseHeaders = null;
             responseStream = null;
             return new ServerProcessing();
         }
 }
Exemplo n.º 8
0
		public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
							IMessage requestMsg,
							ITransportHeaders requestHeaders,
							Stream requestStream,
							out IMessage responseMsg,
							out ITransportHeaders responseHeaders,
							out Stream responseStream)
		{
			IMessage call;
			
			string uri = (string)requestHeaders [CommonTransportKeys.RequestUri];

			if (requestMsg == null) {
				call = (IMessage)format.DeserializeRequest (requestStream, uri);
			} else { 
				call = requestMsg;
			}

			next_sink.ProcessMessage (sinkStack, call, requestHeaders, null,
						  out responseMsg, out responseHeaders, out responseStream);
						
			responseStream = new MemoryStream ();

			format.SerializeResponse (responseStream, responseMsg);
			
			return ServerProcessing.Complete;
		}
Exemplo n.º 9
0
 public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMessage, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMessage, out ITransportHeaders responseHeaders, out Stream responseStream)
 {
     requestStream = Zip.Decompress(requestStream);
     sinkStack.Push(this, null);
     ServerProcessing processing = this.m_NextSink.ProcessMessage(sinkStack, requestMessage, requestHeaders, requestStream, out responseMessage, out responseHeaders, out responseStream);
     responseStream = Zip.Compress(responseStream);
     return processing;
 }
    public static ServerProcessing DispatchMessage(IServerChannelSinkStack sinkStack, System.Runtime.Remoting.Messaging.IMessage msg, out System.Runtime.Remoting.Messaging.IMessage replyMsg)
    {
      Contract.Ensures(((System.Runtime.Remoting.Channels.ServerProcessing)(0)) <= Contract.Result<System.Runtime.Remoting.Channels.ServerProcessing>());
      Contract.Ensures(Contract.Result<System.Runtime.Remoting.Channels.ServerProcessing>() <= ((System.Runtime.Remoting.Channels.ServerProcessing)(1)));

      replyMsg = default(System.Runtime.Remoting.Messaging.IMessage);

      return default(ServerProcessing);
    }
 public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
 {
     if(requestMsg is IMethodCallMessage)
     {
         IMethodCallMessage call = (IMethodCallMessage)requestMsg;
         if(!provider.Filter(call.MethodBase))
             throw new MemberAccessException("You are not allowed to access this member via remoting!");
     }
     return next.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
 }
Exemplo n.º 12
0
		public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
							IMessage requestMsg,
							ITransportHeaders requestHeaders,
							Stream requestStream,
							out IMessage responseMsg,
							out ITransportHeaders responseHeaders,
							out Stream responseStream)
		{
			// this is the first sink, and SimpleServerChannel does not call it.
			throw new NotSupportedException ();
		}
Exemplo n.º 13
0
 public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
                                         IMessage requestMsg,
                                         ITransportHeaders requestHeaders,
                                         Stream requestStream,
                                         out IMessage responseMsg,
                                         out ITransportHeaders responseHeaders,
                                         out Stream responseStream)
 {
   // this sink is always first, and this method isn't usued as the entry point
   throw new NotSupportedException();
 }
Exemplo n.º 14
0
 public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
 {
     if (this._nextSink != null)
     {
         object obj1 = requestHeaders["__IPAddress"];
         return this._nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
     }
     responseMsg = null;
     responseHeaders = null;
     responseStream = null;
     return ServerProcessing.Complete;
 }
	public static ServerProcessing DispatchMessage
				(IServerChannelSinkStack sinkStack, IMessage msg,
		    	 out IMessage replyMsg)
			{
				if(msg == null)
				{
					throw new ArgumentNullException("msg");
				}
				// TODO
				replyMsg = null;
				return ServerProcessing.Complete;
			}
Exemplo n.º 16
0
		public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
							IMessage requestMsg,
							ITransportHeaders requestHeaders,
							Stream requestStream,
							out IMessage responseMsg,
							out ITransportHeaders responseHeaders,
							out Stream responseStream)
		{
			responseHeaders = null;			
			responseStream = null;

			return ChannelServices.DispatchMessage(sinkStack, requestMsg, out responseMsg);
		}
            ServerProcessing IServerChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
            {
                BinaryFormatter binaryFormatter = new BinaryFormatter();
                binaryFormatter.Binder = new GenericsVTSSerializationBinder();
                requestMsg = (IMessage)binaryFormatter.Deserialize(requestStream);
                requestMsg.Properties["__Uri"] = requestHeaders["__RequestUri"];

                next.ProcessMessage(sinkStack, requestMsg, null, null, out responseMsg, out responseHeaders, out responseStream);

                responseHeaders = new TransportHeaders();
                responseStream = new MemoryStream();
                binaryFormatter.Serialize(responseStream, responseMsg);
                responseStream.Position = 0;

                return ServerProcessing.Complete;
            }
Exemplo n.º 18
0
 public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
 {
     IPAddress address = requestHeaders["__IPAddress"] as IPAddress;
       Console.Write("Process message from {0} ... ", address);
       if (!this.MatchIPAddress(address) ^ this.m_IsAccept)
       {
     TraceInfoEvent.Raise(string.Format("{0} is accepted by IPFilterChannelSink.", address));
     Console.WriteLine("accepted");
     return this.m_NextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
       }
       TraceInfoEvent.Raise(string.Format("{0} is rejected by IPFilterChannelSink.", address));
       responseHeaders = new TransportHeaders();
       responseMsg = null;
       responseStream = null;
       return ServerProcessing.Complete;
 }
Exemplo n.º 19
0
 public ServerProcessing ProcessMessage(
     IServerChannelSinkStack sinkStack,
     IMessage requestMsg,
     ITransportHeaders requestHeaders,
     Stream requestStream,
     out IMessage responseMsg,
     out ITransportHeaders responseHeaders,
     out Stream responseStream)
 {
     try
     {
         if (_next != null)
         {
             ip = (IPAddress)requestHeaders[CommonTransportKeys.IPAddress];
             if (ip != null && (ip.ToString().Trim() == "127.0.0.1" || CheckAuthorizedIP(ip.ToString())))
             {
                 Common.CurrentStatus(ip.ToString().Trim());
                 ServerProcessing spres = _next.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
                 return spres;
             }
             else
             {
                 Common.Log("Unauthorized Remoting IP: " + ip.ToString().Trim());
                 responseMsg = null;
                 responseHeaders = null;
                 responseStream = null;
                 return new ServerProcessing();
             }
         }
         else
         {
             responseMsg = null;
             responseHeaders = null;
             responseStream = null;
             return new ServerProcessing();
         }
     }
     catch (Exception err)
     {
         Common.Log(err);
         responseMsg = null;
         responseHeaders = null;
         responseStream = null;
         return new ServerProcessing();
     }
 }
Exemplo n.º 20
0
 public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMessage, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMessage, out ITransportHeaders responseHeaders, out Stream responseStream)
 {
     if (this.m_NextSink != null)
     {
         LogicalCallContext context = (LogicalCallContext) requestMessage.Properties["__CallContext"];
         if ((context != null) && (context.GetData("PrincipalContextData") != null))
         {
             PrincipalContextData data = (PrincipalContextData) context.GetData("PrincipalContextData");
             Thread.CurrentPrincipal = data.Principal;
         }
         return this.m_NextSink.ProcessMessage(sinkStack, requestMessage, requestHeaders, requestStream, out responseMessage, out responseHeaders, out responseStream);
     }
     responseMessage = null;
     responseHeaders = null;
     responseStream = null;
     return ServerProcessing.Complete;
 }
Exemplo n.º 21
0
 public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
 {
     sinkStack.Push(this, null);
     ServerProcessing serverProcessing = _nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
     switch (serverProcessing)
     {
         case ServerProcessing.Async:
             sinkStack.StoreAndDispatch(this, null);
             return serverProcessing;
         case ServerProcessing.OneWay:
         case ServerProcessing.Complete:
             sinkStack.Pop(this);
             return serverProcessing;
         default:
             return serverProcessing;
     }
 }
        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            bool clientCompressed = false;

            // decompress the shits
            Stream decompressedStream;
            if (object.Equals(requestHeaders[CompressionHelper.CompressKey], CompressionHelper.CompressedFlag)) {
                //Debug.WriteLine("client compressed");
                clientCompressed = true;
                decompressedStream = CompressionHelper.DecompressStream(requestStream);
                // close the request stream
                requestStream.Close();
            }
            else {
                if (object.Equals(requestHeaders[CompressionHelper.CompressKey], CompressionHelper.CompressRequest)) {
                    //Debug.WriteLine("client requesting compress");
                    clientCompressed = true;
                }

                decompressedStream = requestStream;
            }

            sinkStack.Push(this, new ClientState(clientCompressed));

            // send the decompressed message on through the sink chain
            ServerProcessing processingResult = _next.ProcessMessage(sinkStack, requestMsg, requestHeaders, decompressedStream, out responseMsg, out responseHeaders, out responseStream);

            // get the compressed stream
            if (clientCompressed && processingResult == ServerProcessing.Complete) {
                Stream compressedStream = CompressionHelper.CompressStream(responseStream);
                responseStream.Close();
                responseStream = compressedStream;
                responseHeaders[CompressionHelper.CompressKey] = CompressionHelper.CompressedFlag;
            }

            // Take us off the stack and return the result.
            if (processingResult == ServerProcessing.Async) {
                sinkStack.Store(this, new ClientState(clientCompressed));
            }
            else {
                sinkStack.Pop(this);
            }
            return processingResult;
        }
Exemplo n.º 23
0
    public ServerProcessing ProcessMessage(
      IServerChannelSinkStack sinkStack,
      IMessage requestMsg,
      ITransportHeaders requestHeaders,
      Stream requestStream,
      out IMessage responseMsg,
      out ITransportHeaders responseHeaders,
      out Stream responseStream
      )
    {
      // use presence of SOAPAction header to determine if this is a SOAP
      // request - if so pass onto next sink in chain
      string soapAction = (string) requestHeaders["SOAPAction"];
      if (soapAction != null)
      {
        return m_next.ProcessMessage(sinkStack, requestMsg, requestHeaders, 
          requestStream, out responseMsg, out responseHeaders, 
          out responseStream);
      }

      // for time being assume we have an XML-RPC request (need to improve
      // this in case there are other non-SOAP formatters in the chain)
      try
      {
        MethodCall mthdCall = DeserializeRequest(requestHeaders, requestStream);
        sinkStack.Push(this, mthdCall);
        // forward to next sink in chain - pass request stream as null to 
        // indicate that we have deserialized the request
        m_next.ProcessMessage(sinkStack, mthdCall, requestHeaders, null, 
          out responseMsg, out responseHeaders, out responseStream);
        SerializeResponse(responseMsg, ref responseHeaders, ref responseStream);
      }
      catch (Exception ex)
      {
        responseMsg = new ReturnMessage(ex, (IMethodCallMessage)requestMsg);
        responseStream = new MemoryStream();
        XmlRpcFaultException fex = new XmlRpcFaultException(0, ex.Message);
        XmlRpcSerializer serializer = new XmlRpcSerializer();
        serializer.SerializeFaultResponse(responseStream, 
          (XmlRpcFaultException)fex);
        responseHeaders = new TransportHeaders();
      }
      return ServerProcessing.Complete;
    }
		ServerProcessing IServerChannelSink.ProcessMessage(IServerChannelSinkStack sinkStack, System.Runtime.Remoting.Messaging.IMessage requestMsg, ITransportHeaders requestHeaders, System.IO.Stream requestStream, out System.Runtime.Remoting.Messaging.IMessage responseMsg, out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
		{
			if (Application.OpenForms.Count > 0) {
				IMessage outResponseMsg = null;
				ITransportHeaders outResponseHeaders = null;
				Stream outResponseStream = null;
				ServerProcessing returnValue = ServerProcessing.Complete;
				Application.OpenForms[0].Invoke(new EventHandler(delegate
				{
					returnValue = nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out outResponseMsg, out outResponseHeaders, out outResponseStream);
				}));
				responseMsg = outResponseMsg;
				responseHeaders = outResponseHeaders;
				responseStream = outResponseStream;
				return returnValue;
			} else {
				return nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
			}
		}
        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
			IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream,
			out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            object handback = ContextUtil.NotifyServerMessage(requestMsg, requestHeaders);
            sinkStack.Push(this, handback);

            ServerProcessing result = _nextSink.ProcessMessage(sinkStack,
                requestMsg, requestHeaders, requestStream,
                out responseMsg,
                out responseHeaders,
                out responseStream);

            if (result != ServerProcessing.Async)
            {
                ContextUtil.NotifyServerMessageResponse(responseMsg, responseHeaders, handback);
            }
            return result;
        }
Exemplo n.º 26
0
		public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
							IMessage requestMsg,
							ITransportHeaders requestHeaders,
							Stream requestStream,
							out IMessage responseMsg,
							out ITransportHeaders responseHeaders,
							out Stream responseStream)
		{
			responseMsg = null;
			responseStream = null;
			responseHeaders = null;
			string verb = requestHeaders [CommonTransportKeys.RequestVerb] as string;
			string uri = (string) requestHeaders [CommonTransportKeys.RequestUri];
			
			if (verb == "GET" && uri.EndsWith ("?wsdl"))
			{
				try
				{
					uri = uri.Substring (0, uri.Length - 5);
					Type type = RemotingServices.GetServerTypeForUri (uri);
					
					string url = _channel.GetUrlsForUri (uri)[0];
					ServiceType st = new ServiceType (type, url);
					
					responseStream = new MemoryStream ();
					MetaData.ConvertTypesToSchemaToStream (new ServiceType[] {st}, SdlType.Wsdl, responseStream);
					responseStream.Position = 0;
					responseMsg = null;
					responseHeaders = new TransportHeaders ();
					responseHeaders [CommonTransportKeys.ContentType] = "text/xml";
				}
				catch (Exception ex)
				{
					responseHeaders = new TransportHeaders ();
					responseHeaders [CommonTransportKeys.HttpStatusCode] = "400";
					responseStream = new MemoryStream (Encoding.UTF8.GetBytes (ex.ToString ()));
				}
				return ServerProcessing.Complete;
			}
			else
				return _next.ProcessMessage (sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);
		}
		public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
							IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream,
							out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
		{
			IMethodCallMessage msg = (IMethodCallMessage) requestMsg;
//			Console.WriteLine ("MESSAGE: " + msg.TypeName + " - " + msg.MethodName);
			
			sinkStack.Push (this, null);

			if (Attribute.IsDefined (msg.MethodBase, typeof(NoGuiDispatchAttribute))) {
				ServerProcessing ret;
				try {
					ret = nextSink.ProcessMessage (sinkStack,
								 requestMsg,
								 requestHeaders,
								 requestStream,
								 out responseMsg,
								 out responseHeaders,
								 out responseStream);
				} finally {
					sinkStack.Pop (this);
				}
				return ret;
			}
			else
			{
				Dispatcher d = new Dispatcher ();
				d.nextSink = nextSink;
				d.sinkStack = sinkStack;
				d.requestMsg = requestMsg;
				d.requestHeaders = requestHeaders;
				d.requestStream = requestStream;
				
				Gtk.Application.Invoke (d.Dispatch);
				responseMsg = null;
				responseHeaders = null;
				responseStream = null;
				
				return ServerProcessing.Async;
			}
		}
        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
            IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream,
            out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            if (requestHeaders["SOAPAction"] != null)
            {
                // pass to next sink if this is a SOAP request with SOAPAction header.
                return NextChannelSink.ProcessMessage(sinkStack,
                    requestMsg, requestHeaders, requestStream,
                    out responseMsg, out responseHeaders, out responseStream);
            }

            XmlRpcHttpRequestConfig requestConfig = GetConfig(requestHeaders);

            try
            {
                MethodCall call = DeserializeRequest(requestHeaders, requestStream, requestConfig);
                sinkStack.Push(this, call);
                // forward to next sink in chain - pass request stream as null to 
                // indicate that we have deserialized the request
                NextChannelSink.ProcessMessage(sinkStack, call, requestHeaders, null,
                  out responseMsg, out responseHeaders, out responseStream);
                SerializeResponse(responseMsg, ref responseHeaders, ref responseStream, requestConfig);
            }
            catch (Exception ex)
            {
                responseMsg = new ReturnMessage(ex, (IMethodCallMessage)requestMsg);
                responseStream = new MemoryStream();
                XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer();
                XmlRpcResponse faultResponse = new XmlRpcResponse();
                faultResponse.Fault = new XmlRpcFault(0, ex.Message);
                serializer.WriteResponse(responseStream, faultResponse, requestConfig, TypeSerializerFactory);
                responseHeaders = new TransportHeaders();
                responseHeaders["Content-Type"] = "text/xml; charset=\"utf-8\"";
            }

            return ServerProcessing.Complete;
        }
 public static ServerProcessing DispatchMessage(IServerChannelSinkStack sinkStack, System.Runtime.Remoting.Messaging.IMessage msgout, System.Runtime.Remoting.Messaging.IMessage& replyMsg)
 {
 }
		public static ServerProcessing DispatchMessage (
			IServerChannelSinkStack sinkStack,
			IMessage msg,
			out IMessage replyMsg)
		{
			if (msg == null) throw new ArgumentNullException ("msg");
			
			// Async processing is not done here because there isn't any way
			// to know if a message is to be dispatched sync or asynchronously.

			replyMsg = SyncDispatchMessage (msg);

			if (RemotingServices.IsOneWay (((IMethodMessage) msg).MethodBase))
				return ServerProcessing.OneWay;
			else
				return ServerProcessing.Complete;
		}
Exemplo n.º 31
0
        public ServerProcessing ProcessMessage(
            IServerChannelSinkStack sinkStack_in,
            IMessage requestMsg_in,
            ITransportHeaders requestHeaders_in,
            Stream requestStream_in,

            out IMessage responseMsg_out,
            out ITransportHeaders responseHeaders_out,
            out Stream responseStream_out
            )
        {
#if DEBUG
            Console.WriteLine("compression sink: ProcessMessage...");
#endif
            bool _isCompressed = false;

            if (isHeaderCompressed_(requestHeaders_in))
            {
                #region uncompress...
                requestStream_in
                    = CompressionHelper.GetUncompressedStreamCopy(
                          requestStream_in
                          );
                _isCompressed = true;
                #endregion
            }
            else
            {
                if (this.mustdo_)
                {
                    throw new Exception("\n\n\t\tyour activity is being logged!\n\n\t\tun-compressed communications not allowed!\n\n");
                }
            }

            sinkStack_in.Push(
                this,
                _isCompressed
                );

            ServerProcessing _output = this.nextchannelsink_.ProcessMessage(
                sinkStack_in,
                requestMsg_in,
                requestHeaders_in,
                requestStream_in,

                out responseMsg_out,
                out responseHeaders_out,
                out responseStream_out
                );

            if (_output == ServerProcessing.Complete)
            {
                if (_isCompressed)
                {
                    #region compress...
                    responseHeaders_out[CompressionHelper.X_COMPRESS] = "1";
                    responseStream_out
                        = CompressionHelper.GetCompressedStreamCopy(
                              responseStream_out
                              );
                    #endregion
                }
            }
            //// previously checked!
            //else {
            //    if (mustdo_) {
            //        throw new Exception("\n\n\t\tyour activity is being logged!\n\n\t\tun-compressed communications not allowed!\n\n");
            //    }
            //}

            return(_output);
        }
Exemplo n.º 32
0
        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
            IMessage requestMsg,
            ITransportHeaders requestHeaders, Stream requestStream,
            out IMessage responseMsg, out ITransportHeaders responseHeaders, 
            out Stream responseStream)
        {
            if (requestMsg != null)
            {
                // The message has already been deserialized so delegate to the next sink.
                return _nextSink.ProcessMessage(
                    sinkStack,
                    requestMsg, requestHeaders, requestStream, 
                    out responseMsg, out responseHeaders, out responseStream);
            }
        
            if (requestHeaders ==  null)
                throw new ArgumentNullException("requestHeaders");

            BaseTransportHeaders wkRequestHeaders = requestHeaders as BaseTransportHeaders;
        
            ServerProcessing processing;
        
            responseHeaders = null;
            responseStream = null;

            String verb = null;
            String contentType = null;

            bool bCanServiceRequest = true;

            // determine the content type
            String contentTypeHeader = null;
            if (wkRequestHeaders != null)
                contentTypeHeader = wkRequestHeaders.ContentType;
            else
                contentTypeHeader = requestHeaders["Content-Type"] as String;
            if (contentTypeHeader != null)
            {
                String charsetValue;
                HttpChannelHelper.ParseContentType(contentTypeHeader,
                                                   out contentType, out charsetValue);
            }

            // check to see if Content-Type matches
            if ((contentType != null) &&
                (String.CompareOrdinal(contentType, CoreChannel.BinaryMimeType) != 0))
            {
                bCanServiceRequest = false;                
            }

            // check for http specific verbs
            if (_protocol == Protocol.Http)
            {
                verb = (String)requestHeaders["__RequestVerb"];    
                if (!verb.Equals("POST") && !verb.Equals("M-POST"))
                    bCanServiceRequest = false;
            }

            // either delegate or return an error message if we can't service the request
            if (!bCanServiceRequest)
            {
                // delegate to next sink if available
                if (_nextSink != null)
                {
                    return _nextSink.ProcessMessage(sinkStack, null, requestHeaders, requestStream,   
                        out responseMsg, out responseHeaders, out responseStream);
                }
                else
                {
                    // send back an error message
                    if (_protocol == Protocol.Http)
                    {
                        // return a client bad request error     
                        responseHeaders = new TransportHeaders();
                        responseHeaders["__HttpStatusCode"] = "400";
                        responseHeaders["__HttpReasonPhrase"] = "Bad Request";
                        responseStream = null;
                        responseMsg = null;
                        return ServerProcessing.Complete;
                    }
                    else
                    {
                        // The transport sink will catch this and do something here.
                        throw new RemotingException(
                            CoreChannel.GetResourceString("Remoting_Channels_InvalidRequestFormat"));
                    }
                }
            }
            

            try
            {
                String objectUri = null;

                bool bIsCustomErrorEnabled = true;
                object oIsCustomErrorEnabled = requestHeaders["__CustomErrorsEnabled"];
                if (oIsCustomErrorEnabled != null && oIsCustomErrorEnabled is bool){
                    bIsCustomErrorEnabled = (bool)oIsCustomErrorEnabled;
                }
                CallContext.SetData("__CustomErrorsEnabled", bIsCustomErrorEnabled);
              
                if (wkRequestHeaders != null)
                    objectUri = wkRequestHeaders.RequestUri;
                else
                    objectUri = (String)requestHeaders[CommonTransportKeys.RequestUri];              
            
                if (objectUri != lastUri && RemotingServices.GetServerTypeForUri(objectUri) == null)
                    throw new RemotingException(
                        CoreChannel.GetResourceString("Remoting_ChnlSink_UriNotPublished"));
                else
                    lastUri = objectUri;
            
                PermissionSet currentPermissionSet = null;                  
                if (this.TypeFilterLevel != TypeFilterLevel.Full) {                    
                    currentPermissionSet = new PermissionSet(PermissionState.None);                
                    currentPermissionSet.SetPermission(new SecurityPermission(SecurityPermissionFlag.SerializationFormatter));                    
                }
                                    
                try {
                    if (currentPermissionSet != null)
                        currentPermissionSet.PermitOnly();
                        
                    // Deserialize Request - Stream to IMessage
                    requestMsg = CoreChannel.DeserializeBinaryRequestMessage(objectUri, requestStream, _strictBinding, this.TypeFilterLevel);                    
                }
                finally {
                    if (currentPermissionSet != null)
                        CodeAccessPermission.RevertPermitOnly();
                }                                    
                requestStream.Close();

                if(requestMsg == null)
                {
                    throw new RemotingException(CoreChannel.GetResourceString("Remoting_DeserializeMessage"));
                }

                // Transparent proxy IMessages are allowed conditionally by AppSettings
                if (RemotingServices.IsTransparentProxy(requestMsg) && !AppSettings.AllowTransparentProxyMessage)
                {
                    // Null request to prevent calling transparent proxy methods in catch below.
                    // Fwlink is provided to explain why it is not supported.  Inner exceptions propagate back to sender.
                    requestMsg = null;
                    throw new RemotingException(CoreChannel.GetResourceString("Remoting_DeserializeMessage"), 
                                                new NotSupportedException(AppSettings.AllowTransparentProxyMessageFwLink));
                }

                // Dispatch Call
                sinkStack.Push(this, null);
                processing =                    
                    _nextSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, null,
                        out responseMsg, out responseHeaders, out responseStream);
                // make sure that responseStream is null
                if (responseStream != null)
                {
                    throw new RemotingException(
                        CoreChannel.GetResourceString("Remoting_ChnlSink_WantNullResponseStream"));
                }
                
                switch (processing)
                {

                case ServerProcessing.Complete:
                {
                    if (responseMsg == null)
                        throw new RemotingException(CoreChannel.GetResourceString("Remoting_DispatchMessage"));

                    sinkStack.Pop(this);

                    SerializeResponse(sinkStack, responseMsg,
                                      ref responseHeaders, out responseStream);
                    break;
                } // case ServerProcessing.Complete

                case ServerProcessing.OneWay:
                {
                    sinkStack.Pop(this);
                    break;
                } // case ServerProcessing.OneWay:

                case ServerProcessing.Async:
                {
                    sinkStack.Store(this, null);
                    break;   
                } // case ServerProcessing.Async
                    
                } // switch (processing)                
            }
            catch(Exception e)
            {
                processing = ServerProcessing.Complete;
                responseMsg = new ReturnMessage(e, (IMethodCallMessage)(requestMsg==null?new ErrorMessage():requestMsg));
                //

                CallContext.SetData("__ClientIsClr", true);
                responseStream = (MemoryStream)CoreChannel.SerializeBinaryMessage(responseMsg, _includeVersioning);
                CallContext.FreeNamedDataSlot("__ClientIsClr");                
                responseStream.Position = 0;
                responseHeaders = new TransportHeaders();

                if (_protocol == Protocol.Http)
                {
                    responseHeaders["Content-Type"] = CoreChannel.BinaryMimeType;
                }
            }
            finally{
                CallContext.FreeNamedDataSlot("__CustomErrorsEnabled");
            }

            return processing;
        } // ProcessMessage
Exemplo n.º 33
0
        public static ServerProcessing DispatchMessage(IServerChannelSinkStack sinkStack, IMessage msg, out IMessage replyMsg)
        {
            ServerProcessing serverProcessing = ServerProcessing.Complete;

            replyMsg = null;
            try
            {
                if (msg == null)
                {
                    throw new ArgumentNullException("msg");
                }
                ChannelServices.IncrementRemoteCalls();
                ServerIdentity serverIdentity = ChannelServices.CheckDisconnectedOrCreateWellKnownObject(msg);
                if (serverIdentity.ServerType == typeof(AppDomain))
                {
                    throw new RemotingException(Environment.GetResourceString("Remoting_AppDomainsCantBeCalledRemotely"));
                }
                IMethodCallMessage methodCallMessage = msg as IMethodCallMessage;
                if (methodCallMessage == null)
                {
                    if (!typeof(IMessageSink).IsAssignableFrom(serverIdentity.ServerType))
                    {
                        throw new RemotingException(Environment.GetResourceString("Remoting_AppDomainsCantBeCalledRemotely"));
                    }
                    serverProcessing = ServerProcessing.Complete;
                    replyMsg         = ChannelServices.GetCrossContextChannelSink().SyncProcessMessage(msg);
                }
                else
                {
                    MethodInfo methodInfo = (MethodInfo)methodCallMessage.MethodBase;
                    if (!ChannelServices.IsMethodReallyPublic(methodInfo) && !RemotingServices.IsMethodAllowedRemotely(methodInfo))
                    {
                        throw new RemotingException(Environment.GetResourceString("Remoting_NonPublicOrStaticCantBeCalledRemotely"));
                    }
                    RemotingMethodCachedData reflectionCachedData = InternalRemotingServices.GetReflectionCachedData(methodInfo);
                    if (RemotingServices.IsOneWay(methodInfo))
                    {
                        serverProcessing = ServerProcessing.OneWay;
                        ChannelServices.GetCrossContextChannelSink().AsyncProcessMessage(msg, null);
                    }
                    else
                    {
                        serverProcessing = ServerProcessing.Complete;
                        if (!serverIdentity.ServerType.IsContextful)
                        {
                            object[] args = new object[]
                            {
                                msg,
                                serverIdentity.ServerContext
                            };
                            replyMsg = (IMessage)CrossContextChannel.SyncProcessMessageCallback(args);
                        }
                        else
                        {
                            replyMsg = ChannelServices.GetCrossContextChannelSink().SyncProcessMessage(msg);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                if (serverProcessing != ServerProcessing.OneWay)
                {
                    try
                    {
                        IMessage message2;
                        if (msg == null)
                        {
                            IMessage message = new ErrorMessage();
                            message2 = message;
                        }
                        else
                        {
                            message2 = msg;
                        }
                        IMethodCallMessage mcm = (IMethodCallMessage)message2;
                        replyMsg = new ReturnMessage(e, mcm);
                        if (msg != null)
                        {
                            ((ReturnMessage)replyMsg).SetLogicalCallContext((LogicalCallContext)msg.Properties[Message.CallContextKey]);
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
            }
            return(serverProcessing);
        }