text: // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  //
  // HttpBasicStream is a simple implementation of HttpStream.  It assumes it is
  // not sharing a sharing with any other HttpStreams, therefore it just reads and
  // writes directly to the Http Stream.
  
  #ifndef NET_HTTP_HTTP_BASIC_STREAM_H_
  #define NET_HTTP_HTTP_BASIC_STREAM_H_
  
  #include <stdint.h>
  
  #include <memory>
  #include <string>
  
  #include "base/macros.h"
  #include "net/base/net_export.h"
  #include "net/http/http_basic_state.h"
  #include "net/http/http_stream.h"
  
  namespace net {
  
  class ClientSocketHandle;
  class HttpResponseInfo;
  struct HttpRequestInfo;
  class HttpRequestHeaders;
  class HttpStreamParser;
  class IOBuffer;
  class NetLogWithSource;
  
  class NET_EXPORT_PRIVATE HttpBasicStream : public HttpStream {
   public:
    // Constructs a new HttpBasicStream. InitializeStream must be called to
    // initialize it correctly.
    HttpBasicStream(std::unique_ptr<ClientSocketHandle> connection,
                    bool using_proxy,
                    bool http_09_on_non_default_ports_enabled);
    ~HttpBasicStream() override;
  
    // HttpStream methods:
    int InitializeStream(const HttpRequestInfo* request_info,
                         RequestPriority priority,
                         const NetLogWithSource& net_log,
                         const CompletionCallback& callback) override;
  
    int SendRequest(const HttpRequestHeaders& headers,
                    HttpResponseInfo* response,
                    const CompletionCallback& callback) override;
  
    int ReadResponseHeaders(const CompletionCallback& callback) override;
  
    int ReadResponseBody(IOBuffer* buf,
                         int buf_len,
                         const CompletionCallback& callback) override;
  
    void Close(bool not_reusable) override;
  
    HttpStream* RenewStreamForAuth() override;
  
    bool IsResponseBodyComplete() const override;
  
    bool IsConnectionReused() const override;
  
    void SetConnectionReused() override;
  
    bool CanReuseConnection() const override;
  
    int64_t GetTotalReceivedBytes() const override;
  
    int64_t GetTotalSentBytes() const override;
  
    bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override;
  
    bool GetAlternativeService(
        AlternativeService* alternative_service) const override;
  
    void GetSSLInfo(SSLInfo* ssl_info) override;
  
    void GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info) override;
  
    bool GetRemoteEndpoint(IPEndPoint* endpoint) override;
  
    Error GetTokenBindingSignature(crypto::ECPrivateKey* key,
                                   TokenBindingType tb_type,
                                   std::vector<uint8_t>* out) override;
  
    void Drain(HttpNetworkSession* session) override;
  
    void PopulateNetErrorDetails(NetErrorDetails* details) override;
  
    void SetPriority(RequestPriority priority) override;
  
    void SetRequestHeadersCallback(RequestHeadersCallback callback) override;
  
   private:
    HttpStreamParser* parser() const { return state_.parser(); }
  
    HttpBasicState state_;
    RequestHeadersCallback request_headers_callback_;
  
    DISALLOW_COPY_AND_ASSIGN(HttpBasicStream);
  };
  
  }  // namespace net
  
  #endif  // NET_HTTP_HTTP_BASIC_STREAM_H_
  