// Copyright 2014 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef BUFFET_TRANSPORT_INTERFACE_H_
#define BUFFET_TRANSPORT_INTERFACE_H_

#include <vector>
#include <string>
#include <base/basictypes.h>

namespace chromeos {
namespace http {

typedef std::vector<std::pair<std::string, std::string>> HeaderList;

///////////////////////////////////////////////////////////////////////////////
// TransportInterface is an interface to abstract specific implementation
// of HTTP communication. This interface (and its underlying implementation)
// is used by http::Request and http::Response classes to provide HTTP
// functionality to the clients. This interface should be of no interest
// to the clients unless they want to implement/use their own network library.
///////////////////////////////////////////////////////////////////////////////
class TransportInterface {
 public:
  enum class Stage {
    initialized,
    response_received,
    failed,
    closed
  };

  virtual ~TransportInterface() {}

  virtual Stage GetStage() const = 0;

  virtual void AddRange(int64_t bytes) = 0;
  virtual void AddRange(uint64_t from_byte, uint64_t to_byte) = 0;

  virtual void SetAccept(char const* accept_mime_types) = 0;
  virtual std::string GetAccept() const = 0;

  virtual std::string GetRequestURL() const = 0;

  virtual void SetContentType(char const* content_type) = 0;
  virtual std::string GetContentType() const = 0;

  virtual void AddHeader(char const* header, char const* value) = 0;
  virtual void RemoveHeader(char const* header) = 0;

  virtual bool AddRequestBody(void const* data, size_t size) = 0;

  virtual void SetMethod(char const* method) = 0;
  virtual std::string GetMethod() const = 0;

  virtual void SetReferer(char const* referer) = 0;
  virtual std::string GetReferer() const = 0;

  virtual void SetUserAgent(char const* user_agent) = 0;
  virtual std::string GetUserAgent() const = 0;

  virtual bool Perform() = 0;

  virtual int GetResponseStatusCode() const = 0;
  virtual std::string GetResponseStatusText() const = 0;

  virtual std::string GetResponseHeader(char const* header_name) const = 0;
  virtual std::vector<unsigned char> const& GetResponseData() const = 0;
  virtual std::string GetErrorMessage() const = 0;

  virtual void Close() = 0;

 protected:
  TransportInterface() {}
  DISALLOW_COPY_AND_ASSIGN(TransportInterface);
};

} // namespace http
} // namespace chromeos

#endif // BUFFET_TRANSPORT_INTERFACE_H_
