Exemplo n.º 1
0
        private void SendResponse(HttpResponseStream responseStream)
        {
            var buffer = new byte[4096];
            var length = 0;
            responseStream.Position = 0;

            while ((length = responseStream.Read(buffer, 0, 4096)) > 0)
            {
                _socketConnection.SendData(buffer, 0, length);
            }
        }
Exemplo n.º 2
0
        public void HttpResponseStream_Can_Send_Large_Data_In_Stream()
        {
            var responseStream = new HttpResponseStream();
            responseStream.StatusCode = 200;
            responseStream.HttpVersion = "HTTP/1.1";
            responseStream.Reason = "This is a test";
            responseStream.Headers.Add("Header1", "Value1");
            var fileStream = File.OpenRead("oswos.fw.png");
            fileStream.CopyTo(responseStream);

            var memoryStream = new MemoryStream();
            responseStream.CopyTo(memoryStream);
        }
Exemplo n.º 3
0
        public void HttpResponseStream_Sends_Version_Status_Reason_In_Stream()
        {
            var responseStream = new HttpResponseStream();
            responseStream.StatusCode = 200;
            responseStream.HttpVersion = "HTTP/1.1";
            responseStream.Reason = "This is a test";

            var memoryStream = new MemoryStream();
            responseStream.CopyTo(memoryStream);

            var expectedData = "HTTP/1.1 200 This is a test" + "\x0d\x0a" + "Content-Length:0\x0d\x0a\x0d\x0a";
            var responseData = Encoding.UTF8.GetString(memoryStream.ToArray());

            Assert.AreEqual(expectedData, responseData);
        }
Exemplo n.º 4
0
        public void HttpResponseStream_Sends_MessageBody_In_Stream()
        {
            var responseStream = new HttpResponseStream();
            responseStream.StatusCode = 200;
            responseStream.HttpVersion = "HTTP/1.1";
            responseStream.Reason = "This is a test";
            responseStream.Headers.Add("Header1", "Value1");
            var bodyText = Encoding.UTF8.GetBytes("This is the body");
            responseStream.Write(bodyText, 0, bodyText.Length);

            var memoryStream = new MemoryStream();
            responseStream.CopyTo(memoryStream);

            var expectedData = "HTTP/1.1 200 This is a test\x0d\x0aHeader1:Value1" + "\x0d\x0a" + "Content-Length:16\x0d\x0a\x0d\x0aThis is the body";
            var responseData = Encoding.UTF8.GetString(memoryStream.ToArray());

            Assert.AreEqual(expectedData, responseData);
        }
Exemplo n.º 5
0
        public void FindWebsiteAndSendRequestToEndpoint()
        {
            var host = string.Empty;

            if (_httpRequestStream.Headers.ContainsKey("Host"))
            {
                host = _httpRequestStream.Headers["Host"];
            }

            try
            {
                Logger.Debug("Requesting:" + _httpRequestStream.Uri);
                var endPoint = _httpStreamRouter.CreateWebsiteEndpoint(host);
                var responseStream = endPoint.ParseRequest(_httpRequestStream);

                SendResponse(responseStream);

                var communicationObject = endPoint as ICommunicationObject;
                if (communicationObject != null && communicationObject.State == CommunicationState.Opened)
                {
                    communicationObject.Close();
                }
            }
            catch (WebsiteNotFoundException ex)
            {
                var response = new HttpResponseStream();
                response.HttpVersion = _httpRequestStream.HttpVersion;
                response.StatusCode = 500;
                response.Reason = ex.Message;
                SendResponse(response);
            }
            catch (Exception ex)
            {
                var response = new HttpResponseStream();
                response.HttpVersion = _httpRequestStream.HttpVersion;
                response.StatusCode = 500;
                response.Reason = ex.Message;
                SendResponse(response);
            }

            _socketConnection.Disconnect();
        }