Esempio n. 1
0
 /// <summary>
 /// Listens for incoming requests.
 /// </summary>
 internal void Listen()
 {
     while (true)
     {
         try
         {
             NamedPipeListener listener = new NamedPipeListener(portName);
             NamedPipeSocket   socket   = listener.Accept();
             ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessClient), socket);
         }
         catch (NamedPipeException)
         {
         }
     }
 }
Esempio n. 2
0
        public void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            responseHeaders = null;
            responseStream  = null;

            requestHeaders[CommonTransportKeys.RequestUri] = ((IMethodCallMessage)msg).Uri;

            // connect
            NamedPipeClient client = new NamedPipeClient(pipeName);
            NamedPipeSocket socket = client.Connect();
            IpcTransport    t      = new IpcTransport(socket);

            t.Write(requestHeaders, requestStream);
            t.Read(out responseHeaders, out responseStream);
            t.Close();
        }
Esempio n. 3
0
        public void AsyncProcessRequest(IClientChannelSinkStack sinkStack, IMessage msg, ITransportHeaders headers, Stream stream)
        {
            headers[CommonTransportKeys.RequestUri] = ((IMethodCallMessage)msg).Uri;

            // connect
            NamedPipeClient client = new NamedPipeClient(pipeName);
            NamedPipeSocket socket = client.Connect();
            IpcTransport    t      = new IpcTransport(socket);

            t.Write(headers, stream);

            // schedule an async call
            if (!RemotingServices.IsOneWay(((IMethodCallMessage)msg).MethodBase))
            {
                new AsyncResponse(AsyncHandler).BeginInvoke(sinkStack, t, null, null);
            }
        }
Esempio n. 4
0
 /// <summary>
 /// Creates a new instance of the NamedPipeStream class for the specified NamedPipeSocket.
 /// </summary>
 /// <param name="socket"></param>
 public NamedPipeStream(NamedPipeSocket socket, bool ownsSocket)
 {
     this.socket     = socket;
     this.ownsSocket = ownsSocket;
 }
Esempio n. 5
0
 /// <summary>
 /// Creates a new object.
 /// </summary>
 /// <param name="socket">The named pipe.</param>
 public IpcTransport(NamedPipeSocket socket)
 {
     this.socket = socket;
 }
Esempio n. 6
0
 /// <summary>
 /// Creates a new instance of the NamedPipeStream class for the specified NamedPipeSocket.
 /// </summary>
 /// <param name="socket"></param>
 public NamedPipeStream(NamedPipeSocket socket, bool ownsSocket)
 {
     this.socket = socket;
     this.ownsSocket = ownsSocket;
 }
Esempio n. 7
0
 /// <summary>
 /// Creates a new object.
 /// </summary>
 /// <param name="socket">The named pipe.</param>
 public IpcTransport(NamedPipeSocket socket)
 {
     this.socket = socket;
 }
Esempio n. 8
0
        void ProcessClient(object state)
        {
            try
            {
                NamedPipeSocket socket = (NamedPipeSocket)state;

                ITransportHeaders requestHeaders;
                Stream            requestStream;

                IpcTransport t = new IpcTransport(socket);
                t.Read(out requestHeaders, out requestStream);

                // parse the RequestUri
                string objectUri;
                string uri = (string)requestHeaders[CommonTransportKeys.RequestUri];
                IpcChannelHelper.Parse(uri, out objectUri);
                if (objectUri == null)
                {
                    objectUri = uri;
                }
                requestHeaders[CommonTransportKeys.RequestUri] = objectUri;

                ServerChannelSinkStack stack = new ServerChannelSinkStack();
                stack.Push(this, null);

                IMessage          responseMsg;
                ITransportHeaders responseHeaders;
                Stream            responseStream;

                requestHeaders["__CustomErrorsEnabled"] = false;

                if (impersonate)
                {
                    // TODO: Impersonate might throw exceptions. What to do with them?
                    socket.Impersonate();
                }

                ServerProcessing op = nextSink.ProcessMessage(
                    stack,
                    null,
                    requestHeaders,
                    requestStream,
                    out responseMsg,
                    out responseHeaders,
                    out responseStream
                    );

                if (impersonate)
                {
                    NamedPipeSocket.RevertToSelf();
                }

                switch (op)
                {
                case ServerProcessing.Complete:
                    stack.Pop(this);
                    // send the response headers and the response data to the client
                    t.Write(responseHeaders, responseStream);
                    break;

                case ServerProcessing.Async:
                    stack.StoreAndDispatch(nextSink, null);
                    break;

                case ServerProcessing.OneWay:
                    break;
                }
            }
            catch (Exception)
            {
                // Console.WriteLine(ex);
            }
        }