X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Runtime.Remoting%2FSystem.Runtime.Remoting.Channels.Tcp%2FTcpMessageIO.cs;h=4c57d2129fb7969e1f257e5b123525078ff5efff;hb=3fd4901a235bda0019f03317f4ee083744195758;hp=29e6575accd60bc36e2abea4bb99d96ad75ef893;hpb=af90548a08ef5effc93b083b7eec44daa178b141;p=mono.git diff --git a/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp/TcpMessageIO.cs b/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp/TcpMessageIO.cs index 29e6575accd..4c57d2129fb 100644 --- a/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp/TcpMessageIO.cs +++ b/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp/TcpMessageIO.cs @@ -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)