blob: d66e3a9b49b90ca2e9568b9729e999388edf70d2 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef REMOTING_BASE_HTTP_STATUS_H_
#define REMOTING_BASE_HTTP_STATUS_H_
#include <string>
#include "net/base/net_errors.h"
#include "net/http/http_status_code.h"
namespace remoting {
namespace protobufhttpclient {
class Status;
} // namespace protobufhttpclient
class HttpStatus {
public:
// This is the same as the gRPC status code.
enum class Code : int {
OK = 0,
CANCELLED = 1,
UNKNOWN = 2,
INVALID_ARGUMENT = 3,
DEADLINE_EXCEEDED = 4,
NOT_FOUND = 5,
ALREADY_EXISTS = 6,
PERMISSION_DENIED = 7,
RESOURCE_EXHAUSTED = 8,
FAILED_PRECONDITION = 9,
ABORTED = 10,
OUT_OF_RANGE = 11,
UNIMPLEMENTED = 12,
INTERNAL = 13,
UNAVAILABLE = 14,
DATA_LOSS = 15,
UNAUTHENTICATED = 16,
NETWORK_ERROR = 17,
};
// An OK pre-defined instance.
static const HttpStatus& OK();
explicit HttpStatus(net::HttpStatusCode http_status_code);
explicit HttpStatus(net::Error net_error);
explicit HttpStatus(const protobufhttpclient::Status& status);
HttpStatus(Code code, const std::string& error_message);
HttpStatus(const protobufhttpclient::Status& status,
const std::string& response_body);
HttpStatus(net::HttpStatusCode http_status_code,
const std::string& response_body);
~HttpStatus();
bool operator==(const HttpStatus& other) const;
// Indicates whether the http request was successful based on the status code.
bool ok() const;
// The instance's error code.
Code error_code() const { return error_code_; }
// The message that describes the error.
const std::string& error_message() const { return error_message_; }
// The body of the response received. This field is only present when
// SetAllowHttpErrorResults() is set to true for the request.
const std::string& response_body() const { return response_body_; }
private:
Code error_code_;
std::string error_message_;
std::string response_body_;
};
} // namespace remoting
#endif // REMOTING_BASE_HTTP_STATUS_H_