Exemple #1
0
        /// <summary>
        /// Issue a request to a server, and return the (IDisposable) response.
        /// </summary>
        /// <exception cref="ShiftIt.Http.TimeoutException">Timeouts while reading or writing sockets.</exception>
        /// <exception cref="System.Net.Sockets.SocketException">Low level transport exception occured.</exception>
        public IHttpResponse Request(IHttpRequest request, Action <long> sendProgress = null)
        {
            var socket = (request.Secure)
                                ? _conn.ConnectSSL(request.Target, Timeout)
                                : _conn.ConnectUnsecured(request.Target, Timeout);

            var Tx = new StreamWriter(socket);

            Tx.Write(request.RequestHead);
            Tx.Flush();

            if (request.DataStream != null)
            {
                if (request.DataLength > 0)
                {
                    StreamTools.CopyBytesToLength(request.DataStream, socket, request.DataLength, Timeout, sendProgress);
                }
                else
                {
                    StreamTools.CopyBytesToTimeout(request.DataStream, socket, sendProgress);
                }
            }

            socket.Flush();

            return(_parser.Parse(socket, Timeout));
        }
Exemple #2
0
        public async Task <HttpResponseMessage> Send(HttpRequestMessage request, CancellationToken token)
        {
            var options = request.Properties.ContainsKey(NatsQueueClientOption.ConnectionProperty)
                                ? request.Properties[NatsQueueClientOption.ConnectionProperty] as Options
                                : _clientOption.Options;

            if (options == null)
            {
                throw new ArgumentException(
                          $"ConnectionFactory in option or {nameof(request.Properties)} key name {NatsQueueClientOption.ConnectionProperty} must be set");
            }

            var content     = new HttpMessageContent(request);
            var bytesTask   = content.ReadAsByteArrayAsync();
            var correlation = request.Headers.GetCorrelationHeader();
            var connection  = _connection.CreateConnection(options);

            if (correlation != null)
            {
                var responseMsg = await connection.RequestAsync(request.RequestUri.Host, await bytesTask, token);

                var responseMessage = await _responseParser.Parse(responseMsg.Data, token);

                return(responseMessage);
            }

            var bytes = await bytesTask;

            connection.Publish(request.RequestUri.Host, bytes);
            _log.LogTrace("Message to {url} sended", request.RequestUri.Host);

            return(new HttpResponseMessage(HttpStatusCode.OK));
        }
Exemple #3
0
        public void the_response_up_to_the_bad_header_is_displayed_in_the_exception_message()
        {
            var ex = Assert.Throws <ArgumentException>(() => _subject.Parse(_rawSample, TimeSpan.FromSeconds(1)));

            Assert.That(ex.Message,
                        Is.EqualTo("Bad header -- BadHeader\r\nFull headers:HTTP/1.1 200 OK\r\n" +
                                   "Date: Sun, 03 Feb 2013 13:19:56 GMT\r\n" +
                                   "Server: Microsoft-IIS/6.0\r\n" +
                                   "X-Powered-By: ASP.NET\r\n" +
                                   "Pragma: no-cache\r\n" +
                                   "Content-Length: 96\r\n" +
                                   "BadHeader\r\n" +
                                   "Content-Type: text/html\r\n" +
                                   "Expires: Sun, 03 Feb 2013 13:18:56 GMT\r\n" +
                                   "Cache-control: no-store\r\n\r"));
        }
        public async Task Handle(ConsumeResult <byte[], byte[]> message)
        {
            var response = await _responseParser.Parse(message.Message.Value, CancellationToken.None);

            var correlationId = response.Headers.GetCorrelationHeader();

            if (string.IsNullOrWhiteSpace(correlationId))
            {
                _log.LogError($"consume response, but {QueueHeaders.CorrelationId} not be set. Response will be lost");
                return;
            }

            _tasks.TryRemove(correlationId, out var taskSource);

            if (taskSource == null)
            {
                _log.LogError("Received response, but task source is lost. The Message will be removed");
                return;
            }

            taskSource.SetResult(response);
        }
Exemple #5
0
        public IHttpResponse Request(IHttpRequest request)
        {
            var socket = _conn.Connect(request.Target, Timeout);
            var Tx     = new StreamWriter(socket);

            Tx.Write(request.RequestHead());
            Tx.Flush();

            if (request.DataStream != null)
            {
                if (request.DataLength > 0)
                {
                    ExpectedLengthStream.CopyBytesToLength(request.DataStream, socket, request.DataLength);
                }
                else
                {
                    ExpectedLengthStream.CopyBytesToTimeout(request.DataStream, socket);
                }
            }

            socket.Flush();

            return(_parser.Parse(socket));
        }
 public void setup()
 {
     _rawSample = HttpSample.SimpleResponse();
     _subject = new HttpResponseParser();
     _result = _subject.Parse(_rawSample);
 }
Exemple #7
0
 public void setup()
 {
     _rawSample = HttpSample.SimpleResponse();
     _subject   = new HttpResponseParser();
     _result    = _subject.Parse(_rawSample);
 }
Exemple #8
0
 public void setup()
 {
     _rawSample = HttpSample.FailedResponse();
     _subject   = new HttpResponseParser();
     _result    = _subject.Parse(_rawSample, TimeSpan.Zero);
 }
 public void setup()
 {
     _rawSample = HttpSample.WithMixedCaseHeaders();
     _subject = new HttpResponseParser();
     _result = _subject.Parse(_rawSample, TimeSpan.FromSeconds(1));
 }
Exemple #10
0
 public void setup()
 {
     _rawSample = HttpSample.GzippedResponse();
     _subject = new HttpResponseParser();
     _result = _subject.Parse(_rawSample, TimeSpan.Zero);
 }
Exemple #11
0
 public void setup()
 {
     _rawSample = HttpSample.WithMixedCaseHeaders();
     _subject   = new HttpResponseParser();
     _result    = _subject.Parse(_rawSample, TimeSpan.FromSeconds(1));
 }
 public void setup()
 {
     _rawSample = HttpSample.WithDuplicatedHeaders();
     _subject = new HttpResponseParser();
     _result = _subject.Parse(_rawSample, TimeSpan.Zero);
 }
 public void setup()
 {
     _rawSample = HttpSample.PlainTextWithIncorrectGzipHeader();
     _subject   = new HttpResponseParser();
     _result    = _subject.Parse(_rawSample, TimeSpan.FromSeconds(1));
 }
 public void setup()
 {
     _rawSample = HttpSample.PlainTextWithIncorrectGzipHeader();
     _subject = new HttpResponseParser();
     _result = _subject.Parse(_rawSample, TimeSpan.FromSeconds(1));
 }
Exemple #15
0
 public void setup()
 {
     _rawSample = HttpSample.WithDuplicatedHeaders();
     _subject   = new HttpResponseParser();
     _result    = _subject.Parse(_rawSample, TimeSpan.Zero);
 }