internal void SendRequest(IMessage msg, ITransportHeaders headers, Stream contentStream)
 {
     IMethodCallMessage message = (IMethodCallMessage) msg;
     int length = (int) contentStream.Length;
     string uri = message.Uri;
     this._bOneWayRequest = RemotingServices.IsOneWay(message.MethodBase);
     ChunkedMemoryStream outputStream = new ChunkedMemoryStream(CoreChannel.BufferPool);
     base.WritePreambleAndVersion(outputStream);
     if (!this._bOneWayRequest)
     {
         base.WriteUInt16(0, outputStream);
     }
     else
     {
         base.WriteUInt16(1, outputStream);
     }
     base.WriteUInt16(0, outputStream);
     base.WriteInt32(length, outputStream);
     base.WriteUInt16(4, outputStream);
     base.WriteByte(1, outputStream);
     base.WriteCountedString(uri, outputStream);
     base.WriteHeaders(headers, outputStream);
     outputStream.WriteTo(base.NetStream);
     outputStream.Close();
     StreamHelper.CopyStream(contentStream, base.NetStream);
     contentStream.Close();
 }
 public Stream GetRequestStream(IMessage msg, int contentLength, ITransportHeaders headers)
 {
     IMethodCallMessage message = (IMethodCallMessage) msg;
     string uri = message.Uri;
     this._bOneWayRequest = RemotingServices.IsOneWay(message.MethodBase);
     ChunkedMemoryStream outputStream = new ChunkedMemoryStream(CoreChannel.BufferPool);
     base.WritePreambleAndVersion(outputStream);
     if (!this._bOneWayRequest)
     {
         base.WriteUInt16(0, outputStream);
     }
     else
     {
         base.WriteUInt16(1, outputStream);
     }
     base.WriteUInt16(0, outputStream);
     base.WriteInt32(contentLength, outputStream);
     base.WriteUInt16(4, outputStream);
     base.WriteByte(1, outputStream);
     base.WriteCountedString(uri, outputStream);
     base.WriteHeaders(headers, outputStream);
     outputStream.WriteTo(base.NetStream);
     outputStream.Close();
     this._requestStream = base.NetStream;
     return this._requestStream;
 }
 public Stream GetResponseStream(string statusCode, string reasonPhrase, ITransportHeaders headers)
 {
     bool flag = false;
     bool flag2 = false;
     int length = 0;
     object obj2 = headers["__HttpStatusCode"];
     string str = headers["__HttpReasonPhrase"] as string;
     if (obj2 != null)
     {
         statusCode = obj2.ToString();
     }
     if (str != null)
     {
         reasonPhrase = str;
     }
     if (!this.CanServiceAnotherRequest())
     {
         headers["Connection"] = "Close";
     }
     object obj3 = headers["Content-Length"];
     if (obj3 != null)
     {
         flag = true;
         if (obj3 is int)
         {
             length = (int) obj3;
         }
         else
         {
             length = Convert.ToInt32(obj3, CultureInfo.InvariantCulture);
         }
     }
     flag2 = this.AllowChunkedResponse && !flag;
     if (flag2)
     {
         headers["Transfer-Encoding"] = "chunked";
     }
     ChunkedMemoryStream outputStream = new ChunkedMemoryStream(CoreChannel.BufferPool);
     base.WriteResponseFirstLine(statusCode, reasonPhrase, outputStream);
     base.WriteHeaders(headers, outputStream);
     outputStream.WriteTo(base.NetStream);
     outputStream.Close();
     if (flag2)
     {
         this._responseStream = new HttpChunkedResponseStream(base.NetStream);
     }
     else
     {
         this._responseStream = new HttpFixedLengthResponseStream(base.NetStream, length);
     }
     return this._responseStream;
 }
예제 #4
0
        } // GetRequestStream

 
        public Stream GetResponseStream(String statusCode, String reasonPhrase,
                                        ITransportHeaders headers) 
        { 
            bool contentLengthPresent = false;
            bool useChunkedEncoding = false; 
            int contentLength = 0;

            // check for custom user status code and reason phrase
            Object userStatusCode = headers["__HttpStatusCode"]; // someone might have stored an int 
            String userReasonPhrase = headers["__HttpReasonPhrase"] as String;
 
            if (userStatusCode != null) 
                statusCode = userStatusCode.ToString();
            if (userReasonPhrase != null) 
                reasonPhrase = userReasonPhrase;

            // see if we can handle any more requests on this socket
            if (!CanServiceAnotherRequest()) 
            {
                headers["Connection"] = "Close"; 
            } 

            // check for content length 
            Object contentLengthEntry = headers["Content-Length"];
            if (contentLengthEntry != null)
            {
                contentLengthPresent = true; 
                if (contentLengthEntry is int)
                    contentLength = (int)contentLengthEntry; 
                else 
                    contentLength = Convert.ToInt32(contentLengthEntry, CultureInfo.InvariantCulture);
            } 

            // see if we are going to use chunked-encoding
            useChunkedEncoding = AllowChunkedResponse && !contentLengthPresent;
            if (useChunkedEncoding) 
                headers["Transfer-Encoding"] = "chunked";
 
 
            // write headers to stream
            ChunkedMemoryStream headerStream = new ChunkedMemoryStream(CoreChannel.BufferPool); 
            WriteResponseFirstLine(statusCode, reasonPhrase, headerStream);
            WriteHeaders(headers, headerStream);

            headerStream.WriteTo(NetStream); 
            headerStream.Close();
 
 
            // return stream ready for content
            if (useChunkedEncoding) 
                _responseStream = new HttpChunkedResponseStream(NetStream);
            else
                _responseStream = new HttpFixedLengthResponseStream(NetStream, contentLength);
 
            return _responseStream;
        } // GetResponseStream 
 public void SendResponse(ITransportHeaders headers, Stream contentStream)
 {
     if (!this._bOneWayRequest)
     {
         ChunkedMemoryStream outputStream = new ChunkedMemoryStream(CoreChannel.BufferPool);
         base.WritePreambleAndVersion(outputStream);
         base.WriteUInt16(2, outputStream);
         base.WriteUInt16(0, outputStream);
         base.WriteInt32((int) contentStream.Length, outputStream);
         base.WriteHeaders(headers, outputStream);
         outputStream.WriteTo(base.NetStream);
         outputStream.Close();
         StreamHelper.CopyStream(contentStream, base.NetStream);
         contentStream.Close();
     }
 }
 public void SendErrorResponse(string e, bool bCloseConnection)
 {
     if (!this._bOneWayRequest)
     {
         ChunkedMemoryStream outputStream = new ChunkedMemoryStream(CoreChannel.BufferPool);
         base.WritePreambleAndVersion(outputStream);
         base.WriteUInt16(2, outputStream);
         base.WriteUInt16(0, outputStream);
         base.WriteInt32(0, outputStream);
         base.WriteUInt16(2, outputStream);
         base.WriteByte(3, outputStream);
         base.WriteUInt16(1, outputStream);
         base.WriteUInt16(3, outputStream);
         base.WriteByte(1, outputStream);
         base.WriteCountedString(e, outputStream);
         base.WriteUInt16(5, outputStream);
         base.WriteByte(0, outputStream);
         base.WriteUInt16(0, outputStream);
         outputStream.WriteTo(base.NetStream);
         outputStream.Close();
     }
 }
 protected override void SendErrorMessageIfPossible(Exception e)
 {
     if (!this._bOneWayRequest)
     {
         ChunkedMemoryStream outputStream = new ChunkedMemoryStream(CoreChannel.BufferPool);
         base.WritePreambleAndVersion(outputStream);
         base.WriteUInt16(2, outputStream);
         base.WriteUInt16(0, outputStream);
         base.WriteInt32(0, outputStream);
         base.WriteUInt16(2, outputStream);
         base.WriteByte(3, outputStream);
         base.WriteUInt16(1, outputStream);
         base.WriteUInt16(3, outputStream);
         base.WriteByte(1, outputStream);
         base.WriteCountedString(e.ToString(), outputStream);
         base.WriteUInt16(5, outputStream);
         base.WriteByte(0, outputStream);
         base.WriteUInt16(0, outputStream);
         outputStream.WriteTo(base.NetStream);
         outputStream.Close();
     }
 }