Ignore test .dll and .pdb files
[mono.git] / mcs / class / System.Runtime.Remoting / System.Runtime.Remoting.Channels.Tcp / TcpServerTransportSink.cs
1 //
2 // System.Runtime.Remoting.Channels.Tcp.TcpServerTransportSink.cs
3 //
4 // Author: Rodrigo Moya (rodrigo@ximian.com)
5 //         Lluis Sanchez Gual (lsg@ctv.es)
6 //
7 // 2002 (C) Copyright, Ximian, Inc.
8 //
9
10 using System;\r
11 using System.Collections;\r
12 using System.Runtime.Remoting.Messaging;\r
13 using System.IO;\r
14 \r
15 namespace System.Runtime.Remoting.Channels.Tcp\r
16 {\r
17         public class TcpServerTransportSink : IServerChannelSink, IChannelSinkBase
18         {
19                 IServerChannelSink next_sink;
20                 
21                 public TcpServerTransportSink (IServerChannelSink next)
22                 {
23                         next_sink = next;
24                 }
25                 
26                 public IServerChannelSink NextChannelSink \r
27                 {
28                         get \r
29                         {
30                                 return next_sink;
31                         }
32                 }
33
34                 public IDictionary Properties \r
35                 {
36                         get \r
37                         {
38                                 if (next_sink != null) return next_sink.Properties;
39                                 else return null;
40                         }
41                 }
42
43                 public void AsyncProcessResponse (IServerResponseChannelSinkStack sinkStack, object state,
44                         IMessage msg, ITransportHeaders headers, Stream responseStream)
45                 {
46                         ClientConnection connection = (ClientConnection)state;
47                         TcpMessageIO.SendMessageStream (connection.Stream, responseStream, headers, connection.Buffer);\r
48                 }
49
50                 public Stream GetResponseStream (IServerResponseChannelSinkStack sinkStack, object state,
51                         IMessage msg, ITransportHeaders headers)
52                 {
53                         return null;
54                 }
55                 
56                 public ServerProcessing ProcessMessage (IServerChannelSinkStack sinkStack,
57                         IMessage requestMsg,
58                         ITransportHeaders requestHeaders,
59                         Stream requestStream,
60                         out IMessage responseMsg,
61                         out ITransportHeaders responseHeaders,
62                         out Stream responseStream)
63                 {
64                         // this is the first sink, and TcpServerChannel does not call it.
65                         throw new NotSupportedException ();
66                 }
67
68                 internal void InternalProcessMessage (ClientConnection connection)
69                 {
70                         // Reads the headers and the request stream
71
72                         Stream requestStream;
73                         ITransportHeaders requestHeaders;\r
74
75                         requestStream = TcpMessageIO.ReceiveMessageStream (connection.Stream, out requestHeaders, connection.Buffer);\r
76 \r
77                         // Pushes the connection object together with the sink. This information\r
78                         // will be used for sending the response in an async call.\r
79 \r
80                         ServerChannelSinkStack sinkStack = new ServerChannelSinkStack();\r
81                         sinkStack.Push(this, connection);\r
82 \r
83                         ITransportHeaders responseHeaders;\r
84                         Stream responseStream;\r
85                         IMessage responseMsg;\r
86
87                         ServerProcessing proc = next_sink.ProcessMessage(sinkStack, null, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);\r
88 \r
89                         switch (proc)\r
90                         {\r
91                                 case ServerProcessing.Complete:\r
92                                         TcpMessageIO.SendMessageStream (connection.Stream, responseStream, responseHeaders, connection.Buffer);\r
93                                         break;\r
94 \r
95                                 case ServerProcessing.Async:\r
96                                 case ServerProcessing.OneWay:\r
97                                         break;\r
98                         }\r
99                 }
100         }\r
101 }\r
102 \r