internal void InternalProcessMessage(ClientConnection connection, Stream stream)
        {
            // Reads the headers and the request stream

            Stream            requestStream;
            ITransportHeaders requestHeaders;

            requestStream = TcpMessageIO.ReceiveMessageStream(stream, out requestHeaders, connection.Buffer);
            requestHeaders [CommonTransportKeys.IPAddress]    = connection.ClientAddress;
            requestHeaders [CommonTransportKeys.ConnectionId] = connection.Id;

            string uri = (string)requestHeaders [CommonTransportKeys.RequestUri];

            TcpChannel.ParseChannelUrl(uri, out uri);

            if (uri != null)
            {
                requestHeaders [CommonTransportKeys.RequestUri] = uri;
            }

            // Pushes the connection object together with the sink. This information
            // will be used for sending the response in an async call.

            ServerChannelSinkStack sinkStack = new ServerChannelSinkStack();

            sinkStack.Push(this, connection);

            ITransportHeaders responseHeaders;
            Stream            responseStream;
            IMessage          responseMsg;

            ServerProcessing proc = next_sink.ProcessMessage(sinkStack, null, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);

            switch (proc)
            {
            case ServerProcessing.Complete:
                TcpMessageIO.SendMessageStream(stream, responseStream, responseHeaders, connection.Buffer);
                stream.Flush();
                break;

            case ServerProcessing.Async:
            case ServerProcessing.OneWay:
                break;
            }
        }
Example #2
0
 public string Parse(string url, out string objectURI)
 {
     return(TcpChannel.ParseChannelUrl(url, out objectURI));
 }