Esempio n. 1
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var endpoint = new UnixDomainSocketEndPoint(this.providerUri.LocalPath);

            using (Socket socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified))
            {
                Events.Connecting(this.providerUri.LocalPath);
                await socket.ConnectAsync(endpoint);

                Events.Connected(this.providerUri.LocalPath);

                using (var stream = new HttpBufferedStream(new NetworkStream(socket, true)))
                {
                    var    serializer   = new HttpRequestResponseSerializer();
                    byte[] requestBytes = serializer.SerializeRequest(request);

                    Events.SendRequest(request.RequestUri);
                    await stream.WriteAsync(requestBytes, 0, requestBytes.Length, cancellationToken);

                    if (request.Content != null)
                    {
                        await request.Content.CopyToAsync(stream);
                    }

                    HttpResponseMessage response = await serializer.DeserializeResponse(stream, cancellationToken);

                    Events.ResponseReceived(response.StatusCode);

                    return(response);
                }
            }
        }
Esempio n. 2
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var endpoint = new UnixDomainSocketEndPoint(this.providerUri.LocalPath);

            Events.Connecting(this.providerUri.LocalPath);
            // do not dispose `Socket` or `HttpBufferedStream` here, b/c it will be used later
            // by the consumer of HttpResponseMessage (HttpResponseMessage.Content.ReadAsStringAsync()).
            // When HttpResponseMessage is disposed - the stream and socket is disposed as well.
            Socket socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified);
            await socket.ConnectAsync(endpoint);

            Events.Connected(this.providerUri.LocalPath);

            var stream     = new HttpBufferedStream(new NetworkStream(socket, true));
            var serializer = new HttpRequestResponseSerializer();

            byte[] requestBytes = serializer.SerializeRequest(request);

            Events.SendRequest(request.RequestUri);
            await stream.WriteAsync(requestBytes, 0, requestBytes.Length, cancellationToken);

            if (request.Content != null)
            {
                await request.Content.CopyToAsync(stream);
            }

            HttpResponseMessage response = await serializer.DeserializeResponse(stream, cancellationToken);

            Events.ResponseReceived(response.StatusCode);

            return(response);
        }
Esempio n. 3
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            Socket socket = await this.GetConnectedSocketAsync();

            var stream = new HttpBufferedStream(new NetworkStream(socket, true));

            var serializer = new HttpRequestResponseSerializer();

            byte[] requestBytes = serializer.SerializeRequest(request);

            await stream.WriteAsync(requestBytes, 0, requestBytes.Length, cancellationToken);

            if (request.Content != null)
            {
                await request.Content.CopyToAsync(stream);
            }

            HttpResponseMessage response = await serializer.DeserializeResponse(stream, cancellationToken);

            return(response);
        }