Merge pull request #960 from ermshiperete/ShowHelp
[mono.git] / mcs / class / System.Runtime.Remoting / System.Runtime.Remoting.Channels.Tcp / TcpMessageIO.cs
index 29e6575accd60bc36e2abea4bb99d96ad75ef893..4c57d2129fb7969e1f257e5b123525078ff5efff 100644 (file)
@@ -96,6 +96,11 @@ namespace System.Runtime.Remoting.Channels.Tcp
                }
 
                public static void SendMessageStream (Stream networkStream, Stream data, ITransportHeaders requestHeaders, byte[] buffer)
+               {
+                       SendMessageStream (networkStream, data, requestHeaders, buffer, false);
+               }
+
+               public static void SendMessageStream (Stream networkStream, Stream data, ITransportHeaders requestHeaders, byte[] buffer, bool isOneWay)
                {
                        if (buffer == null) buffer = new byte[DefaultStreamBufferSize];
 
@@ -103,9 +108,16 @@ namespace System.Runtime.Remoting.Channels.Tcp
                        byte[] dotnetHeader = _msgHeaders[(int) MessageStatus.MethodMessage];
                        networkStream.Write(dotnetHeader, 0, dotnetHeader.Length);
 
-                       // Writes header tag (0x0000 if request stream, 0x0002 if response stream)
-                       if(requestHeaders[CommonTransportKeys.RequestUri]!=null) buffer [0] = (byte) 0;
-                       else buffer[0] = (byte) 2;
+                       // Writes the header tag
+                       // 0x0000 - request stream
+                       // 0x0001 - OneWay request stream
+                       // 0x0002 - response stream
+                       if(requestHeaders[CommonTransportKeys.RequestUri]!=null) {
+                               buffer [0] = isOneWay ? (byte) 1 : (byte) 0;
+                       }
+                       else {
+                               buffer[0] = (byte) 2;
+                       }
                        buffer [1] = (byte) 0 ;
 
                        // Writes ID
@@ -125,6 +137,9 @@ namespace System.Runtime.Remoting.Channels.Tcp
                        // Writes the message headers
                        SendHeaders (networkStream, requestHeaders, buffer);
 
+                       if (data.Length == 0)
+                               return;
+
                        // Writes the stream
                        if (data is MemoryStream)
                        {
@@ -223,10 +238,13 @@ namespace System.Runtime.Remoting.Channels.Tcp
                        // Reads the headers
                        headers = ReceiveHeaders (networkStream, buffer);
 
-                       byte[] resultBuffer = new byte[byteCount];
-                       StreamRead (networkStream, resultBuffer, byteCount);
-
-                       return new MemoryStream (resultBuffer);
+                       if (byteCount > 0) {
+                               byte[] resultBuffer = new byte[byteCount];
+                               StreamRead (networkStream, resultBuffer, byteCount);
+                               return new MemoryStream (resultBuffer);
+                       } else {
+                               return new MemoryStream ();
+                       }
                }               
 
                private static void SendString (Stream networkStream, string str, byte[] buffer)