//
// Copyright (C) 2009 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

// This file contains general definitions used in implementing, testing and
// emulating communication over HTTP.

#ifndef UPDATE_ENGINE_COMMON_HTTP_COMMON_H_
#define UPDATE_ENGINE_COMMON_HTTP_COMMON_H_

#include <cstdlib>

namespace chromeos_update_engine {

// Enumeration type for HTTP response codes.
enum HttpResponseCode {
  kHttpResponseUndefined           = 0,
  kHttpResponseOk                  = 200,
  kHttpResponseCreated             = 201,
  kHttpResponseAccepted            = 202,
  kHttpResponseNonAuthInfo         = 203,
  kHttpResponseNoContent           = 204,
  kHttpResponseResetContent        = 205,
  kHttpResponsePartialContent      = 206,
  kHttpResponseMultipleChoices     = 300,
  kHttpResponseMovedPermanently    = 301,
  kHttpResponseFound               = 302,
  kHttpResponseSeeOther            = 303,
  kHttpResponseNotModified         = 304,
  kHttpResponseUseProxy            = 305,
  kHttpResponseTempRedirect        = 307,
  kHttpResponseBadRequest          = 400,
  kHttpResponseUnauth              = 401,
  kHttpResponseForbidden           = 403,
  kHttpResponseNotFound            = 404,
  kHttpResponseRequestTimeout      = 408,
  kHttpResponseReqRangeNotSat      = 416,
  kHttpResponseInternalServerError = 500,
  kHttpResponseNotImplemented      = 501,
  kHttpResponseServiceUnavailable  = 503,
  kHttpResponseVersionNotSupported = 505,
};

// Returns a standard HTTP status line string for a given response code.
const char *GetHttpResponseDescription(HttpResponseCode code);

// Converts a string beginning with an HTTP error code into numerical value.
HttpResponseCode StringToHttpResponseCode(const char *s);


// Enumeration type for HTTP Content-Type.
enum HttpContentType {
  kHttpContentTypeUnspecified = 0,
  kHttpContentTypeTextXml,
};

// Returns a standard HTTP Content-Type string.
const char *GetHttpContentTypeString(HttpContentType type);

}  // namespace chromeos_update_engine

#endif  // UPDATE_ENGINE_COMMON_HTTP_COMMON_H_
